diff --git a/acmc/logging_config.py b/acmc/logging_config.py
index 42c1ae4d6fc1c340634ccfe6993f2d757044dd64..7257d9e0d8fe828a93bed536567979c118f76fb4 100644
--- a/acmc/logging_config.py
+++ b/acmc/logging_config.py
@@ -3,19 +3,18 @@ logging_config.py
 
 This module defines functions to setup logging for acmc across all module. 
 
-Constants
-- DEFAULT_LOG_FILE: The default acmc application log filename.
-
 """
 
 import pandas as pd
 import logging
 
-DEFAULT_LOG_FILE = "acmc.log" # default log filename
+DEFAULT_LOG_FILE = "acmc.log"
+"""The default acmc application log filename."""
+
 
 def setup_logger(log_level: int = logging.INFO):
     """Sets up acmc logger as a singleton outputing to file and sysout syserr."""
-    
+
     # Create a logger
     logger = logging.getLogger("acmc_logger")
     logger.setLevel(logging.INFO)
@@ -46,7 +45,13 @@ def setup_logger(log_level: int = logging.INFO):
 
 
 def set_log_level(log_level: int):
-    """Sets the log level for the acmc logger."""
+    """Sets the log level for the acmc logger.
+
+    Args:
+        log_level (int): log level from the python logging libraru
+
+    """
+
     logger = logging.getLogger("acmc_logger")
     logger.setLevel(log_level)
 
diff --git a/acmc/main.py b/acmc/main.py
index 5b071fc2cbc6de723285b19e7f5467ad4169a3af..4b7ac6ca7afa07cb5331ec9fe2628afcbd968ffe 100644
--- a/acmc/main.py
+++ b/acmc/main.py
@@ -1,3 +1,9 @@
+"""
+main.py module
+
+This module provides the functionality for the acmc command line interface
+"""
+
 import argparse
 import logging
 from pathlib import Path
@@ -5,38 +11,37 @@ from pathlib import Path
 import acmc
 from acmc import trud, omop, phen, parse, logging_config as lc
 
-# setup logging
-logger = lc.setup_logger()
 
 DEFAULT_WORKSPACE_PATH = Path("./workspace")
+"""Default phenotype workspace path"""
 
 
-def trud_install(args: argparse.Namespace):
+def _trud_install(args: argparse.Namespace):
     """Handle the `trud install` command."""
     trud.install()
 
 
-def omop_install(args: argparse.Namespace):
+def _omop_install(args: argparse.Namespace):
     """Handle the `omop install` command."""
     omop.install(args.omop_zip_file, args.version)
 
 
-def omop_clear(args: argparse.Namespace):
+def _omop_clear(args: argparse.Namespace):
     """Handle the `omop clear` command."""
     omop.clear(omop.DB_PATH)
 
 
-def omop_delete(args: argparse.Namespace):
+def _omop_delete(args: argparse.Namespace):
     """Handle the `omop delete` command."""
     omop.delete(omop.DB_PATH)
 
 
-def phen_init(args: argparse.Namespace):
+def _phen_init(args: argparse.Namespace):
     """Handle the `phen init` command."""
     phen.init(args.phen_dir, args.remote_url)
 
 
-def phen_fork(args: argparse.Namespace):
+def _phen_fork(args: argparse.Namespace):
     """Handle the `phen fork` command."""
     phen.fork(
         args.phen_dir,
@@ -46,32 +51,32 @@ def phen_fork(args: argparse.Namespace):
     )
 
 
-def phen_validate(args: argparse.Namespace):
+def _phen_validate(args: argparse.Namespace):
     """Handle the `phen validate` command."""
     phen.validate(args.phen_dir)
 
 
-def phen_map(args: argparse.Namespace):
+def _phen_map(args: argparse.Namespace):
     """Handle the `phen map` command."""
     phen.map(args.phen_dir, args.target_coding)
 
 
-def phen_export(args: argparse.Namespace):
+def _phen_export(args: argparse.Namespace):
     """Handle the `phen copy` command."""
     phen.export(args.phen_dir, args.version)
 
 
-def phen_publish(args: argparse.Namespace):
+def _phen_publish(args: argparse.Namespace):
     """Handle the `phen publish` command."""
     phen.publish(args.phen_dir, args.msg, args.remote_url, args.increment)
 
 
-def phen_copy(args: argparse.Namespace):
+def _phen_copy(args: argparse.Namespace):
     """Handle the `phen copy` command."""
     phen.copy(args.phen_dir, args.target_dir, args.version)
 
 
-def phen_diff(args: argparse.Namespace):
+def _phen_diff(args: argparse.Namespace):
     """Handle the `phen diff` command."""
     phen.diff(args.phen_dir, args.version, args.old_phen_dir, args.old_version)
 
@@ -98,7 +103,7 @@ def main():
     trud_install_parser = trud_subparsers.add_parser(
         "install", help="Install TRUD components"
     )
-    trud_install_parser.set_defaults(func=trud_install)
+    trud_install_parser.set_defaults(func=_trud_install)
 
     ### OMOP Command ###
     omop_parser = subparsers.add_parser("omop", help="OMOP commands")
@@ -116,19 +121,19 @@ def main():
     omop_install_parser.add_argument(
         "-v", "--version", required=True, help="OMOP vocabularies release version"
     )
-    omop_install_parser.set_defaults(func=omop_install)
+    omop_install_parser.set_defaults(func=_omop_install)
 
     # omop clear
     omop_clear_parser = omop_subparsers.add_parser(
         "clear", help="Clear OMOP data from database"
     )
-    omop_clear_parser.set_defaults(func=omop_clear)
+    omop_clear_parser.set_defaults(func=_omop_clear)
 
     # omop delete
     omop_delete_parser = omop_subparsers.add_parser(
         "delete", help="Delete OMOP database"
     )
-    omop_delete_parser.set_defaults(func=omop_delete)
+    omop_delete_parser.set_defaults(func=_omop_delete)
 
     ### PHEN Command ###
     phen_parser = subparsers.add_parser("phen", help="Phen commands")
@@ -152,7 +157,7 @@ def main():
         "--remote_url",
         help="(Optional) URL to repository where the phenotype will be published.",
     )
-    phen_init_parser.set_defaults(func=phen_init)
+    phen_init_parser.set_defaults(func=_phen_init)
 
     # phen fork
     phen_fork_parser = phen_subparsers.add_parser(
@@ -182,7 +187,7 @@ def main():
         required=True,
         help="(Required) Phenotype version to fork.",
     )
-    phen_fork_parser.set_defaults(func=phen_fork)
+    phen_fork_parser.set_defaults(func=_phen_fork)
 
     # phen validate
     phen_validate_parser = phen_subparsers.add_parser(
@@ -195,7 +200,7 @@ def main():
         default=str(phen.DEFAULT_PHEN_PATH.resolve()),
         help="(Optional) Local phenotype workspace directory (default is ./workspace/phen).",
     )
-    phen_validate_parser.set_defaults(func=phen_validate)
+    phen_validate_parser.set_defaults(func=_phen_validate)
 
     # phen map
     phen_map_parser = phen_subparsers.add_parser("map", help="Process phen mapping")
@@ -212,7 +217,7 @@ def main():
         choices=parse.SUPPORTED_CODE_TYPES,
         help=f"Specify the target coding {parse.SUPPORTED_CODE_TYPES}",
     )
-    phen_map_parser.set_defaults(func=phen_map)
+    phen_map_parser.set_defaults(func=_phen_map)
 
     # phen export
     phen_export_parser = phen_subparsers.add_parser(
@@ -232,7 +237,7 @@ def main():
         default="latest",
         help="Phenotype version to export, defaults to the latest version",
     )
-    phen_export_parser.set_defaults(func=phen_export)
+    phen_export_parser.set_defaults(func=_phen_export)
 
     # phen publish
     phen_publish_parser = phen_subparsers.add_parser(
@@ -259,7 +264,7 @@ def main():
     phen_publish_parser.add_argument(
         "-r", "--remote_url", help="URL to remote git repository"
     )
-    phen_publish_parser.set_defaults(func=phen_publish)
+    phen_publish_parser.set_defaults(func=_phen_publish)
 
     # phen copy
     phen_copy_parser = phen_subparsers.add_parser(
@@ -286,7 +291,7 @@ def main():
         default="latest",
         help="Phenotype version to copy, defaults to the latest version",
     )
-    phen_copy_parser.set_defaults(func=phen_copy)
+    phen_copy_parser.set_defaults(func=_phen_copy)
 
     # phen diff
     phen_diff_parser = phen_subparsers.add_parser(
@@ -318,7 +323,7 @@ def main():
         required=True,
         help="Old phenotype version to compare with the changed version",
     )
-    phen_diff_parser.set_defaults(func=phen_diff)
+    phen_diff_parser.set_defaults(func=_phen_diff)
 
     # Parse arguments
     args = parser.parse_args()
diff --git a/acmc/omop.py b/acmc/omop.py
index bbd4567758ade4f0a87c29af6d86475254b6124c..6ce36ad63ba0244615fbf73ddc70b8f4e3d97467 100644
--- a/acmc/omop.py
+++ b/acmc/omop.py
@@ -1,6 +1,6 @@
 """
-omop module
-================
+omop.py module
+
 This module provides functionality to manage OMOP vocabularies.
 """
 
@@ -14,20 +14,31 @@ import shutil
 import json
 import yaml
 from pathlib import Path
-
 from acmc import util, logging_config
 
 # setup logging
-logger = logging_config.setup_logger()
+_logger = logging_config.setup_logger()
 
-# constants
 VOCAB_PATH = Path("./vocab/omop")
+"""Default OMOP vocabulary path"""
+
 OMOP_CDM_Version = "54"
+"""Supported OMOP CDM version number"""
+
 OMOP_DB_FILENAME = f"omop_{OMOP_CDM_Version}.sqlite"
+"""Default OMOP sqllite database filename"""
+
 DB_PATH = VOCAB_PATH / OMOP_DB_FILENAME
+"""Default OMOP sqllite database path"""
+
 VERSION_FILE = "omop_version.yml"
+"""Default OMOP version file"""
+
 VERSION_PATH = VOCAB_PATH / VERSION_FILE
+"""Default OMOP version path"""
+
 EXPORT_FILE = f"omop_{OMOP_CDM_Version}_export.sqlite"
+"""Default OMOP export database filename"""
 
 vocabularies = {
     "source": "OHDSI Athena",
@@ -49,6 +60,7 @@ vocabularies = {
     ],
     "tables": [],
 }
+"""Required OMOP vocabularies definition"""
 
 omop_vocab_types = {
     "read2": "Read",
@@ -60,10 +72,11 @@ omop_vocab_types = {
     "med": None,
     "cprd": None,
 }
+"""Type mappings from acmc medical coding types to OMOP vocabulary types"""
 
 
 def install(omop_zip_file: str, version: str):
-    """"Installs the OMOP release csv files in a file-based sql database
+    """ "Installs the OMOP release csv files in a file-based sql database
 
     Args:
         omop_zip_file (str): vocabularies zip file distributed by OHDSI Athena
@@ -74,35 +87,35 @@ def install(omop_zip_file: str, version: str):
         ValueError: if the file is not a zip file
         Exception: if error reading omop csv files
     """
-    logger.info(f"Installing OMOP from zip file: {omop_zip_file}")
+    _logger.info(f"Installing OMOP from zip file: {omop_zip_file}")
     omop_zip_path = Path(omop_zip_file)
 
     # Check if the file exists and is a ZIP file
     if not omop_zip_path.exists():
         msg = f"{omop_zip_path} does not exist."
-        logger.error(msg)
+        _logger.error(msg)
         raise ValueError(msg)
-    
+
     if not zipfile.is_zipfile(omop_zip_path):
         msg = f"Error: {omop_zip_path} is not a valid ZIP file."
-        logger.error(msg)
+        _logger.error(msg)
         raise ValueError(msg)
 
     # check codes directory exists and if not create it
     if not VOCAB_PATH.exists():
         VOCAB_PATH.mkdir(parents=True)
-        logger.debug(f"OMOP directory '{VOCAB_PATH}' created.")
+        _logger.debug(f"OMOP directory '{VOCAB_PATH}' created.")
     else:
         # removing existing OMOP files
         csv_files = list(VOCAB_PATH.glob("*.csv"))
         for file in csv_files:
             file.unlink()
-            logger.debug(f"Deleted OMOP csv file: {file}")
+            _logger.debug(f"Deleted OMOP csv file: {file}")
 
     # Extract ZIP contents
     with zipfile.ZipFile(omop_zip_path, "r") as zip_ref:
         zip_ref.extractall(VOCAB_PATH)
-        logger.info(f"Extracted OMOP zip file {omop_zip_path} to {VOCAB_PATH}/")
+        _logger.info(f"Extracted OMOP zip file {omop_zip_path} to {VOCAB_PATH}/")
 
     # connect to database, if it does not exist it will be created
     conn = sqlite3.connect(DB_PATH)
@@ -113,7 +126,7 @@ def install(omop_zip_file: str, version: str):
     table_count = 1
     for filename in csv_files:
         try:
-            logger.info(
+            _logger.info(
                 f"Processing {table_count} of {total_tables_count} tables: {filename}"
             )
             # read the CSV file with the specified delimiter
@@ -133,7 +146,7 @@ def install(omop_zip_file: str, version: str):
     # write version file
     write_version_file(version)
 
-    logger.info(f"OMOP installation completed")
+    _logger.info(f"OMOP installation completed")
 
 
 def write_version_file(version: str):
@@ -163,7 +176,7 @@ def clear(db_path: Path):
     Raises:
         FileNotFoundError: if the omop sqllite database does not exist
     """
-    logger.info(f"Clearing OMOP data from database")
+    _logger.info(f"Clearing OMOP data from database")
     if not db_path.is_file():
         raise FileNotFoundError(f"Error: OMOP DB file '{db_path}' does not exist.")
     conn = sqlite3.connect(db_path)
@@ -172,13 +185,13 @@ def clear(db_path: Path):
 
     # Fetch and print table names
     tables = cur.fetchall()
-    logger.debug("Tables in database:", [table[0] for table in tables])
+    _logger.debug("Tables in database:", [table[0] for table in tables])
 
     # cur.execute("DROP TABLE CONCEPT_SET;")
     # cur.execute("DROP TABLE CONCEPT_SET_ITEM;")
 
     conn.close()
-    logger.info(f"OMOP database cleared")
+    _logger.info(f"OMOP database cleared")
 
 
 def delete(db_path: Path):
@@ -190,13 +203,13 @@ def delete(db_path: Path):
     Raises:
         FileNotFoundError: if the omop sqllite database does not exist
     """
-    
-    logger.info(f"Deleting OMOP database")
+
+    _logger.info(f"Deleting OMOP database")
     if not db_path.is_file():
         raise FileNotFoundError(f"Error: OMOP DB file '{db_path}' does not exist.")
 
     db_path.unlink()
-    logger.info(f"OMOP database deleted")
+    _logger.info(f"OMOP database deleted")
 
 
 def table_exists(cursor: sqlite3.Cursor, table_name: str) -> bool:
@@ -208,8 +221,8 @@ def table_exists(cursor: sqlite3.Cursor, table_name: str) -> bool:
 
     Returns:
         bool: true if table exists
-    """    
-        
+    """
+
     cursor.execute(
         """
 		SELECT name
@@ -234,8 +247,8 @@ def vocab_exists(cursor: sqlite3.Cursor, vocab_id: str) -> bool:
 
     Returns:
         bool: true if vocabulary id exists
-    """    
-    
+    """
+
     cursor.execute(
         """
 		SELECT vocabulary_id 
@@ -261,7 +274,7 @@ def concept_set_exist(cursor: sqlite3.Cursor, concept_set_name: str) -> bool:
     Returns:
         bool: true if concept set exists
     """
-    
+
     query = f"SELECT EXISTS (SELECT 1 FROM CONCEPT_SET WHERE concept_set_name = ?)"
     cursor.execute(query, (concept_set_name,))
 
@@ -269,21 +282,22 @@ def concept_set_exist(cursor: sqlite3.Cursor, concept_set_name: str) -> bool:
     return cursor.fetchone()[0] == 1
 
 
-def export(map_path: Path, export_path: Path, version: str, omop_metadata: dict) -> Path:
+def export(
+    map_path: Path, export_path: Path, version: str, omop_metadata: dict
+) -> Path:
     """Export concept sets to omop database in csv format
 
     Args:
         map_path (Path): path to the acmc map directory containing concept sets in csv format
         export_path (Path): path to the directory where the omop database csv files are to be written
         version (str): phenotype version for omop vocabulary version
-        omop_metadata (dict): phenotype omop metadata for omop vocabulary metadata 
-                
+        omop_metadata (dict): phenotype omop metadata for omop vocabulary metadata
+
     Returns:
         Path: path to the exported sqllite database
     """
-    
-    
-    logger.debug(f"exporting with metadata {omop_metadata} at version {version}")
+
+    _logger.debug(f"exporting with metadata {omop_metadata} at version {version}")
 
     # copy the baseline omop database
     export_db_path = export_path / EXPORT_FILE
@@ -335,9 +349,9 @@ def export(map_path: Path, export_path: Path, version: str, omop_metadata: dict)
     # read map files
     map_files = list(map_path.glob("*.csv"))
     total = len(map_files)
-    logger.info(f"Exporting {total} map files")
+    _logger.info(f"Exporting {total} map files")
     for index, map_file in enumerate(map_files):
-        logger.info(f"Processing {index+1} of {total}: {map_file}")
+        _logger.info(f"Processing {index+1} of {total}: {map_file}")
         df = pd.read_csv(map_file)
 
         for concept_set_name, grp in df.groupby("CONCEPT_SET"):
@@ -347,7 +361,7 @@ def export(map_path: Path, export_path: Path, version: str, omop_metadata: dict)
                     f"INSERT INTO CONCEPT_SET (concept_set_name, vocabulary_id) VALUES ('{concept_set_name}', '{omop_metadata['vocabulary_id']}');"
                 )
             else:
-                logger.debug(f"Concept_set {concept_set_name} already exists")
+                _logger.debug(f"Concept_set {concept_set_name} already exists")
                 # TODO: ask to remove old concept_set?
 
             # get Concept_set_Id
@@ -361,10 +375,10 @@ def export(map_path: Path, export_path: Path, version: str, omop_metadata: dict)
                 ),
             )
             # FAILS HERE WITH NONE REUR
-            logger.debug(f"target code type {target_code_type}")
-            logger.debug(f"omop code type {omop_vocab_types[target_code_type]}")
+            _logger.debug(f"target code type {target_code_type}")
+            _logger.debug(f"omop code type {omop_vocab_types[target_code_type]}")
             concept_set_id = cur.fetchone()[0]
-            logger.debug(f"concept set id {concept_set_id}")
+            _logger.debug(f"concept set id {concept_set_id}")
 
             # get corresponing Concept_id (OMOP) for each Concept_code (e.g. SNOMED)
             concept_codes = "'" + "', '".join(list(grp["CONCEPT"].astype(str))) + "'"
@@ -373,7 +387,7 @@ def export(map_path: Path, export_path: Path, version: str, omop_metadata: dict)
             df_out = pd.DataFrame(cur.fetchall(), columns=["concept_id"])
 
             if not len(grp) == len(df_out):
-                logger.error(
+                _logger.error(
                     f"ERROR: Some {omop_vocab_types[target_code_type]} Codes do not exist in OMOP Database"
                 )
 
@@ -395,10 +409,10 @@ def export(map_path: Path, export_path: Path, version: str, omop_metadata: dict)
             output_file = f"{table_name}.csv"
             output_path = export_path / output_file
             df.to_csv(output_path, index=False)  # Save as CSV
-            logger.info(f"Exported {table_name} to {table_name}.csv")
+            _logger.info(f"Exported {table_name} to {table_name}.csv")
 
     conn.close()
 
-    logger.debug(f"Created export db successfully")
+    _logger.debug(f"Created export db successfully")
 
     return export_db_path
diff --git a/acmc/parse.py b/acmc/parse.py
index 9c0e47212b016d82182b475fc3bfd18588e09c3d..45a9839a6533b8a742091d3ac6dba343a02e3ca5 100644
--- a/acmc/parse.py
+++ b/acmc/parse.py
@@ -1,16 +1,22 @@
+"""
+parse.py module
+
+This module provides functionality to set up medical code translation classes
+
+"""
+
 import pandas as pd
 import numpy as np
 import os
 from typing import Callable, Optional, Tuple
 from pathlib import Path
-
 from acmc import trud, logging_config as lc
 
 # setup logging
-logger = lc.setup_logger()
+_logger = lc.setup_logger()
 
-# Define allowed values
 SUPPORTED_CODE_TYPES = {"read2", "read3", "icd10", "snomed", "opcs4", "atc"}
+"""List of support medical coding types"""
 
 
 class CodesError:
@@ -84,17 +90,17 @@ class Proto:
             # Check if any codes fail the check to False
             if not cond(codes).all():
                 # Log the number of codes that failed
-                logger.debug(
+                _logger.debug(
                     f"Check: {msg} {(~cond(codes)).sum()} failed, trying to fix"
                 )
                 # try fix errors by running lamba "process" function
                 try:
                     codes = fix(codes, codes_file)
-                    logger.debug(f"Check: Fixed")
+                    _logger.debug(f"Check: Fixed")
                 except InvalidCodesException as ex:
                     errors.append(ex.error)
             else:
-                logger.debug(f"Check: passed")
+                _logger.debug(f"Check: passed")
 
         return codes, errors
 
diff --git a/acmc/phen.py b/acmc/phen.py
index 124cd4c4928214c1593788374cd42665b966bc18..ec675c2eee0d0683c7d772aad2dc0667d0035647 100644
--- a/acmc/phen.py
+++ b/acmc/phen.py
@@ -1,6 +1,6 @@
 """
-Phenotype Module
-================
+phenotype.py module
+
 This module provides functionality for managing phenotypes.
 """
 
@@ -25,41 +25,67 @@ from deepdiff import DeepDiff
 from pathlib import Path
 from urllib.parse import urlparse, urlunparse
 from typing import Tuple, Set, Any
-
 import acmc
-from acmc import trud, omop, parse, util
-
-# setup logging
-import acmc.logging_config as lc
+from acmc import trud, omop, parse, util, logging_config as lc
 
-logger = lc.setup_logger()
+# set up logging
+_logger = lc.setup_logger()
 
 pd.set_option("mode.chained_assignment", None)
 
 PHEN_DIR = "phen"
+"""Default phenotype directory name"""
+
 DEFAULT_PHEN_PATH = Path("./workspace") / PHEN_DIR
+"""Default phenotype directory path"""
 
 CONCEPTS_DIR = "concepts"
+"""Default concepts directory name"""
+
 MAP_DIR = "map"
+"""Default map directory name"""
+
 CONCEPT_SET_DIR = "concept-sets"
+"""Default concept set directory name"""
+
 CSV_PATH = Path(CONCEPT_SET_DIR) / "csv"
+"""Default CSV concept set directory path"""
+
 OMOP_PATH = Path(CONCEPT_SET_DIR) / "omop"
+"""Default OMOP concept set directory path"""
+
 DEFAULT_PHEN_DIR_LIST = [CONCEPTS_DIR, MAP_DIR, CONCEPT_SET_DIR]
+"""List of default phenotype directories"""
+
 CONFIG_FILE = "config.yml"
+"""Default configuration filename"""
+
 VOCAB_VERSION_FILE = "vocab_version.yml"
+"""Default vocabulary version filename"""
+
 SEMANTIC_VERSION_TYPES = ["major", "minor", "patch"]
+"""List of semantic version increment types"""
+
 DEFAULT_VERSION_INC = "patch"
+"""Default semantic version increment type"""
 
 DEFAULT_GIT_BRANCH = "main"
+"""Default phenotype repo branch name"""
 
 SPLIT_COL_ACTION = "split_col"
+"""Split column preprocessing action type"""
+
 CODES_COL_ACTION = "codes_col"
+"""Codes column preprocessing action type"""
+
 DIVIDE_COL_ACTION = "divide_col"
+"""Divide column preprocessing action type"""
+
 COL_ACTIONS = [SPLIT_COL_ACTION, CODES_COL_ACTION, DIVIDE_COL_ACTION]
+"""List of column preprocessing action types"""
 
 CODE_FILE_TYPES = [".xlsx", ".xls", ".csv"]
-SOURCE_COL_SUFFIX = "_acmc_source"
-TARGET_COL_SUFFIX = "_acmc_target"
+"""List of supported source concept coding list file types"""
 
 # config.yaml schema
 CONFIG_SCHEMA = {
@@ -123,6 +149,7 @@ CONFIG_SCHEMA = {
         },
     }
 }
+"""Phenotype config.yml schema definition"""
 
 
 class PhenValidationException(Exception):
@@ -133,7 +160,7 @@ class PhenValidationException(Exception):
         self.validation_errors = validation_errors
 
 
-def construct_git_url(remote_url: str):
+def _construct_git_url(remote_url: str):
     """Constructs a git url for github or gitlab including a PAT token environment variable"""
     # check the url
     parsed_url = urlparse(remote_url)
@@ -170,14 +197,14 @@ def construct_git_url(remote_url: str):
     )
 
 
-def create_empty_git_dir(path: Path):
+def _create_empty_git_dir(path: Path):
     """Creates a directory with a .gitkeep file so that it's tracked in git"""
     path.mkdir(exist_ok=True)
     keep_path = path / ".gitkeep"
     keep_path.touch(exist_ok=True)
 
 
-def check_delete_dir(path: Path, msg: str) -> bool:
+def _check_delete_dir(path: Path, msg: str) -> bool:
     """Checks on the command line if a user wants to delete a directory
 
     Args:
@@ -194,113 +221,21 @@ def check_delete_dir(path: Path, msg: str) -> bool:
         shutil.rmtree(path)
         deleted = True
     else:
-        logger.info("Directory was not deleted.")
+        _logger.info("Directory was not deleted.")
 
     return deleted
 
 
-def fork(phen_dir: str, upstream_url: str, upstream_version: str, new_origin_url: str):
-    """Forks an upstream phenotype in a remote repo at a specific version to a local director, and optionally sets to a new remote origin"
-
-    Args:
-        phen_dir (str): local directory path where the upstream repo is to be cloned
-        upstream_url (str): url to the upstream repo
-        upstream_version (str): version in the upstream repo to clone
-        new_origin_url (str, optional): url of the remote repo to set as the new origin. Defaults to None.
-
-    Raises:
-        ValueError: if the specified version is not in the upstream repo
-        ValueError: if the upstream repo is not a valid phenotype repo
-        ValueError: if there's any other problems with Git
-    """
-    logger.info(
-        f"Forking upstream repo {upstream_url} {upstream_version} into directory: {phen_dir}"
-    )
-
-    phen_path = Path(phen_dir)
-    # check if directory already exists and ask user if they want to recreate it
-    if (
-        phen_path.exists() and phen_path.is_dir()
-    ):  # Check if it exists and is a directory
-        configure = check_delete_dir(
-            phen_path,
-            f"The phen directory already exists. Do you want to reinitialise? (yes/no): ",
-        )
-    else:
-        configure = True
-
-    if not configure:
-        logger.info(f"Exiting, phenotype not initiatised")
-        return
-
-    try:
-        # Clone repo
-        git_url = construct_git_url(upstream_url)
-        repo = git.Repo.clone_from(git_url, phen_path)
-
-        # Fetch all branches and tags
-        repo.remotes.origin.fetch()
-
-        # Check if the version exists
-        available_refs = [ref.name.split("/")[-1] for ref in repo.references]
-        if upstream_version not in available_refs:
-            raise ValueError(
-                f"Version '{upstream_version}' not found in the repository: {upstream_url}."
-            )
-
-        # Checkout the specified version
-        repo.git.checkout(upstream_version)
-        main_branch = repo.heads[DEFAULT_GIT_BRANCH]
-        main_branch.checkout()
-
-        # Check if 'config.yml' exists in the root directory
-        config_path = phen_path / "config.yml"
-        if not os.path.isfile(config_path):
-            raise ValueError(
-                f"The forked repository is not a valid ACMC repo because 'config.yml' is missing in the root directory."
-            )
-
-        # Validate the phenotype is compatible with the acmc tool
-        validate(str(phen_path.resolve()))
-
-        # Delete each tag locally
-        tags = repo.tags
-        for tag in tags:
-            repo.delete_tag(tag)
-            logger.debug(f"Deleted tags from forked repo: {tag}")
-
-        # Add upstream remote
-        repo.create_remote("upstream", upstream_url)
-        remote = repo.remotes["origin"]
-        repo.delete_remote(remote)  # Remove existing origin
-
-        # Optionally set a new origin remote
-        if new_origin_url:
-            git_url = construct_git_url(new_origin_url)
-            repo.create_remote("origin", git_url)
-            repo.git.push("--set-upstream", "origin", "main")
-
-        logger.info(f"Repository forked successfully at {phen_path}")
-        logger.info(f"Upstream set to {upstream_url}")
-        if new_origin_url:
-            logger.info(f"Origin set to {new_origin_url}")
-
-    except Exception as e:
-        if phen_path.exists():
-            shutil.rmtree(phen_path)
-        raise ValueError(f"Error occurred during repository fork: {str(e)}")
-
-
 def init(phen_dir: str, remote_url: str):
     """Initial phenotype directory as git repo with standard structure"""
-    logger.info(f"Initialising Phenotype in directory: {phen_dir}")
+    _logger.info(f"Initialising Phenotype in directory: {phen_dir}")
     phen_path = Path(phen_dir)
 
     # check if directory already exists and ask user if they want to recreate it
     if (
         phen_path.exists() and phen_path.is_dir()
     ):  # Check if it exists and is a directory
-        configure = check_delete_dir(
+        configure = _check_delete_dir(
             phen_path,
             f"The phen directory already exists. Do you want to reinitialise? (yes/no): ",
         )
@@ -308,7 +243,7 @@ def init(phen_dir: str, remote_url: str):
         configure = True
 
     if not configure:
-        logger.info(f"Exiting, phenotype not initiatised")
+        _logger.info(f"Exiting, phenotype not initiatised")
         return
 
     # Initialise repo from local or remote
@@ -317,7 +252,7 @@ def init(phen_dir: str, remote_url: str):
     # if remote then clone the repo otherwise init a local repo
     if remote_url != None:
         # add PAT token to the URL
-        git_url = construct_git_url(remote_url)
+        git_url = _construct_git_url(remote_url)
 
         # clone the repo
         git_cmd = git.cmd.Git()
@@ -329,16 +264,16 @@ def init(phen_dir: str, remote_url: str):
         if (
             len(repo.branches) == 0 or repo.head.is_detached
         ):  # Handle detached HEAD (e.g., after init)
-            logger.debug("The phen repository has no commits yet.")
+            _logger.debug("The phen repository has no commits yet.")
             commit_count = 0
         else:
             # Get the total number of commits in the default branch
             commit_count = sum(1 for _ in repo.iter_commits())
-            logger.debug(f"Repo has previous commits: {commit_count}")
+            _logger.debug(f"Repo has previous commits: {commit_count}")
     else:
         # local repo, create the directories and init
         phen_path.mkdir(parents=True, exist_ok=True)
-        logger.debug(f"Phen directory '{phen_path}' has been created.")
+        _logger.debug(f"Phen directory '{phen_path}' has been created.")
         repo = git.Repo.init(phen_path)
         commit_count = 0
 
@@ -366,12 +301,12 @@ def init(phen_dir: str, remote_url: str):
     # if the phen path does not contain the config file then initialise the phen type
     config_path = phen_path / CONFIG_FILE
     if config_path.exists():
-        logger.debug(f"Phenotype configuration files already exist")
+        _logger.debug(f"Phenotype configuration files already exist")
         return
 
-    logger.info("Creating phen directory structure and config files")
+    _logger.info("Creating phen directory structure and config files")
     for d in DEFAULT_PHEN_DIR_LIST:
-        create_empty_git_dir(phen_path / d)
+        _create_empty_git_dir(phen_path / d)
 
     # create empty phen config file
     config = {
@@ -419,12 +354,104 @@ def init(phen_dir: str, remote_url: str):
     repo.git.add(all=True)
     repo.index.commit("initialised the phen git repo.")
 
-    logger.info(f"Phenotype initialised successfully")
+    _logger.info(f"Phenotype initialised successfully")
+
+
+def fork(phen_dir: str, upstream_url: str, upstream_version: str, new_origin_url: str):
+    """Forks an upstream phenotype in a remote repo at a specific version to a local director, and optionally sets to a new remote origin"
+
+    Args:
+        phen_dir (str): local directory path where the upstream repo is to be cloned
+        upstream_url (str): url to the upstream repo
+        upstream_version (str): version in the upstream repo to clone
+        new_origin_url (str, optional): url of the remote repo to set as the new origin. Defaults to None.
+
+    Raises:
+        ValueError: if the specified version is not in the upstream repo
+        ValueError: if the upstream repo is not a valid phenotype repo
+        ValueError: if there's any other problems with Git
+    """
+    _logger.info(
+        f"Forking upstream repo {upstream_url} {upstream_version} into directory: {phen_dir}"
+    )
+
+    phen_path = Path(phen_dir)
+    # check if directory already exists and ask user if they want to recreate it
+    if (
+        phen_path.exists() and phen_path.is_dir()
+    ):  # Check if it exists and is a directory
+        configure = _check_delete_dir(
+            phen_path,
+            f"The phen directory already exists. Do you want to reinitialise? (yes/no): ",
+        )
+    else:
+        configure = True
+
+    if not configure:
+        _logger.info(f"Exiting, phenotype not initiatised")
+        return
+
+    try:
+        # Clone repo
+        git_url = _construct_git_url(upstream_url)
+        repo = git.Repo.clone_from(git_url, phen_path)
+
+        # Fetch all branches and tags
+        repo.remotes.origin.fetch()
+
+        # Check if the version exists
+        available_refs = [ref.name.split("/")[-1] for ref in repo.references]
+        if upstream_version not in available_refs:
+            raise ValueError(
+                f"Version '{upstream_version}' not found in the repository: {upstream_url}."
+            )
+
+        # Checkout the specified version
+        repo.git.checkout(upstream_version)
+        main_branch = repo.heads[DEFAULT_GIT_BRANCH]
+        main_branch.checkout()
+
+        # Check if 'config.yml' exists in the root directory
+        config_path = phen_path / "config.yml"
+        if not os.path.isfile(config_path):
+            raise ValueError(
+                f"The forked repository is not a valid ACMC repo because 'config.yml' is missing in the root directory."
+            )
+
+        # Validate the phenotype is compatible with the acmc tool
+        validate(str(phen_path.resolve()))
+
+        # Delete each tag locally
+        tags = repo.tags
+        for tag in tags:
+            repo.delete_tag(tag)
+            _logger.debug(f"Deleted tags from forked repo: {tag}")
+
+        # Add upstream remote
+        repo.create_remote("upstream", upstream_url)
+        remote = repo.remotes["origin"]
+        repo.delete_remote(remote)  # Remove existing origin
+
+        # Optionally set a new origin remote
+        if new_origin_url:
+            git_url = _construct_git_url(new_origin_url)
+            repo.create_remote("origin", git_url)
+            repo.git.push("--set-upstream", "origin", "main")
+
+        _logger.info(f"Repository forked successfully at {phen_path}")
+        _logger.info(f"Upstream set to {upstream_url}")
+        if new_origin_url:
+            _logger.info(f"Origin set to {new_origin_url}")
+
+    except Exception as e:
+        if phen_path.exists():
+            shutil.rmtree(phen_path)
+        raise ValueError(f"Error occurred during repository fork: {str(e)}")
 
 
 def validate(phen_dir: str):
     """Validates the phenotype directory is a git repo with standard structure"""
-    logger.info(f"Validating phenotype: {phen_dir}")
+    _logger.info(f"Validating phenotype: {phen_dir}")
     phen_path = Path(phen_dir)
     if not phen_path.is_dir():
         raise NotADirectoryError(
@@ -457,12 +484,12 @@ def validate(phen_dir: str):
 
             validator = Validator(CONFIG_SCHEMA)
             if validator.validate(phenotype):
-                logger.debug("YAML structure is valid.")
+                _logger.debug("YAML structure is valid.")
             else:
-                logger.error(f"YAML structure validation failed: {validator.errors}")
+                _logger.error(f"YAML structure validation failed: {validator.errors}")
                 raise Exception(f"YAML structure validation failed: {validator.errors}")
         except yaml.YAMLError as e:
-            logger.error(f"YAML syntax error: {e}")
+            _logger.error(f"YAML syntax error: {e}")
             raise e
     else:
         raise Exception(
@@ -526,16 +553,16 @@ def validate(phen_dir: str):
                     validation_errors.append(f"Action {action} is not supported")
 
     if len(validation_errors) > 0:
-        logger.error(validation_errors)
+        _logger.error(validation_errors)
         raise PhenValidationException(
             f"Configuration file {str(config_path.resolve())} failed validation",
             validation_errors,
         )
 
-    logger.info(f"Phenotype validated successfully")
+    _logger.info(f"Phenotype validated successfully")
 
 
-def read_table_file(path: Path, excel_sheet: str = ""):
+def _read_table_file(path: Path, excel_sheet: str = ""):
     """
     Load Code List File
     """
@@ -558,9 +585,9 @@ def read_table_file(path: Path, excel_sheet: str = ""):
     return df
 
 
-def process_actions(df: pd.DataFrame, concept_set: dict) -> pd.DataFrame:
+def _process_actions(df: pd.DataFrame, concept_set: dict) -> pd.DataFrame:
     # Perform Structural Changes to file before preprocessing
-    logger.debug("Processing file structural actions")
+    _logger.debug("Processing file structural actions")
     if (
         "actions" in concept_set["file"]
         and "split_col" in concept_set["file"]["actions"]
@@ -568,7 +595,7 @@ def process_actions(df: pd.DataFrame, concept_set: dict) -> pd.DataFrame:
     ):
         split_col = concept_set["file"]["actions"]["split_col"]
         codes_col = concept_set["file"]["actions"]["codes_col"]
-        logger.debug(
+        _logger.debug(
             "Action: Splitting",
             split_col,
             "column into:",
@@ -583,11 +610,10 @@ def process_actions(df: pd.DataFrame, concept_set: dict) -> pd.DataFrame:
     return df
 
 
-# Perform QA Checks on columns individually and append to df
-def preprocess_source_concepts(
+def _preprocess_source_concepts(
     df: pd.DataFrame, concept_set: dict, code_file_path: Path
 ) -> Tuple[pd.DataFrame, list]:
-    """Parses each column individually - Order and length will not be preserved!"""
+    """Perform QA Checks on columns individually and append to df"""
     out = pd.DataFrame([])  # create output df to append to
     code_errors = []  # list of errors from processing
 
@@ -598,7 +624,7 @@ def preprocess_source_concepts(
     code_types = parse.CodeTypeParser().code_types
     for code_type in concept_set["file"]["columns"]:
         parser = code_types[code_type]
-        logger.info(f"Processing {code_type} codes for {code_file_path}")
+        _logger.info(f"Processing {code_type} codes for {code_file_path}")
 
         # get codes by column name
         source_col_name = concept_set["file"]["columns"][code_type]
@@ -610,7 +636,7 @@ def preprocess_source_concepts(
         codes, errors = parser.process(codes, code_file_path)
         if len(errors) > 0:
             code_errors.extend(errors)
-            logger.warning(f"Codes validation failed with {len(errors)} errors")
+            _logger.warning(f"Codes validation failed with {len(errors)} errors")
 
         # add processed codes to df
         new_col_name = f"{source_col_name}_SOURCE"
@@ -621,15 +647,11 @@ def preprocess_source_concepts(
             ignore_index=True,
         )
 
-    logger.debug(out.head())
+    _logger.debug(out.head())
 
     return out, code_errors
 
 
-def get_code_type_from_col_name(col_name: str):
-    return col_name.split("_")[0]
-
-
 # Translate Df with multiple codes into single code type Series
 def translate_codes(
     source_df: pd.DataFrame, target_code_type: str, concept_name: str
@@ -641,7 +663,7 @@ def translate_codes(
         columns=["SOURCE_CONCEPT", "SOURCE_CONCEPT_TYPE", "CONCEPT"], dtype="string"
     )
     # Convert codes to target type
-    logger.info(f"Converting to target code type {target_code_type}")
+    _logger.info(f"Converting to target code type {target_code_type}")
 
     for source_code_type in source_df.columns:
         # if target code type is the same as thet source code type, no translation, just appending source as target
@@ -654,7 +676,7 @@ def translate_codes(
                 }
             )
             codes = pd.concat([codes, copy_df])
-            logger.debug(
+            _logger.debug(
                 f"Target code type {target_code_type} is the same as source code type {len(source_df)}, copying codes rather than translating"
             )
         else:
@@ -680,7 +702,7 @@ def translate_codes(
                 codes = pd.concat([codes, translated_df])
 
             else:
-                logger.warning(
+                _logger.warning(
                     f"No mapping from {source_code_type} to {target_code_type}, file {str(map_path.resolve())} does not exist"
                 )
 
@@ -690,24 +712,12 @@ def translate_codes(
     if len(codes.index) > 0:
         codes["CONCEPT_SET"] = concept_name
     else:
-        logger.debug(f"No codes converted with target code type {target_code_type}")
+        _logger.debug(f"No codes converted with target code type {target_code_type}")
 
     return codes
 
 
-def sql_row_exist(
-    conn: sqlite3.Connection, table: str, column: str, value: str
-) -> bool:
-    # Execute and check if a result exists
-    cur = conn.cursor()
-    query = f"SELECT 1 FROM {table} WHERE {column} = ? LIMIT 1;"
-    cur.execute(query, (value,))
-    exists = cur.fetchone() is not None
-
-    return exists
-
-
-def write_code_errors(code_errors: list, code_errors_path: Path):
+def _write_code_errors(code_errors: list, code_errors_path: Path):
     err_df = pd.DataFrame(
         [
             {
@@ -765,7 +775,7 @@ def write_vocab_version(phen_path: Path):
 
 
 def map(phen_dir: str, target_code_type: str):
-    logger.info(f"Processing phenotype: {phen_dir}")
+    _logger.info(f"Processing phenotype: {phen_dir}")
 
     # Validate configuration
     validate(phen_dir)
@@ -788,16 +798,16 @@ def map(phen_dir: str, target_code_type: str):
         )
 
     if target_code_type is not None:
-        map_target_code_type(phen_path, phenotype, target_code_type)
+        _map_target_code_type(phen_path, phenotype, target_code_type)
     else:
         for t in phenotype["map"]:
-            map_target_code_type(phen_path, phenotype, t)
+            _map_target_code_type(phen_path, phenotype, t)
 
-    logger.info(f"Phenotype processed successfully")
+    _logger.info(f"Phenotype processed successfully")
 
 
-def map_target_code_type(phen_path: Path, phenotype: dict, target_code_type: str):
-    logger.debug(f"Target coding format: {target_code_type}")
+def _map_target_code_type(phen_path: Path, phenotype: dict, target_code_type: str):
+    _logger.debug(f"Target coding format: {target_code_type}")
     concepts_path = phen_path / CONCEPTS_DIR
     # Create output dataframe
     out = pd.DataFrame([])
@@ -805,18 +815,18 @@ def map_target_code_type(phen_path: Path, phenotype: dict, target_code_type: str
 
     # Process each folder in codes section
     for concept_set in phenotype["concept_sets"]:
-        logger.debug(f"--- {concept_set['file']} ---")
+        _logger.debug(f"--- {concept_set['file']} ---")
 
         # Load code file
         codes_file_path = Path(concepts_path / concept_set["file"]["path"])
-        df = read_table_file(codes_file_path)
+        df = _read_table_file(codes_file_path)
 
         # process structural actions
-        df = process_actions(df, concept_set)
+        df = _process_actions(df, concept_set)
 
         # preprocessing and validate of source concepts
-        logger.debug("Processing and validating source concept codes")
-        df, errors = preprocess_source_concepts(
+        _logger.debug("Processing and validating source concept codes")
+        df, errors = _preprocess_source_concepts(
             df,
             concept_set,
             codes_file_path,
@@ -826,13 +836,15 @@ def map_target_code_type(phen_path: Path, phenotype: dict, target_code_type: str
         source_column_names = list(concept_set["file"]["columns"].keys())
         source_df = df[source_column_names]
 
-        logger.debug(source_df.columns)
-        logger.debug(source_df.head())
+        _logger.debug(source_df.columns)
+        _logger.debug(source_df.head())
 
-        logger.debug(f"Length of errors from preprocess_source_concepts {len(errors)}")
+        _logger.debug(
+            f"Length of errors from _preprocess_source_concepts {len(errors)}"
+        )
         if len(errors) > 0:
             code_errors.extend(errors)
-        logger.debug(f" Length of code_errors {len(code_errors)}")
+        _logger.debug(f" Length of code_errors {len(code_errors)}")
 
         # Map source concepts codes to target codes
         # if processing a source coding list with categorical data
@@ -842,8 +854,8 @@ def map_target_code_type(phen_path: Path, phenotype: dict, target_code_type: str
             and len(df) > 0
         ):
             divide_col = concept_set["file"]["actions"]["divide_col"]
-            logger.debug(f"Action: Dividing Table by {divide_col}")
-            logger.debug(f"column into: {df[divide_col].unique()}")
+            _logger.debug(f"Action: Dividing Table by {divide_col}")
+            _logger.debug(f"column into: {df[divide_col].unique()}")
             df_grp = df.groupby(divide_col)
             for cat, grp in df_grp:
                 if cat == concept_set["file"]["category"]:
@@ -865,15 +877,15 @@ def map_target_code_type(phen_path: Path, phenotype: dict, target_code_type: str
             out = pd.concat([out, trans_out])
 
     if len(code_errors) > 0:
-        logger.error(f"The map processing has {len(code_errors)} errors")
+        _logger.error(f"The map processing has {len(code_errors)} errors")
         error_path = phen_path / MAP_DIR / "errors"
         error_path.mkdir(parents=True, exist_ok=True)
         error_filename = f"{target_code_type}-code-errors.csv"
-        write_code_errors(code_errors, error_path / error_filename)
+        _write_code_errors(code_errors, error_path / error_filename)
 
     # Check there is output from processing
     if len(out.index) == 0:
-        logger.error(f"No output after map processing")
+        _logger.error(f"No output after map processing")
         raise Exception(
             f"No output after map processing, check config {str(phen_path.resolve())}"
         )
@@ -907,7 +919,7 @@ def map_target_code_type(phen_path: Path, phenotype: dict, target_code_type: str
         result = pd.merge(out_filtered_df, metadata_df, how="left", on="SOURCE_CONCEPT")
         result_count = len(result.index)
 
-        logger.debug(
+        _logger.debug(
             f"Adding metadata for {source_concept_type}: out_count {out_count}, filtered_count {filtered_count}, metadata_df_count {metadata_df_count}, result_count {result_count}"
         )
 
@@ -917,7 +929,7 @@ def map_target_code_type(phen_path: Path, phenotype: dict, target_code_type: str
     # Concatenate all the results into a single DataFrame
     final_out = pd.concat(result_list, ignore_index=True)
     final_out = final_out.drop_duplicates(subset=["CONCEPT_SET", "CONCEPT"])
-    logger.debug(
+    _logger.debug(
         f"Check metadata processing counts: before {len(out.index)} : after {len(final_out.index)}"
     )
 
@@ -925,7 +937,7 @@ def map_target_code_type(phen_path: Path, phenotype: dict, target_code_type: str
     output_filename = target_code_type + ".csv"
     map_path = phen_path / MAP_DIR / output_filename
     final_out.to_csv(map_path, index=False)
-    logger.info(f"Saved mapped concepts to {str(map_path.resolve())}")
+    _logger.info(f"Saved mapped concepts to {str(map_path.resolve())}")
 
     # save concept sets as separate files
     concept_set_path = phen_path / CSV_PATH / target_code_type
@@ -951,10 +963,10 @@ def map_target_code_type(phen_path: Path, phenotype: dict, target_code_type: str
 
     write_vocab_version(phen_path)
 
-    logger.info(f"Phenotype processed target code type {target_code_type}")
+    _logger.info(f"Phenotype processed target code type {target_code_type}")
 
 
-def generate_version_tag(
+def _generate_version_tag(
     repo: git.Repo, increment: str = DEFAULT_VERSION_INC, use_v_prefix: bool = False
 ) -> str:
     # Get all valid semantic version tags
@@ -1006,14 +1018,14 @@ def publish(
     # check if any changes to publish
     if not repo.is_dirty() and not repo.untracked_files:
         if remote_url is not None and "origin" not in repo.remotes:
-            logger.info(f"First publish to remote url {remote_url}")
+            _logger.info(f"First publish to remote url {remote_url}")
         else:
-            logger.info("Nothing to publish, no changes to the repo")
+            _logger.info("Nothing to publish, no changes to the repo")
             return
 
     # get next version
-    new_version_str = generate_version_tag(repo, increment)
-    logger.info(f"New version: {new_version_str}")
+    new_version_str = _generate_version_tag(repo, increment)
+    _logger.info(f"New version: {new_version_str}")
 
     # Write version in configuration file
     config_path = phen_path / CONFIG_FILE
@@ -1041,32 +1053,32 @@ def publish(
 
     # push to origin if a remote repo
     if remote_url is not None and "origin" not in repo.remotes:
-        git_url = construct_git_url(remote_url)
+        git_url = _construct_git_url(remote_url)
         repo.create_remote("origin", git_url)
 
     try:
         if "origin" in repo.remotes:
-            logger.debug(f"Remote 'origin' is set {repo.remotes.origin.url}")
+            _logger.debug(f"Remote 'origin' is set {repo.remotes.origin.url}")
             origin = repo.remotes.origin
-            logger.info(f"Pushing main branch to remote repo")
+            _logger.info(f"Pushing main branch to remote repo")
             repo.git.push("--set-upstream", "origin", "main")
-            logger.info(f"Pushing version tags to remote git repo")
+            _logger.info(f"Pushing version tags to remote git repo")
             origin.push(tags=True)
-            logger.debug("Changes pushed to 'origin'")
+            _logger.debug("Changes pushed to 'origin'")
         else:
-            logger.debug("Remote 'origin' is not set")
+            _logger.debug("Remote 'origin' is not set")
     except Exception as e:
         tag_ref = repo.tags[new_version_str]
         repo.delete_tag(tag_ref)
         repo.git.reset("--soft", "HEAD~1")
         raise e
 
-    logger.info(f"Phenotype published successfully")
+    _logger.info(f"Phenotype published successfully")
 
 
 def export(phen_dir: str, version: str):
     """Exports a phen repo at a specific tagged version into a target directory"""
-    logger.info(f"Exporting phenotype {phen_dir} at version {version}")
+    _logger.info(f"Exporting phenotype {phen_dir} at version {version}")
 
     # validate configuration
     validate(phen_dir)
@@ -1079,13 +1091,13 @@ def export(phen_dir: str, version: str):
 
     map_path = phen_path / MAP_DIR
     if not map_path.exists():
-        logger.warning(f"Map path does not exist '{map_path}'")
+        _logger.warning(f"Map path does not exist '{map_path}'")
 
     export_path = phen_path / OMOP_PATH
     # check export directory exists and if not create it
     if not export_path.exists():
         export_path.mkdir(parents=True)
-        logger.debug(f"OMOP export directory '{export_path}' created.")
+        _logger.debug(f"OMOP export directory '{export_path}' created.")
 
     # omop export db
     export_db_path = omop.export(
@@ -1097,7 +1109,7 @@ def export(phen_dir: str, version: str):
 
     # write to tables
     # export as csv
-    logger.info(f"Phenotype exported successfully")
+    _logger.info(f"Phenotype exported successfully")
 
 
 def copy(phen_dir: str, target_dir: str, version: str):
@@ -1114,12 +1126,12 @@ def copy(phen_dir: str, target_dir: str, version: str):
 
     # Set copy directory
     copy_path = target_path / version
-    logger.info(f"Copying repo {phen_path} to {copy_path}")
+    _logger.info(f"Copying repo {phen_path} to {copy_path}")
 
     if (
         copy_path.exists() and copy_path.is_dir()
     ):  # Check if it exists and is a directory
-        copy = check_delete_dir(
+        copy = _check_delete_dir(
             copy_path,
             f"The directory {str(copy_path.resolve())} already exists. Do you want to overwrite? (yes/no): ",
         )
@@ -1127,25 +1139,25 @@ def copy(phen_dir: str, target_dir: str, version: str):
         copy = True
 
     if not copy:
-        logger.info(f"Not copying the version {version}")
+        _logger.info(f"Not copying the version {version}")
         return
 
-    logger.debug(f"Cloning repo from {phen_path} into {copy_path}...")
+    _logger.debug(f"Cloning repo from {phen_path} into {copy_path}...")
     repo = git.Repo.clone_from(phen_path, copy_path)
 
     # Check out the latest commit or specified version
     if version:
         # Checkout a specific version (e.g., branch, tag, or commit hash)
-        logger.info(f"Checking out version {version}...")
+        _logger.info(f"Checking out version {version}...")
         repo.git.checkout(version)
     else:
         # Checkout the latest commit (HEAD)
-        logger.info(f"Checking out the latest commit...")
+        _logger.info(f"Checking out the latest commit...")
         repo.git.checkout("HEAD")
 
-    logger.debug(f"Copied {phen_path} {repo.head.commit.hexsha[:7]} in {copy_path}")
+    _logger.debug(f"Copied {phen_path} {repo.head.commit.hexsha[:7]} in {copy_path}")
 
-    logger.info(f"Phenotype copied successfully")
+    _logger.info(f"Phenotype copied successfully")
 
 
 # Convert concept_sets list into dictionaries
@@ -1159,7 +1171,7 @@ def extract_concepts(config_data: dict) -> Tuple[dict, Set[str]]:
     return concepts_dict, name_set
 
 
-def extract_clean_deepdiff_keys(diff: dict, key_type: str) -> Set[Any]:
+def _extract_clean_deepdiff_keys(diff: dict, key_type: str) -> Set[Any]:
     """
     Extracts clean keys from a DeepDiff dictionary.
 
@@ -1281,8 +1293,8 @@ def diff_map_files(old_map_path: Path, new_map_path: Path) -> str:
         old_output = old_map_path / file
         new_output = new_map_path / file
 
-        logger.debug(f"Old ouptput: {str(old_output.resolve())}")
-        logger.debug(f"New ouptput: {str(new_output.resolve())}")
+        _logger.debug(f"Old ouptput: {str(old_output.resolve())}")
+        _logger.debug(f"New ouptput: {str(new_output.resolve())}")
 
         df1 = pd.read_csv(old_output)
         df1 = df1[["CONCEPT", "CONCEPT_SET"]].groupby("CONCEPT_SET").count()
@@ -1322,9 +1334,9 @@ def diff_phen(
     """Compare the differences between two versions of a phenotype"""
 
     # validate phenotypes
-    logger.debug(f"Validating for diff old path: {str(old_phen_path.resolve())}")
+    _logger.debug(f"Validating for diff old path: {str(old_phen_path.resolve())}")
     validate(str(old_phen_path.resolve()))
-    logger.debug(f"Validating for diff new path: {str(new_phen_path.resolve())}")
+    _logger.debug(f"Validating for diff new path: {str(new_phen_path.resolve())}")
     validate(str(new_phen_path.resolve()))
 
     # get old and new config
@@ -1357,12 +1369,12 @@ def diff_phen(
     report += diff_map_files(old_map_path, new_map_path)
 
     # initialise report file
-    logger.debug(f"Writing to report file {str(report_path.resolve())}")
+    _logger.debug(f"Writing to report file {str(report_path.resolve())}")
     report_file = open(report_path, "w")
     report_file.write(report)
     report_file.close()
 
-    logger.info(f"Phenotypes diff'd successfully")
+    _logger.info(f"Phenotypes diff'd successfully")
 
 
 def diff(phen_dir: str, version: str, old_phen_dir: str, old_version: str):
@@ -1385,7 +1397,7 @@ def diff(phen_dir: str, version: str, old_phen_dir: str, old_version: str):
     try:
         # Create the directory
         temp_dir.mkdir(parents=True, exist_ok=True)
-        logger.debug(f"Temporary directory created: {temp_dir}")
+        _logger.debug(f"Temporary directory created: {temp_dir}")
 
         # Create temporary directories
         changed_path = temp_dir / "changed"
@@ -1395,12 +1407,12 @@ def diff(phen_dir: str, version: str, old_phen_dir: str, old_version: str):
 
         # checkout changed
         if version == "latest":
-            logger.debug(
+            _logger.debug(
                 f"Copying changed repo from {phen_dir} into {changed_path} at version {version}..."
             )
             shutil.copytree(changed_phen_path, changed_path, dirs_exist_ok=True)
         else:
-            logger.debug(
+            _logger.debug(
                 f"Cloning changed repo from {phen_dir} into {changed_path} at version {version}..."
             )
             changed_repo = git.Repo.clone_from(changed_phen_path, changed_path)
@@ -1408,12 +1420,12 @@ def diff(phen_dir: str, version: str, old_phen_dir: str, old_version: str):
 
         # checkout old
         if old_version == "latest":
-            logger.debug(
+            _logger.debug(
                 f"Copying old repo from {old_phen_dir} into {old_path} at version {old_version}..."
             )
             shutil.copytree(old_phen_path, old_path, dirs_exist_ok=True)
         else:
-            logger.debug(
+            _logger.debug(
                 f"Cloning old repo from {old_phen_dir} into {old_path} at version {old_version}..."
             )
             old_repo = git.Repo.clone_from(old_phen_dir, old_path)
diff --git a/acmc/trud.py b/acmc/trud.py
index 6986b75c6527333ee3980990f44bb4b2bff27ca0..926efffad7e3e018cc8039a4329e3a05705e704d 100644
--- a/acmc/trud.py
+++ b/acmc/trud.py
@@ -1,3 +1,10 @@
+"""
+trud.py module
+
+This module provides functionality to manage installation of the NHS TRUD vocabularies.
+
+"""
+
 import os
 import sys
 import requests
@@ -9,19 +16,28 @@ import pandas as pd
 import simpledbf  # type: ignore
 import yaml
 from pathlib import Path
-
-# setup logging
 from acmc import util, logging_config as lc
 
-logger = lc.setup_logger()
+# setup logging
+_logger = lc.setup_logger()
 
-# Constants
 FQDN = "isd.digital.nhs.uk"
+"""Fully Qualified Domain Name of NHS digital TRUD service API"""
+
 VOCAB_PATH = Path("./vocab/trud")
+"""Default path to the TRUD vocabulary directory relative to the the acmc execution directory"""
+
 VERSION_FILE = "trud_version.yml"
+"""TRUD version file"""
+
 VERSION_PATH = VOCAB_PATH / VERSION_FILE
+"""Default path to the TRUD version file"""
+
 DOWNLOADS_PATH = VOCAB_PATH / "downloads"
+"""Default path to the TRUD vocabulary downloads directory"""
+
 PROCESSED_PATH = VOCAB_PATH / "processed"
+""" Default path to the processed TRUD mappings directory"""
 
 
 def get_releases(item_id: str, API_KEY: str, latest=False) -> list:
@@ -32,7 +48,7 @@ def get_releases(item_id: str, API_KEY: str, latest=False) -> list:
 
     response = requests.get(url)
     if response.status_code != 200:
-        logger.error(
+        _logger.error(
             f"Failed to fetch releases for item {item_id}. Status code: {response.status_code}, error {response.json()['message']}. If no releases found for API key, please ensure you are subscribed to the data release and that it is not pending approval"
         )
         response.raise_for_status()
@@ -40,7 +56,7 @@ def get_releases(item_id: str, API_KEY: str, latest=False) -> list:
     data = response.json()
     if data.get("message") != "OK":
         msg = f"Unknown error occurred {data.get('message')}"
-        logger.error(msg)
+        _logger.error(msg)
         raise Exception(msg)
 
     return data.get("releases", [])
@@ -73,7 +89,7 @@ def download_release_file(
             f"Missing {file_type} file information for release {release_ordinal} of item {item_id}."
         )
 
-    logger.info(
+    _logger.info(
         f"Downloading item {item_id} {file_type} file: {file_name} from {file_url} to {file_destination}"
     )
     response = requests.get(file_url, stream=True)
@@ -82,7 +98,7 @@ def download_release_file(
         with open(file_destination, "wb") as f:
             f.write(response.content)
     else:
-        logger.error(
+        _logger.error(
             f"Failed to download {file_type} file for item {item_id}. Status code: {response.status_code}"
         )
         response.raise_for_status()
@@ -93,12 +109,12 @@ def download_release_file(
 def validate_download_hash(file_destination: str, item_hash: str):
     with open(file_destination, "rb") as f:
         hash = hashlib.sha256(f.read()).hexdigest()
-    logger.debug(hash)
+    _logger.debug(hash)
     if hash.upper() == item_hash.upper():
-        logger.debug(f"Verified hash of {file_destination} {hash}")
+        _logger.debug(f"Verified hash of {file_destination} {hash}")
     else:
         msg = f"Could not validate origin of {file_destination}. The SHA-256 hash should be: {item_hash}, but got {hash} instead"
-        logger.error(msg)
+        _logger.error(msg)
         raise ValueError(msg)
 
 
@@ -128,7 +144,7 @@ def extract_icd10():
     )
     output_path = PROCESSED_PATH / "icd10.parquet"
     df.to_parquet(output_path, index=False)
-    logger.info(f"Extracted: {output_path}")
+    _logger.info(f"Extracted: {output_path}")
 
 
 def extract_opsc4():
@@ -143,7 +159,7 @@ def extract_opsc4():
 
     output_path = PROCESSED_PATH / "opcs4.parquet"
     df.to_parquet(output_path, index=False)
-    logger.info(f"Extracted: {output_path}")
+    _logger.info(f"Extracted: {output_path}")
 
 
 def extract_nhs_data_migrations():
@@ -165,7 +181,7 @@ def extract_nhs_data_migrations():
 
     output_path = PROCESSED_PATH / "snomed.parquet"
     df.to_parquet(output_path, index=False)
-    logger.info(f"Extracted: {output_path}")
+    _logger.info(f"Extracted: {output_path}")
 
     # r2 -> r3
     file_path = (
@@ -181,7 +197,7 @@ def extract_nhs_data_migrations():
 
     output_path = PROCESSED_PATH / "read2_to_read3.parquet"
     df.to_parquet(output_path, index=False)
-    logger.info(f"Extracted: {output_path}")
+    _logger.info(f"Extracted: {output_path}")
 
     # r3->r2
     file_path = (
@@ -199,7 +215,7 @@ def extract_nhs_data_migrations():
 
     output_path = PROCESSED_PATH / "read3_to_read2.parquet"
     df.to_parquet(output_path, index=False)
-    logger.info(f"Extracted: {output_path}")
+    _logger.info(f"Extracted: {output_path}")
 
     # r2 -> snomed
     file_path = (
@@ -215,7 +231,7 @@ def extract_nhs_data_migrations():
 
     output_path = PROCESSED_PATH / "read2_to_snomed.parquet"
     df.to_parquet(output_path, index=False)
-    logger.info(f"Extracted: {output_path}")
+    _logger.info(f"Extracted: {output_path}")
 
     # r3->snomed
     file_path = (
@@ -233,7 +249,7 @@ def extract_nhs_data_migrations():
 
     output_path = PROCESSED_PATH / "read3_to_snomed.parquet"
     df.to_parquet(output_path, index=False)
-    logger.info(f"Extracted: {output_path}")
+    _logger.info(f"Extracted: {output_path}")
 
 
 def extract_nhs_read_browser():
@@ -245,7 +261,7 @@ def extract_nhs_read_browser():
     df = df.rename(columns={0: "read2"})
     output_path = PROCESSED_PATH / "read2.parquet"
     df.to_parquet(output_path, index=False)
-    logger.info(f"Extracted: {output_path}")
+    _logger.info(f"Extracted: {output_path}")
 
     # r2 -> atc
     input_path = DOWNLOADS_PATH / "Standard" / "V2" / "ATC.DBF"
@@ -254,7 +270,7 @@ def extract_nhs_read_browser():
     df = df.rename(columns={"READCODE": "read2", "ATC": "atc"})
     output_path = PROCESSED_PATH / "read2_to_atc.parquet"
     df.to_parquet(output_path, index=False)
-    logger.info(f"Extracted: {output_path}")
+    _logger.info(f"Extracted: {output_path}")
 
     # r2 -> icd10
     input_path = DOWNLOADS_PATH / "Standard" / "V2" / "ICD10.DBF"
@@ -265,7 +281,7 @@ def extract_nhs_read_browser():
     df = df[~df["read2"].str.match("^.*-.*$")]  # remove codes with '-'
     output_path = PROCESSED_PATH / "read2_to_icd10.parquet"
     df.to_parquet(output_path, index=False)
-    logger.info(f"Extracted: {output_path}")
+    _logger.info(f"Extracted: {output_path}")
 
     # r2 -> opcs4
     input_path = DOWNLOADS_PATH / "Standard" / "V2" / "OPCS4V3.DBF"
@@ -276,7 +292,7 @@ def extract_nhs_read_browser():
     df = df[~df["read2"].str.match("^.*-.*$")]  # remove codes with '-'
     output_path = PROCESSED_PATH / "read2_to_opcs4.parquet"
     df.to_parquet(output_path, index=False)
-    logger.info(f"Extracted: {output_path}")
+    _logger.info(f"Extracted: {output_path}")
 
     # r3 only
     input_path = DOWNLOADS_PATH / "Standard" / "V3" / "ANCESTOR.DBF"
@@ -286,7 +302,7 @@ def extract_nhs_read_browser():
     df = df.rename(columns={0: "read3"})
     output_path = PROCESSED_PATH / "read3.parquet"
     df.to_parquet(output_path, index=False)
-    logger.info(f"Extracted: {output_path}")
+    _logger.info(f"Extracted: {output_path}")
 
     # r3 -> icd10
     input_path = DOWNLOADS_PATH / "Standard" / "V3" / "ICD10.DBF"
@@ -297,7 +313,7 @@ def extract_nhs_read_browser():
     df = df[~df["read3"].str.match("^.*-.*$")]  # remove codes with '-'
     output_path = PROCESSED_PATH / "read3_to_icd10.parquet"
     df.to_parquet(output_path, index=False)
-    logger.info(f"Extracted: {output_path}")
+    _logger.info(f"Extracted: {output_path}")
 
     # r3 -> icd9
     # dbf = simpledbf.Dbf5('build/maps/downloads/Standard/V3/ICD9V3.DBF')
@@ -311,7 +327,7 @@ def extract_nhs_read_browser():
     df = df[~df["read3"].str.match("^.*-.*$")]  # remove codes with '-'
     output_path = PROCESSED_PATH / "read3_to_opcs4.parquet"
     df.to_parquet(output_path, index=False)
-    logger.info(f"Extracted: {output_path}")
+    _logger.info(f"Extracted: {output_path}")
 
 
 def create_map_directories():
@@ -332,7 +348,7 @@ def create_map_directories():
             shutil.rmtree(VOCAB_PATH)
             create_map_dirs = True
         elif user_input == "n":
-            logger.info("Exiting TRUD installation")
+            _logger.info("Exiting TRUD installation")
             sys.exit(0)
     else:
         create_map_dirs = True
@@ -345,7 +361,7 @@ def create_map_directories():
 
 
 def install():
-    logger.info(f"Installing TRUD")
+    _logger.info(f"Installing TRUD")
 
     # get TRUD api key from environment variable
     api_key = os.getenv("ACMC_TRUD_API_KEY")
@@ -401,7 +417,7 @@ def install():
     # Validate and process each item ID
     for item in items:
         item_id = item["id"]
-        logger.info(f"--- {item['name']} ---")
+        _logger.info(f"--- {item['name']} ---")
 
         releases = get_releases(item_id, API_KEY=api_key, latest=items_latest)
         if not releases:
@@ -433,6 +449,6 @@ def install():
             if "extract" in item:
                 item["extract"]()
 
-        logger.info(f"Downloaded {release_ordinal} release(s) for item {item_id}.")
+        _logger.info(f"Downloaded {release_ordinal} release(s) for item {item_id}.")
 
-    logger.info(f"TRUD installation completed")
+    _logger.info(f"TRUD installation completed")
diff --git a/acmc/util.py b/acmc/util.py
index 01bb458ab34b87aa3456bc1dc4e7d8eb106596c9..958a4a8845ad4cac85ed4dc087ba9e74f8ca4877 100644
--- a/acmc/util.py
+++ b/acmc/util.py
@@ -1,7 +1,15 @@
 import yaml
 
+"""
+util.py module
+
+This module provides general utility functions for the acmc modules
+
+"""
+
 
-# Custom Dumper to retain quotes on strings in yaml library
 class QuotedDumper(yaml.Dumper):
+    """Custom Dumper to retain quotes on strings in yaml library"""
+
     def increase_indent(self, flow=False, indentless=False):
         return super(QuotedDumper, self).increase_indent(flow, indentless)
diff --git a/docs/api/acmc/logging_config.html b/docs/api/acmc/logging_config.html
index 9c9e3b90560fe8269d23aa20c6ad7b097effc9f9..c2ef24cc4e36f5d56fa3ff265a445b72f715843e 100644
--- a/docs/api/acmc/logging_config.html
+++ b/docs/api/acmc/logging_config.html
@@ -57,13 +57,7 @@
 
                         <div class="docstring"><p>logging_config.py</p>
 
-<p>This module defines functions to setup logging for acmc across all module. </p>
-
-<p>Constants</p>
-
-<ul>
-<li>DEFAULT_LOG_FILE: The default acmc application log filename.</li>
-</ul>
+<p>This module defines functions to setup logging for acmc across all module.</p>
 </div>
 
                         <input id="mod-logging_config-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
@@ -75,56 +69,61 @@
 </span><span id="L-3"><a href="#L-3"><span class="linenos"> 3</span></a>
 </span><span id="L-4"><a href="#L-4"><span class="linenos"> 4</span></a><span class="sd">This module defines functions to setup logging for acmc across all module. </span>
 </span><span id="L-5"><a href="#L-5"><span class="linenos"> 5</span></a>
-</span><span id="L-6"><a href="#L-6"><span class="linenos"> 6</span></a><span class="sd">Constants</span>
-</span><span id="L-7"><a href="#L-7"><span class="linenos"> 7</span></a><span class="sd">- DEFAULT_LOG_FILE: The default acmc application log filename.</span>
-</span><span id="L-8"><a href="#L-8"><span class="linenos"> 8</span></a>
-</span><span id="L-9"><a href="#L-9"><span class="linenos"> 9</span></a><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-6"><a href="#L-6"><span class="linenos"> 6</span></a><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-7"><a href="#L-7"><span class="linenos"> 7</span></a>
+</span><span id="L-8"><a href="#L-8"><span class="linenos"> 8</span></a><span class="kn">import</span><span class="w"> </span><span class="nn">pandas</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">pd</span>
+</span><span id="L-9"><a href="#L-9"><span class="linenos"> 9</span></a><span class="kn">import</span><span class="w"> </span><span class="nn">logging</span>
 </span><span id="L-10"><a href="#L-10"><span class="linenos">10</span></a>
-</span><span id="L-11"><a href="#L-11"><span class="linenos">11</span></a><span class="kn">import</span><span class="w"> </span><span class="nn">pandas</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">pd</span>
-</span><span id="L-12"><a href="#L-12"><span class="linenos">12</span></a><span class="kn">import</span><span class="w"> </span><span class="nn">logging</span>
+</span><span id="L-11"><a href="#L-11"><span class="linenos">11</span></a><span class="n">DEFAULT_LOG_FILE</span> <span class="o">=</span> <span class="s2">&quot;acmc.log&quot;</span>
+</span><span id="L-12"><a href="#L-12"><span class="linenos">12</span></a><span class="sd">&quot;&quot;&quot;The default acmc application log filename.&quot;&quot;&quot;</span>
 </span><span id="L-13"><a href="#L-13"><span class="linenos">13</span></a>
-</span><span id="L-14"><a href="#L-14"><span class="linenos">14</span></a><span class="n">DEFAULT_LOG_FILE</span> <span class="o">=</span> <span class="s2">&quot;acmc.log&quot;</span> <span class="c1"># default log filename</span>
-</span><span id="L-15"><a href="#L-15"><span class="linenos">15</span></a>
-</span><span id="L-16"><a href="#L-16"><span class="linenos">16</span></a><span class="k">def</span><span class="w"> </span><span class="nf">setup_logger</span><span class="p">(</span><span class="n">log_level</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">INFO</span><span class="p">):</span>
-</span><span id="L-17"><a href="#L-17"><span class="linenos">17</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Sets up acmc logger as a singleton outputing to file and sysout syserr.&quot;&quot;&quot;</span>
-</span><span id="L-18"><a href="#L-18"><span class="linenos">18</span></a>    
-</span><span id="L-19"><a href="#L-19"><span class="linenos">19</span></a>    <span class="c1"># Create a logger</span>
-</span><span id="L-20"><a href="#L-20"><span class="linenos">20</span></a>    <span class="n">logger</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="s2">&quot;acmc_logger&quot;</span><span class="p">)</span>
-</span><span id="L-21"><a href="#L-21"><span class="linenos">21</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">setLevel</span><span class="p">(</span><span class="n">logging</span><span class="o">.</span><span class="n">INFO</span><span class="p">)</span>
-</span><span id="L-22"><a href="#L-22"><span class="linenos">22</span></a>
-</span><span id="L-23"><a href="#L-23"><span class="linenos">23</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">logger</span><span class="o">.</span><span class="n">hasHandlers</span><span class="p">():</span>
-</span><span id="L-24"><a href="#L-24"><span class="linenos">24</span></a>        <span class="c1"># Create a file handler that logs to a file</span>
-</span><span id="L-25"><a href="#L-25"><span class="linenos">25</span></a>        <span class="n">file_handler</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">FileHandler</span><span class="p">(</span><span class="n">DEFAULT_LOG_FILE</span><span class="p">)</span>
-</span><span id="L-26"><a href="#L-26"><span class="linenos">26</span></a>        <span class="n">file_handler</span><span class="o">.</span><span class="n">setLevel</span><span class="p">(</span><span class="n">logging</span><span class="o">.</span><span class="n">INFO</span><span class="p">)</span>
-</span><span id="L-27"><a href="#L-27"><span class="linenos">27</span></a>
-</span><span id="L-28"><a href="#L-28"><span class="linenos">28</span></a>        <span class="c1"># Create a stream handler that prints to the console</span>
-</span><span id="L-29"><a href="#L-29"><span class="linenos">29</span></a>        <span class="n">stream_handler</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">StreamHandler</span><span class="p">()</span>
-</span><span id="L-30"><a href="#L-30"><span class="linenos">30</span></a>        <span class="n">stream_handler</span><span class="o">.</span><span class="n">setLevel</span><span class="p">(</span><span class="n">logging</span><span class="o">.</span><span class="n">INFO</span><span class="p">)</span>
-</span><span id="L-31"><a href="#L-31"><span class="linenos">31</span></a>
-</span><span id="L-32"><a href="#L-32"><span class="linenos">32</span></a>        <span class="c1"># Create a formatter for how the log messages should look</span>
-</span><span id="L-33"><a href="#L-33"><span class="linenos">33</span></a>        <span class="c1"># Add the formatter to both handlers</span>
-</span><span id="L-34"><a href="#L-34"><span class="linenos">34</span></a>        <span class="n">file_formatter</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">Formatter</span><span class="p">(</span>
-</span><span id="L-35"><a href="#L-35"><span class="linenos">35</span></a>            <span class="s2">&quot;</span><span class="si">%(asctime)s</span><span class="s2"> - - </span><span class="si">%(levelname)s</span><span class="s2"> - </span><span class="si">%(message)s</span><span class="s2">&quot;</span>
-</span><span id="L-36"><a href="#L-36"><span class="linenos">36</span></a>        <span class="p">)</span>
-</span><span id="L-37"><a href="#L-37"><span class="linenos">37</span></a>        <span class="n">file_handler</span><span class="o">.</span><span class="n">setFormatter</span><span class="p">(</span><span class="n">file_formatter</span><span class="p">)</span>
-</span><span id="L-38"><a href="#L-38"><span class="linenos">38</span></a>        <span class="n">stream_formatter</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">Formatter</span><span class="p">(</span><span class="s2">&quot;[</span><span class="si">%(levelname)s</span><span class="s2">] - </span><span class="si">%(message)s</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-39"><a href="#L-39"><span class="linenos">39</span></a>        <span class="n">stream_handler</span><span class="o">.</span><span class="n">setFormatter</span><span class="p">(</span><span class="n">stream_formatter</span><span class="p">)</span>
-</span><span id="L-40"><a href="#L-40"><span class="linenos">40</span></a>
-</span><span id="L-41"><a href="#L-41"><span class="linenos">41</span></a>        <span class="c1"># Add the handlers to the logger</span>
-</span><span id="L-42"><a href="#L-42"><span class="linenos">42</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">addHandler</span><span class="p">(</span><span class="n">file_handler</span><span class="p">)</span>
-</span><span id="L-43"><a href="#L-43"><span class="linenos">43</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">addHandler</span><span class="p">(</span><span class="n">stream_handler</span><span class="p">)</span>
-</span><span id="L-44"><a href="#L-44"><span class="linenos">44</span></a>
-</span><span id="L-45"><a href="#L-45"><span class="linenos">45</span></a>    <span class="k">return</span> <span class="n">logger</span>
+</span><span id="L-14"><a href="#L-14"><span class="linenos">14</span></a>
+</span><span id="L-15"><a href="#L-15"><span class="linenos">15</span></a><span class="k">def</span><span class="w"> </span><span class="nf">setup_logger</span><span class="p">(</span><span class="n">log_level</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">INFO</span><span class="p">):</span>
+</span><span id="L-16"><a href="#L-16"><span class="linenos">16</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Sets up acmc logger as a singleton outputing to file and sysout syserr.&quot;&quot;&quot;</span>
+</span><span id="L-17"><a href="#L-17"><span class="linenos">17</span></a>
+</span><span id="L-18"><a href="#L-18"><span class="linenos">18</span></a>    <span class="c1"># Create a logger</span>
+</span><span id="L-19"><a href="#L-19"><span class="linenos">19</span></a>    <span class="n">logger</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="s2">&quot;acmc_logger&quot;</span><span class="p">)</span>
+</span><span id="L-20"><a href="#L-20"><span class="linenos">20</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">setLevel</span><span class="p">(</span><span class="n">logging</span><span class="o">.</span><span class="n">INFO</span><span class="p">)</span>
+</span><span id="L-21"><a href="#L-21"><span class="linenos">21</span></a>
+</span><span id="L-22"><a href="#L-22"><span class="linenos">22</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">logger</span><span class="o">.</span><span class="n">hasHandlers</span><span class="p">():</span>
+</span><span id="L-23"><a href="#L-23"><span class="linenos">23</span></a>        <span class="c1"># Create a file handler that logs to a file</span>
+</span><span id="L-24"><a href="#L-24"><span class="linenos">24</span></a>        <span class="n">file_handler</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">FileHandler</span><span class="p">(</span><span class="n">DEFAULT_LOG_FILE</span><span class="p">)</span>
+</span><span id="L-25"><a href="#L-25"><span class="linenos">25</span></a>        <span class="n">file_handler</span><span class="o">.</span><span class="n">setLevel</span><span class="p">(</span><span class="n">logging</span><span class="o">.</span><span class="n">INFO</span><span class="p">)</span>
+</span><span id="L-26"><a href="#L-26"><span class="linenos">26</span></a>
+</span><span id="L-27"><a href="#L-27"><span class="linenos">27</span></a>        <span class="c1"># Create a stream handler that prints to the console</span>
+</span><span id="L-28"><a href="#L-28"><span class="linenos">28</span></a>        <span class="n">stream_handler</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">StreamHandler</span><span class="p">()</span>
+</span><span id="L-29"><a href="#L-29"><span class="linenos">29</span></a>        <span class="n">stream_handler</span><span class="o">.</span><span class="n">setLevel</span><span class="p">(</span><span class="n">logging</span><span class="o">.</span><span class="n">INFO</span><span class="p">)</span>
+</span><span id="L-30"><a href="#L-30"><span class="linenos">30</span></a>
+</span><span id="L-31"><a href="#L-31"><span class="linenos">31</span></a>        <span class="c1"># Create a formatter for how the log messages should look</span>
+</span><span id="L-32"><a href="#L-32"><span class="linenos">32</span></a>        <span class="c1"># Add the formatter to both handlers</span>
+</span><span id="L-33"><a href="#L-33"><span class="linenos">33</span></a>        <span class="n">file_formatter</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">Formatter</span><span class="p">(</span>
+</span><span id="L-34"><a href="#L-34"><span class="linenos">34</span></a>            <span class="s2">&quot;</span><span class="si">%(asctime)s</span><span class="s2"> - - </span><span class="si">%(levelname)s</span><span class="s2"> - </span><span class="si">%(message)s</span><span class="s2">&quot;</span>
+</span><span id="L-35"><a href="#L-35"><span class="linenos">35</span></a>        <span class="p">)</span>
+</span><span id="L-36"><a href="#L-36"><span class="linenos">36</span></a>        <span class="n">file_handler</span><span class="o">.</span><span class="n">setFormatter</span><span class="p">(</span><span class="n">file_formatter</span><span class="p">)</span>
+</span><span id="L-37"><a href="#L-37"><span class="linenos">37</span></a>        <span class="n">stream_formatter</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">Formatter</span><span class="p">(</span><span class="s2">&quot;[</span><span class="si">%(levelname)s</span><span class="s2">] - </span><span class="si">%(message)s</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-38"><a href="#L-38"><span class="linenos">38</span></a>        <span class="n">stream_handler</span><span class="o">.</span><span class="n">setFormatter</span><span class="p">(</span><span class="n">stream_formatter</span><span class="p">)</span>
+</span><span id="L-39"><a href="#L-39"><span class="linenos">39</span></a>
+</span><span id="L-40"><a href="#L-40"><span class="linenos">40</span></a>        <span class="c1"># Add the handlers to the logger</span>
+</span><span id="L-41"><a href="#L-41"><span class="linenos">41</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">addHandler</span><span class="p">(</span><span class="n">file_handler</span><span class="p">)</span>
+</span><span id="L-42"><a href="#L-42"><span class="linenos">42</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">addHandler</span><span class="p">(</span><span class="n">stream_handler</span><span class="p">)</span>
+</span><span id="L-43"><a href="#L-43"><span class="linenos">43</span></a>
+</span><span id="L-44"><a href="#L-44"><span class="linenos">44</span></a>    <span class="k">return</span> <span class="n">logger</span>
+</span><span id="L-45"><a href="#L-45"><span class="linenos">45</span></a>
 </span><span id="L-46"><a href="#L-46"><span class="linenos">46</span></a>
-</span><span id="L-47"><a href="#L-47"><span class="linenos">47</span></a>
-</span><span id="L-48"><a href="#L-48"><span class="linenos">48</span></a><span class="k">def</span><span class="w"> </span><span class="nf">set_log_level</span><span class="p">(</span><span class="n">log_level</span><span class="p">:</span> <span class="nb">int</span><span class="p">):</span>
-</span><span id="L-49"><a href="#L-49"><span class="linenos">49</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Sets the log level for the acmc logger.&quot;&quot;&quot;</span>
-</span><span id="L-50"><a href="#L-50"><span class="linenos">50</span></a>    <span class="n">logger</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="s2">&quot;acmc_logger&quot;</span><span class="p">)</span>
-</span><span id="L-51"><a href="#L-51"><span class="linenos">51</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">setLevel</span><span class="p">(</span><span class="n">log_level</span><span class="p">)</span>
+</span><span id="L-47"><a href="#L-47"><span class="linenos">47</span></a><span class="k">def</span><span class="w"> </span><span class="nf">set_log_level</span><span class="p">(</span><span class="n">log_level</span><span class="p">:</span> <span class="nb">int</span><span class="p">):</span>
+</span><span id="L-48"><a href="#L-48"><span class="linenos">48</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Sets the log level for the acmc logger.</span>
+</span><span id="L-49"><a href="#L-49"><span class="linenos">49</span></a>
+</span><span id="L-50"><a href="#L-50"><span class="linenos">50</span></a><span class="sd">    Args:</span>
+</span><span id="L-51"><a href="#L-51"><span class="linenos">51</span></a><span class="sd">        log_level (int): log level from the python logging libraru</span>
 </span><span id="L-52"><a href="#L-52"><span class="linenos">52</span></a>
-</span><span id="L-53"><a href="#L-53"><span class="linenos">53</span></a>    <span class="c1"># Also update handlers to match the new level</span>
-</span><span id="L-54"><a href="#L-54"><span class="linenos">54</span></a>    <span class="k">for</span> <span class="n">handler</span> <span class="ow">in</span> <span class="n">logger</span><span class="o">.</span><span class="n">handlers</span><span class="p">:</span>
-</span><span id="L-55"><a href="#L-55"><span class="linenos">55</span></a>        <span class="n">handler</span><span class="o">.</span><span class="n">setLevel</span><span class="p">(</span><span class="n">log_level</span><span class="p">)</span>
+</span><span id="L-53"><a href="#L-53"><span class="linenos">53</span></a><span class="sd">    &quot;&quot;&quot;</span>
+</span><span id="L-54"><a href="#L-54"><span class="linenos">54</span></a>
+</span><span id="L-55"><a href="#L-55"><span class="linenos">55</span></a>    <span class="n">logger</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="s2">&quot;acmc_logger&quot;</span><span class="p">)</span>
+</span><span id="L-56"><a href="#L-56"><span class="linenos">56</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">setLevel</span><span class="p">(</span><span class="n">log_level</span><span class="p">)</span>
+</span><span id="L-57"><a href="#L-57"><span class="linenos">57</span></a>
+</span><span id="L-58"><a href="#L-58"><span class="linenos">58</span></a>    <span class="c1"># Also update handlers to match the new level</span>
+</span><span id="L-59"><a href="#L-59"><span class="linenos">59</span></a>    <span class="k">for</span> <span class="n">handler</span> <span class="ow">in</span> <span class="n">logger</span><span class="o">.</span><span class="n">handlers</span><span class="p">:</span>
+</span><span id="L-60"><a href="#L-60"><span class="linenos">60</span></a>        <span class="n">handler</span><span class="o">.</span><span class="n">setLevel</span><span class="p">(</span><span class="n">log_level</span><span class="p">)</span>
 </span></pre></div>
 
 
@@ -138,7 +137,9 @@
     </div>
     <a class="headerlink" href="#DEFAULT_LOG_FILE"></a>
     
-    
+            <div class="docstring"><p>The default acmc application log filename.</p>
+</div>
+
 
                 </section>
                 <section id="setup_logger">
@@ -152,36 +153,36 @@
 
     </div>
     <a class="headerlink" href="#setup_logger"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="setup_logger-17"><a href="#setup_logger-17"><span class="linenos">17</span></a><span class="k">def</span><span class="w"> </span><span class="nf">setup_logger</span><span class="p">(</span><span class="n">log_level</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">INFO</span><span class="p">):</span>
-</span><span id="setup_logger-18"><a href="#setup_logger-18"><span class="linenos">18</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Sets up acmc logger as a singleton outputing to file and sysout syserr.&quot;&quot;&quot;</span>
-</span><span id="setup_logger-19"><a href="#setup_logger-19"><span class="linenos">19</span></a>    
-</span><span id="setup_logger-20"><a href="#setup_logger-20"><span class="linenos">20</span></a>    <span class="c1"># Create a logger</span>
-</span><span id="setup_logger-21"><a href="#setup_logger-21"><span class="linenos">21</span></a>    <span class="n">logger</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="s2">&quot;acmc_logger&quot;</span><span class="p">)</span>
-</span><span id="setup_logger-22"><a href="#setup_logger-22"><span class="linenos">22</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">setLevel</span><span class="p">(</span><span class="n">logging</span><span class="o">.</span><span class="n">INFO</span><span class="p">)</span>
-</span><span id="setup_logger-23"><a href="#setup_logger-23"><span class="linenos">23</span></a>
-</span><span id="setup_logger-24"><a href="#setup_logger-24"><span class="linenos">24</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">logger</span><span class="o">.</span><span class="n">hasHandlers</span><span class="p">():</span>
-</span><span id="setup_logger-25"><a href="#setup_logger-25"><span class="linenos">25</span></a>        <span class="c1"># Create a file handler that logs to a file</span>
-</span><span id="setup_logger-26"><a href="#setup_logger-26"><span class="linenos">26</span></a>        <span class="n">file_handler</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">FileHandler</span><span class="p">(</span><span class="n">DEFAULT_LOG_FILE</span><span class="p">)</span>
-</span><span id="setup_logger-27"><a href="#setup_logger-27"><span class="linenos">27</span></a>        <span class="n">file_handler</span><span class="o">.</span><span class="n">setLevel</span><span class="p">(</span><span class="n">logging</span><span class="o">.</span><span class="n">INFO</span><span class="p">)</span>
-</span><span id="setup_logger-28"><a href="#setup_logger-28"><span class="linenos">28</span></a>
-</span><span id="setup_logger-29"><a href="#setup_logger-29"><span class="linenos">29</span></a>        <span class="c1"># Create a stream handler that prints to the console</span>
-</span><span id="setup_logger-30"><a href="#setup_logger-30"><span class="linenos">30</span></a>        <span class="n">stream_handler</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">StreamHandler</span><span class="p">()</span>
-</span><span id="setup_logger-31"><a href="#setup_logger-31"><span class="linenos">31</span></a>        <span class="n">stream_handler</span><span class="o">.</span><span class="n">setLevel</span><span class="p">(</span><span class="n">logging</span><span class="o">.</span><span class="n">INFO</span><span class="p">)</span>
-</span><span id="setup_logger-32"><a href="#setup_logger-32"><span class="linenos">32</span></a>
-</span><span id="setup_logger-33"><a href="#setup_logger-33"><span class="linenos">33</span></a>        <span class="c1"># Create a formatter for how the log messages should look</span>
-</span><span id="setup_logger-34"><a href="#setup_logger-34"><span class="linenos">34</span></a>        <span class="c1"># Add the formatter to both handlers</span>
-</span><span id="setup_logger-35"><a href="#setup_logger-35"><span class="linenos">35</span></a>        <span class="n">file_formatter</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">Formatter</span><span class="p">(</span>
-</span><span id="setup_logger-36"><a href="#setup_logger-36"><span class="linenos">36</span></a>            <span class="s2">&quot;</span><span class="si">%(asctime)s</span><span class="s2"> - - </span><span class="si">%(levelname)s</span><span class="s2"> - </span><span class="si">%(message)s</span><span class="s2">&quot;</span>
-</span><span id="setup_logger-37"><a href="#setup_logger-37"><span class="linenos">37</span></a>        <span class="p">)</span>
-</span><span id="setup_logger-38"><a href="#setup_logger-38"><span class="linenos">38</span></a>        <span class="n">file_handler</span><span class="o">.</span><span class="n">setFormatter</span><span class="p">(</span><span class="n">file_formatter</span><span class="p">)</span>
-</span><span id="setup_logger-39"><a href="#setup_logger-39"><span class="linenos">39</span></a>        <span class="n">stream_formatter</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">Formatter</span><span class="p">(</span><span class="s2">&quot;[</span><span class="si">%(levelname)s</span><span class="s2">] - </span><span class="si">%(message)s</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="setup_logger-40"><a href="#setup_logger-40"><span class="linenos">40</span></a>        <span class="n">stream_handler</span><span class="o">.</span><span class="n">setFormatter</span><span class="p">(</span><span class="n">stream_formatter</span><span class="p">)</span>
-</span><span id="setup_logger-41"><a href="#setup_logger-41"><span class="linenos">41</span></a>
-</span><span id="setup_logger-42"><a href="#setup_logger-42"><span class="linenos">42</span></a>        <span class="c1"># Add the handlers to the logger</span>
-</span><span id="setup_logger-43"><a href="#setup_logger-43"><span class="linenos">43</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">addHandler</span><span class="p">(</span><span class="n">file_handler</span><span class="p">)</span>
-</span><span id="setup_logger-44"><a href="#setup_logger-44"><span class="linenos">44</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">addHandler</span><span class="p">(</span><span class="n">stream_handler</span><span class="p">)</span>
-</span><span id="setup_logger-45"><a href="#setup_logger-45"><span class="linenos">45</span></a>
-</span><span id="setup_logger-46"><a href="#setup_logger-46"><span class="linenos">46</span></a>    <span class="k">return</span> <span class="n">logger</span>
+            <div class="pdoc-code codehilite"><pre><span></span><span id="setup_logger-16"><a href="#setup_logger-16"><span class="linenos">16</span></a><span class="k">def</span><span class="w"> </span><span class="nf">setup_logger</span><span class="p">(</span><span class="n">log_level</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">INFO</span><span class="p">):</span>
+</span><span id="setup_logger-17"><a href="#setup_logger-17"><span class="linenos">17</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Sets up acmc logger as a singleton outputing to file and sysout syserr.&quot;&quot;&quot;</span>
+</span><span id="setup_logger-18"><a href="#setup_logger-18"><span class="linenos">18</span></a>
+</span><span id="setup_logger-19"><a href="#setup_logger-19"><span class="linenos">19</span></a>    <span class="c1"># Create a logger</span>
+</span><span id="setup_logger-20"><a href="#setup_logger-20"><span class="linenos">20</span></a>    <span class="n">logger</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="s2">&quot;acmc_logger&quot;</span><span class="p">)</span>
+</span><span id="setup_logger-21"><a href="#setup_logger-21"><span class="linenos">21</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">setLevel</span><span class="p">(</span><span class="n">logging</span><span class="o">.</span><span class="n">INFO</span><span class="p">)</span>
+</span><span id="setup_logger-22"><a href="#setup_logger-22"><span class="linenos">22</span></a>
+</span><span id="setup_logger-23"><a href="#setup_logger-23"><span class="linenos">23</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">logger</span><span class="o">.</span><span class="n">hasHandlers</span><span class="p">():</span>
+</span><span id="setup_logger-24"><a href="#setup_logger-24"><span class="linenos">24</span></a>        <span class="c1"># Create a file handler that logs to a file</span>
+</span><span id="setup_logger-25"><a href="#setup_logger-25"><span class="linenos">25</span></a>        <span class="n">file_handler</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">FileHandler</span><span class="p">(</span><span class="n">DEFAULT_LOG_FILE</span><span class="p">)</span>
+</span><span id="setup_logger-26"><a href="#setup_logger-26"><span class="linenos">26</span></a>        <span class="n">file_handler</span><span class="o">.</span><span class="n">setLevel</span><span class="p">(</span><span class="n">logging</span><span class="o">.</span><span class="n">INFO</span><span class="p">)</span>
+</span><span id="setup_logger-27"><a href="#setup_logger-27"><span class="linenos">27</span></a>
+</span><span id="setup_logger-28"><a href="#setup_logger-28"><span class="linenos">28</span></a>        <span class="c1"># Create a stream handler that prints to the console</span>
+</span><span id="setup_logger-29"><a href="#setup_logger-29"><span class="linenos">29</span></a>        <span class="n">stream_handler</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">StreamHandler</span><span class="p">()</span>
+</span><span id="setup_logger-30"><a href="#setup_logger-30"><span class="linenos">30</span></a>        <span class="n">stream_handler</span><span class="o">.</span><span class="n">setLevel</span><span class="p">(</span><span class="n">logging</span><span class="o">.</span><span class="n">INFO</span><span class="p">)</span>
+</span><span id="setup_logger-31"><a href="#setup_logger-31"><span class="linenos">31</span></a>
+</span><span id="setup_logger-32"><a href="#setup_logger-32"><span class="linenos">32</span></a>        <span class="c1"># Create a formatter for how the log messages should look</span>
+</span><span id="setup_logger-33"><a href="#setup_logger-33"><span class="linenos">33</span></a>        <span class="c1"># Add the formatter to both handlers</span>
+</span><span id="setup_logger-34"><a href="#setup_logger-34"><span class="linenos">34</span></a>        <span class="n">file_formatter</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">Formatter</span><span class="p">(</span>
+</span><span id="setup_logger-35"><a href="#setup_logger-35"><span class="linenos">35</span></a>            <span class="s2">&quot;</span><span class="si">%(asctime)s</span><span class="s2"> - - </span><span class="si">%(levelname)s</span><span class="s2"> - </span><span class="si">%(message)s</span><span class="s2">&quot;</span>
+</span><span id="setup_logger-36"><a href="#setup_logger-36"><span class="linenos">36</span></a>        <span class="p">)</span>
+</span><span id="setup_logger-37"><a href="#setup_logger-37"><span class="linenos">37</span></a>        <span class="n">file_handler</span><span class="o">.</span><span class="n">setFormatter</span><span class="p">(</span><span class="n">file_formatter</span><span class="p">)</span>
+</span><span id="setup_logger-38"><a href="#setup_logger-38"><span class="linenos">38</span></a>        <span class="n">stream_formatter</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">Formatter</span><span class="p">(</span><span class="s2">&quot;[</span><span class="si">%(levelname)s</span><span class="s2">] - </span><span class="si">%(message)s</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="setup_logger-39"><a href="#setup_logger-39"><span class="linenos">39</span></a>        <span class="n">stream_handler</span><span class="o">.</span><span class="n">setFormatter</span><span class="p">(</span><span class="n">stream_formatter</span><span class="p">)</span>
+</span><span id="setup_logger-40"><a href="#setup_logger-40"><span class="linenos">40</span></a>
+</span><span id="setup_logger-41"><a href="#setup_logger-41"><span class="linenos">41</span></a>        <span class="c1"># Add the handlers to the logger</span>
+</span><span id="setup_logger-42"><a href="#setup_logger-42"><span class="linenos">42</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">addHandler</span><span class="p">(</span><span class="n">file_handler</span><span class="p">)</span>
+</span><span id="setup_logger-43"><a href="#setup_logger-43"><span class="linenos">43</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">addHandler</span><span class="p">(</span><span class="n">stream_handler</span><span class="p">)</span>
+</span><span id="setup_logger-44"><a href="#setup_logger-44"><span class="linenos">44</span></a>
+</span><span id="setup_logger-45"><a href="#setup_logger-45"><span class="linenos">45</span></a>    <span class="k">return</span> <span class="n">logger</span>
 </span></pre></div>
 
 
@@ -201,18 +202,30 @@
 
     </div>
     <a class="headerlink" href="#set_log_level"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="set_log_level-49"><a href="#set_log_level-49"><span class="linenos">49</span></a><span class="k">def</span><span class="w"> </span><span class="nf">set_log_level</span><span class="p">(</span><span class="n">log_level</span><span class="p">:</span> <span class="nb">int</span><span class="p">):</span>
-</span><span id="set_log_level-50"><a href="#set_log_level-50"><span class="linenos">50</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Sets the log level for the acmc logger.&quot;&quot;&quot;</span>
-</span><span id="set_log_level-51"><a href="#set_log_level-51"><span class="linenos">51</span></a>    <span class="n">logger</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="s2">&quot;acmc_logger&quot;</span><span class="p">)</span>
-</span><span id="set_log_level-52"><a href="#set_log_level-52"><span class="linenos">52</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">setLevel</span><span class="p">(</span><span class="n">log_level</span><span class="p">)</span>
+            <div class="pdoc-code codehilite"><pre><span></span><span id="set_log_level-48"><a href="#set_log_level-48"><span class="linenos">48</span></a><span class="k">def</span><span class="w"> </span><span class="nf">set_log_level</span><span class="p">(</span><span class="n">log_level</span><span class="p">:</span> <span class="nb">int</span><span class="p">):</span>
+</span><span id="set_log_level-49"><a href="#set_log_level-49"><span class="linenos">49</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Sets the log level for the acmc logger.</span>
+</span><span id="set_log_level-50"><a href="#set_log_level-50"><span class="linenos">50</span></a>
+</span><span id="set_log_level-51"><a href="#set_log_level-51"><span class="linenos">51</span></a><span class="sd">    Args:</span>
+</span><span id="set_log_level-52"><a href="#set_log_level-52"><span class="linenos">52</span></a><span class="sd">        log_level (int): log level from the python logging libraru</span>
 </span><span id="set_log_level-53"><a href="#set_log_level-53"><span class="linenos">53</span></a>
-</span><span id="set_log_level-54"><a href="#set_log_level-54"><span class="linenos">54</span></a>    <span class="c1"># Also update handlers to match the new level</span>
-</span><span id="set_log_level-55"><a href="#set_log_level-55"><span class="linenos">55</span></a>    <span class="k">for</span> <span class="n">handler</span> <span class="ow">in</span> <span class="n">logger</span><span class="o">.</span><span class="n">handlers</span><span class="p">:</span>
-</span><span id="set_log_level-56"><a href="#set_log_level-56"><span class="linenos">56</span></a>        <span class="n">handler</span><span class="o">.</span><span class="n">setLevel</span><span class="p">(</span><span class="n">log_level</span><span class="p">)</span>
+</span><span id="set_log_level-54"><a href="#set_log_level-54"><span class="linenos">54</span></a><span class="sd">    &quot;&quot;&quot;</span>
+</span><span id="set_log_level-55"><a href="#set_log_level-55"><span class="linenos">55</span></a>
+</span><span id="set_log_level-56"><a href="#set_log_level-56"><span class="linenos">56</span></a>    <span class="n">logger</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="s2">&quot;acmc_logger&quot;</span><span class="p">)</span>
+</span><span id="set_log_level-57"><a href="#set_log_level-57"><span class="linenos">57</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">setLevel</span><span class="p">(</span><span class="n">log_level</span><span class="p">)</span>
+</span><span id="set_log_level-58"><a href="#set_log_level-58"><span class="linenos">58</span></a>
+</span><span id="set_log_level-59"><a href="#set_log_level-59"><span class="linenos">59</span></a>    <span class="c1"># Also update handlers to match the new level</span>
+</span><span id="set_log_level-60"><a href="#set_log_level-60"><span class="linenos">60</span></a>    <span class="k">for</span> <span class="n">handler</span> <span class="ow">in</span> <span class="n">logger</span><span class="o">.</span><span class="n">handlers</span><span class="p">:</span>
+</span><span id="set_log_level-61"><a href="#set_log_level-61"><span class="linenos">61</span></a>        <span class="n">handler</span><span class="o">.</span><span class="n">setLevel</span><span class="p">(</span><span class="n">log_level</span><span class="p">)</span>
 </span></pre></div>
 
 
             <div class="docstring"><p>Sets the log level for the acmc logger.</p>
+
+<h6 id="arguments">Arguments:</h6>
+
+<ul>
+<li><strong>log_level (int):</strong>  log level from the python logging libraru</li>
+</ul>
 </div>
 
 
diff --git a/docs/api/acmc/main.html b/docs/api/acmc/main.html
index 6027ab8434b18b08a0f4f15b9cff7eda54401fb3..665fb689a9dcd5a7c1a5bc01671de363bad1360c 100644
--- a/docs/api/acmc/main.html
+++ b/docs/api/acmc/main.html
@@ -30,48 +30,9 @@
 
             <h2>API Documentation</h2>
                 <ul class="memberlist">
-            <li>
-                    <a class="variable" href="#logger">logger</a>
-            </li>
             <li>
                     <a class="variable" href="#DEFAULT_WORKSPACE_PATH">DEFAULT_WORKSPACE_PATH</a>
             </li>
-            <li>
-                    <a class="function" href="#trud_install">trud_install</a>
-            </li>
-            <li>
-                    <a class="function" href="#omop_install">omop_install</a>
-            </li>
-            <li>
-                    <a class="function" href="#omop_clear">omop_clear</a>
-            </li>
-            <li>
-                    <a class="function" href="#omop_delete">omop_delete</a>
-            </li>
-            <li>
-                    <a class="function" href="#phen_init">phen_init</a>
-            </li>
-            <li>
-                    <a class="function" href="#phen_fork">phen_fork</a>
-            </li>
-            <li>
-                    <a class="function" href="#phen_validate">phen_validate</a>
-            </li>
-            <li>
-                    <a class="function" href="#phen_map">phen_map</a>
-            </li>
-            <li>
-                    <a class="function" href="#phen_export">phen_export</a>
-            </li>
-            <li>
-                    <a class="function" href="#phen_publish">phen_publish</a>
-            </li>
-            <li>
-                    <a class="function" href="#phen_copy">phen_copy</a>
-            </li>
-            <li>
-                    <a class="function" href="#phen_diff">phen_diff</a>
-            </li>
             <li>
                     <a class="function" href="#main">main</a>
             </li>
@@ -91,362 +52,359 @@
                     <h1 class="modulename">
 <a href="./../acmc.html">acmc</a><wbr>.main    </h1>
 
-                
+                        <div class="docstring"><p>main.py module</p>
+
+<p>This module provides the functionality for the acmc command line interface</p>
+</div>
+
                         <input id="mod-main-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
 
                         <label class="view-source-button" for="mod-main-view-source"><span>View Source</span></label>
 
-                        <div class="pdoc-code codehilite"><pre><span></span><span id="L-1"><a href="#L-1"><span class="linenos">  1</span></a><span class="kn">import</span><span class="w"> </span><span class="nn">argparse</span>
-</span><span id="L-2"><a href="#L-2"><span class="linenos">  2</span></a><span class="kn">import</span><span class="w"> </span><span class="nn">logging</span>
-</span><span id="L-3"><a href="#L-3"><span class="linenos">  3</span></a><span class="kn">from</span><span class="w"> </span><span class="nn">pathlib</span><span class="w"> </span><span class="kn">import</span> <span class="n">Path</span>
-</span><span id="L-4"><a href="#L-4"><span class="linenos">  4</span></a>
-</span><span id="L-5"><a href="#L-5"><span class="linenos">  5</span></a><span class="kn">import</span><span class="w"> </span><span class="nn">acmc</span>
-</span><span id="L-6"><a href="#L-6"><span class="linenos">  6</span></a><span class="kn">from</span><span class="w"> </span><span class="nn">acmc</span><span class="w"> </span><span class="kn">import</span> <span class="n">trud</span><span class="p">,</span> <span class="n">omop</span><span class="p">,</span> <span class="n">phen</span><span class="p">,</span> <span class="n">parse</span><span class="p">,</span> <span class="n">logging_config</span> <span class="k">as</span> <span class="n">lc</span>
-</span><span id="L-7"><a href="#L-7"><span class="linenos">  7</span></a>
-</span><span id="L-8"><a href="#L-8"><span class="linenos">  8</span></a><span class="c1"># setup logging</span>
-</span><span id="L-9"><a href="#L-9"><span class="linenos">  9</span></a><span class="n">logger</span> <span class="o">=</span> <span class="n">lc</span><span class="o">.</span><span class="n">setup_logger</span><span class="p">()</span>
+                        <div class="pdoc-code codehilite"><pre><span></span><span id="L-1"><a href="#L-1"><span class="linenos">  1</span></a><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-2"><a href="#L-2"><span class="linenos">  2</span></a><span class="sd">main.py module</span>
+</span><span id="L-3"><a href="#L-3"><span class="linenos">  3</span></a>
+</span><span id="L-4"><a href="#L-4"><span class="linenos">  4</span></a><span class="sd">This module provides the functionality for the acmc command line interface</span>
+</span><span id="L-5"><a href="#L-5"><span class="linenos">  5</span></a><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-6"><a href="#L-6"><span class="linenos">  6</span></a>
+</span><span id="L-7"><a href="#L-7"><span class="linenos">  7</span></a><span class="kn">import</span><span class="w"> </span><span class="nn">argparse</span>
+</span><span id="L-8"><a href="#L-8"><span class="linenos">  8</span></a><span class="kn">import</span><span class="w"> </span><span class="nn">logging</span>
+</span><span id="L-9"><a href="#L-9"><span class="linenos">  9</span></a><span class="kn">from</span><span class="w"> </span><span class="nn">pathlib</span><span class="w"> </span><span class="kn">import</span> <span class="n">Path</span>
 </span><span id="L-10"><a href="#L-10"><span class="linenos"> 10</span></a>
-</span><span id="L-11"><a href="#L-11"><span class="linenos"> 11</span></a><span class="n">DEFAULT_WORKSPACE_PATH</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="s2">&quot;./workspace&quot;</span><span class="p">)</span>
-</span><span id="L-12"><a href="#L-12"><span class="linenos"> 12</span></a>
+</span><span id="L-11"><a href="#L-11"><span class="linenos"> 11</span></a><span class="kn">import</span><span class="w"> </span><span class="nn">acmc</span>
+</span><span id="L-12"><a href="#L-12"><span class="linenos"> 12</span></a><span class="kn">from</span><span class="w"> </span><span class="nn">acmc</span><span class="w"> </span><span class="kn">import</span> <span class="n">trud</span><span class="p">,</span> <span class="n">omop</span><span class="p">,</span> <span class="n">phen</span><span class="p">,</span> <span class="n">parse</span><span class="p">,</span> <span class="n">logging_config</span> <span class="k">as</span> <span class="n">lc</span>
 </span><span id="L-13"><a href="#L-13"><span class="linenos"> 13</span></a>
-</span><span id="L-14"><a href="#L-14"><span class="linenos"> 14</span></a><span class="k">def</span><span class="w"> </span><span class="nf">trud_install</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">argparse</span><span class="o">.</span><span class="n">Namespace</span><span class="p">):</span>
-</span><span id="L-15"><a href="#L-15"><span class="linenos"> 15</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Handle the `trud install` command.&quot;&quot;&quot;</span>
-</span><span id="L-16"><a href="#L-16"><span class="linenos"> 16</span></a>    <span class="n">trud</span><span class="o">.</span><span class="n">install</span><span class="p">()</span>
+</span><span id="L-14"><a href="#L-14"><span class="linenos"> 14</span></a>
+</span><span id="L-15"><a href="#L-15"><span class="linenos"> 15</span></a><span class="n">DEFAULT_WORKSPACE_PATH</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="s2">&quot;./workspace&quot;</span><span class="p">)</span>
+</span><span id="L-16"><a href="#L-16"><span class="linenos"> 16</span></a><span class="sd">&quot;&quot;&quot;Default phenotype workspace path&quot;&quot;&quot;</span>
 </span><span id="L-17"><a href="#L-17"><span class="linenos"> 17</span></a>
 </span><span id="L-18"><a href="#L-18"><span class="linenos"> 18</span></a>
-</span><span id="L-19"><a href="#L-19"><span class="linenos"> 19</span></a><span class="k">def</span><span class="w"> </span><span class="nf">omop_install</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">argparse</span><span class="o">.</span><span class="n">Namespace</span><span class="p">):</span>
-</span><span id="L-20"><a href="#L-20"><span class="linenos"> 20</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Handle the `omop install` command.&quot;&quot;&quot;</span>
-</span><span id="L-21"><a href="#L-21"><span class="linenos"> 21</span></a>    <span class="n">omop</span><span class="o">.</span><span class="n">install</span><span class="p">(</span><span class="n">args</span><span class="o">.</span><span class="n">omop_zip_file</span><span class="p">,</span> <span class="n">args</span><span class="o">.</span><span class="n">version</span><span class="p">)</span>
+</span><span id="L-19"><a href="#L-19"><span class="linenos"> 19</span></a><span class="k">def</span><span class="w"> </span><span class="nf">_trud_install</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">argparse</span><span class="o">.</span><span class="n">Namespace</span><span class="p">):</span>
+</span><span id="L-20"><a href="#L-20"><span class="linenos"> 20</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Handle the `trud install` command.&quot;&quot;&quot;</span>
+</span><span id="L-21"><a href="#L-21"><span class="linenos"> 21</span></a>    <span class="n">trud</span><span class="o">.</span><span class="n">install</span><span class="p">()</span>
 </span><span id="L-22"><a href="#L-22"><span class="linenos"> 22</span></a>
 </span><span id="L-23"><a href="#L-23"><span class="linenos"> 23</span></a>
-</span><span id="L-24"><a href="#L-24"><span class="linenos"> 24</span></a><span class="k">def</span><span class="w"> </span><span class="nf">omop_clear</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">argparse</span><span class="o">.</span><span class="n">Namespace</span><span class="p">):</span>
-</span><span id="L-25"><a href="#L-25"><span class="linenos"> 25</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Handle the `omop clear` command.&quot;&quot;&quot;</span>
-</span><span id="L-26"><a href="#L-26"><span class="linenos"> 26</span></a>    <span class="n">omop</span><span class="o">.</span><span class="n">clear</span><span class="p">(</span><span class="n">omop</span><span class="o">.</span><span class="n">DB_PATH</span><span class="p">)</span>
+</span><span id="L-24"><a href="#L-24"><span class="linenos"> 24</span></a><span class="k">def</span><span class="w"> </span><span class="nf">_omop_install</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">argparse</span><span class="o">.</span><span class="n">Namespace</span><span class="p">):</span>
+</span><span id="L-25"><a href="#L-25"><span class="linenos"> 25</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Handle the `omop install` command.&quot;&quot;&quot;</span>
+</span><span id="L-26"><a href="#L-26"><span class="linenos"> 26</span></a>    <span class="n">omop</span><span class="o">.</span><span class="n">install</span><span class="p">(</span><span class="n">args</span><span class="o">.</span><span class="n">omop_zip_file</span><span class="p">,</span> <span class="n">args</span><span class="o">.</span><span class="n">version</span><span class="p">)</span>
 </span><span id="L-27"><a href="#L-27"><span class="linenos"> 27</span></a>
 </span><span id="L-28"><a href="#L-28"><span class="linenos"> 28</span></a>
-</span><span id="L-29"><a href="#L-29"><span class="linenos"> 29</span></a><span class="k">def</span><span class="w"> </span><span class="nf">omop_delete</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">argparse</span><span class="o">.</span><span class="n">Namespace</span><span class="p">):</span>
-</span><span id="L-30"><a href="#L-30"><span class="linenos"> 30</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Handle the `omop delete` command.&quot;&quot;&quot;</span>
-</span><span id="L-31"><a href="#L-31"><span class="linenos"> 31</span></a>    <span class="n">omop</span><span class="o">.</span><span class="n">delete</span><span class="p">(</span><span class="n">omop</span><span class="o">.</span><span class="n">DB_PATH</span><span class="p">)</span>
+</span><span id="L-29"><a href="#L-29"><span class="linenos"> 29</span></a><span class="k">def</span><span class="w"> </span><span class="nf">_omop_clear</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">argparse</span><span class="o">.</span><span class="n">Namespace</span><span class="p">):</span>
+</span><span id="L-30"><a href="#L-30"><span class="linenos"> 30</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Handle the `omop clear` command.&quot;&quot;&quot;</span>
+</span><span id="L-31"><a href="#L-31"><span class="linenos"> 31</span></a>    <span class="n">omop</span><span class="o">.</span><span class="n">clear</span><span class="p">(</span><span class="n">omop</span><span class="o">.</span><span class="n">DB_PATH</span><span class="p">)</span>
 </span><span id="L-32"><a href="#L-32"><span class="linenos"> 32</span></a>
 </span><span id="L-33"><a href="#L-33"><span class="linenos"> 33</span></a>
-</span><span id="L-34"><a href="#L-34"><span class="linenos"> 34</span></a><span class="k">def</span><span class="w"> </span><span class="nf">phen_init</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">argparse</span><span class="o">.</span><span class="n">Namespace</span><span class="p">):</span>
-</span><span id="L-35"><a href="#L-35"><span class="linenos"> 35</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Handle the `phen init` command.&quot;&quot;&quot;</span>
-</span><span id="L-36"><a href="#L-36"><span class="linenos"> 36</span></a>    <span class="n">phen</span><span class="o">.</span><span class="n">init</span><span class="p">(</span><span class="n">args</span><span class="o">.</span><span class="n">phen_dir</span><span class="p">,</span> <span class="n">args</span><span class="o">.</span><span class="n">remote_url</span><span class="p">)</span>
+</span><span id="L-34"><a href="#L-34"><span class="linenos"> 34</span></a><span class="k">def</span><span class="w"> </span><span class="nf">_omop_delete</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">argparse</span><span class="o">.</span><span class="n">Namespace</span><span class="p">):</span>
+</span><span id="L-35"><a href="#L-35"><span class="linenos"> 35</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Handle the `omop delete` command.&quot;&quot;&quot;</span>
+</span><span id="L-36"><a href="#L-36"><span class="linenos"> 36</span></a>    <span class="n">omop</span><span class="o">.</span><span class="n">delete</span><span class="p">(</span><span class="n">omop</span><span class="o">.</span><span class="n">DB_PATH</span><span class="p">)</span>
 </span><span id="L-37"><a href="#L-37"><span class="linenos"> 37</span></a>
 </span><span id="L-38"><a href="#L-38"><span class="linenos"> 38</span></a>
-</span><span id="L-39"><a href="#L-39"><span class="linenos"> 39</span></a><span class="k">def</span><span class="w"> </span><span class="nf">phen_fork</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">argparse</span><span class="o">.</span><span class="n">Namespace</span><span class="p">):</span>
-</span><span id="L-40"><a href="#L-40"><span class="linenos"> 40</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Handle the `phen fork` command.&quot;&quot;&quot;</span>
-</span><span id="L-41"><a href="#L-41"><span class="linenos"> 41</span></a>    <span class="n">phen</span><span class="o">.</span><span class="n">fork</span><span class="p">(</span>
-</span><span id="L-42"><a href="#L-42"><span class="linenos"> 42</span></a>        <span class="n">args</span><span class="o">.</span><span class="n">phen_dir</span><span class="p">,</span>
-</span><span id="L-43"><a href="#L-43"><span class="linenos"> 43</span></a>        <span class="n">args</span><span class="o">.</span><span class="n">upstream_url</span><span class="p">,</span>
-</span><span id="L-44"><a href="#L-44"><span class="linenos"> 44</span></a>        <span class="n">args</span><span class="o">.</span><span class="n">upstream_version</span><span class="p">,</span>
-</span><span id="L-45"><a href="#L-45"><span class="linenos"> 45</span></a>        <span class="n">new_origin_url</span><span class="o">=</span><span class="n">args</span><span class="o">.</span><span class="n">remote_url</span><span class="p">,</span>
-</span><span id="L-46"><a href="#L-46"><span class="linenos"> 46</span></a>    <span class="p">)</span>
-</span><span id="L-47"><a href="#L-47"><span class="linenos"> 47</span></a>
-</span><span id="L-48"><a href="#L-48"><span class="linenos"> 48</span></a>
-</span><span id="L-49"><a href="#L-49"><span class="linenos"> 49</span></a><span class="k">def</span><span class="w"> </span><span class="nf">phen_validate</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">argparse</span><span class="o">.</span><span class="n">Namespace</span><span class="p">):</span>
-</span><span id="L-50"><a href="#L-50"><span class="linenos"> 50</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Handle the `phen validate` command.&quot;&quot;&quot;</span>
-</span><span id="L-51"><a href="#L-51"><span class="linenos"> 51</span></a>    <span class="n">phen</span><span class="o">.</span><span class="n">validate</span><span class="p">(</span><span class="n">args</span><span class="o">.</span><span class="n">phen_dir</span><span class="p">)</span>
+</span><span id="L-39"><a href="#L-39"><span class="linenos"> 39</span></a><span class="k">def</span><span class="w"> </span><span class="nf">_phen_init</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">argparse</span><span class="o">.</span><span class="n">Namespace</span><span class="p">):</span>
+</span><span id="L-40"><a href="#L-40"><span class="linenos"> 40</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Handle the `phen init` command.&quot;&quot;&quot;</span>
+</span><span id="L-41"><a href="#L-41"><span class="linenos"> 41</span></a>    <span class="n">phen</span><span class="o">.</span><span class="n">init</span><span class="p">(</span><span class="n">args</span><span class="o">.</span><span class="n">phen_dir</span><span class="p">,</span> <span class="n">args</span><span class="o">.</span><span class="n">remote_url</span><span class="p">)</span>
+</span><span id="L-42"><a href="#L-42"><span class="linenos"> 42</span></a>
+</span><span id="L-43"><a href="#L-43"><span class="linenos"> 43</span></a>
+</span><span id="L-44"><a href="#L-44"><span class="linenos"> 44</span></a><span class="k">def</span><span class="w"> </span><span class="nf">_phen_fork</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">argparse</span><span class="o">.</span><span class="n">Namespace</span><span class="p">):</span>
+</span><span id="L-45"><a href="#L-45"><span class="linenos"> 45</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Handle the `phen fork` command.&quot;&quot;&quot;</span>
+</span><span id="L-46"><a href="#L-46"><span class="linenos"> 46</span></a>    <span class="n">phen</span><span class="o">.</span><span class="n">fork</span><span class="p">(</span>
+</span><span id="L-47"><a href="#L-47"><span class="linenos"> 47</span></a>        <span class="n">args</span><span class="o">.</span><span class="n">phen_dir</span><span class="p">,</span>
+</span><span id="L-48"><a href="#L-48"><span class="linenos"> 48</span></a>        <span class="n">args</span><span class="o">.</span><span class="n">upstream_url</span><span class="p">,</span>
+</span><span id="L-49"><a href="#L-49"><span class="linenos"> 49</span></a>        <span class="n">args</span><span class="o">.</span><span class="n">upstream_version</span><span class="p">,</span>
+</span><span id="L-50"><a href="#L-50"><span class="linenos"> 50</span></a>        <span class="n">new_origin_url</span><span class="o">=</span><span class="n">args</span><span class="o">.</span><span class="n">remote_url</span><span class="p">,</span>
+</span><span id="L-51"><a href="#L-51"><span class="linenos"> 51</span></a>    <span class="p">)</span>
 </span><span id="L-52"><a href="#L-52"><span class="linenos"> 52</span></a>
 </span><span id="L-53"><a href="#L-53"><span class="linenos"> 53</span></a>
-</span><span id="L-54"><a href="#L-54"><span class="linenos"> 54</span></a><span class="k">def</span><span class="w"> </span><span class="nf">phen_map</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">argparse</span><span class="o">.</span><span class="n">Namespace</span><span class="p">):</span>
-</span><span id="L-55"><a href="#L-55"><span class="linenos"> 55</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Handle the `phen map` command.&quot;&quot;&quot;</span>
-</span><span id="L-56"><a href="#L-56"><span class="linenos"> 56</span></a>    <span class="n">phen</span><span class="o">.</span><span class="n">map</span><span class="p">(</span><span class="n">args</span><span class="o">.</span><span class="n">phen_dir</span><span class="p">,</span> <span class="n">args</span><span class="o">.</span><span class="n">target_coding</span><span class="p">)</span>
+</span><span id="L-54"><a href="#L-54"><span class="linenos"> 54</span></a><span class="k">def</span><span class="w"> </span><span class="nf">_phen_validate</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">argparse</span><span class="o">.</span><span class="n">Namespace</span><span class="p">):</span>
+</span><span id="L-55"><a href="#L-55"><span class="linenos"> 55</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Handle the `phen validate` command.&quot;&quot;&quot;</span>
+</span><span id="L-56"><a href="#L-56"><span class="linenos"> 56</span></a>    <span class="n">phen</span><span class="o">.</span><span class="n">validate</span><span class="p">(</span><span class="n">args</span><span class="o">.</span><span class="n">phen_dir</span><span class="p">)</span>
 </span><span id="L-57"><a href="#L-57"><span class="linenos"> 57</span></a>
 </span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</span></a>
-</span><span id="L-59"><a href="#L-59"><span class="linenos"> 59</span></a><span class="k">def</span><span class="w"> </span><span class="nf">phen_export</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">argparse</span><span class="o">.</span><span class="n">Namespace</span><span class="p">):</span>
-</span><span id="L-60"><a href="#L-60"><span class="linenos"> 60</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Handle the `phen copy` command.&quot;&quot;&quot;</span>
-</span><span id="L-61"><a href="#L-61"><span class="linenos"> 61</span></a>    <span class="n">phen</span><span class="o">.</span><span class="n">export</span><span class="p">(</span><span class="n">args</span><span class="o">.</span><span class="n">phen_dir</span><span class="p">,</span> <span class="n">args</span><span class="o">.</span><span class="n">version</span><span class="p">)</span>
+</span><span id="L-59"><a href="#L-59"><span class="linenos"> 59</span></a><span class="k">def</span><span class="w"> </span><span class="nf">_phen_map</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">argparse</span><span class="o">.</span><span class="n">Namespace</span><span class="p">):</span>
+</span><span id="L-60"><a href="#L-60"><span class="linenos"> 60</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Handle the `phen map` command.&quot;&quot;&quot;</span>
+</span><span id="L-61"><a href="#L-61"><span class="linenos"> 61</span></a>    <span class="n">phen</span><span class="o">.</span><span class="n">map</span><span class="p">(</span><span class="n">args</span><span class="o">.</span><span class="n">phen_dir</span><span class="p">,</span> <span class="n">args</span><span class="o">.</span><span class="n">target_coding</span><span class="p">)</span>
 </span><span id="L-62"><a href="#L-62"><span class="linenos"> 62</span></a>
 </span><span id="L-63"><a href="#L-63"><span class="linenos"> 63</span></a>
-</span><span id="L-64"><a href="#L-64"><span class="linenos"> 64</span></a><span class="k">def</span><span class="w"> </span><span class="nf">phen_publish</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">argparse</span><span class="o">.</span><span class="n">Namespace</span><span class="p">):</span>
-</span><span id="L-65"><a href="#L-65"><span class="linenos"> 65</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Handle the `phen publish` command.&quot;&quot;&quot;</span>
-</span><span id="L-66"><a href="#L-66"><span class="linenos"> 66</span></a>    <span class="n">phen</span><span class="o">.</span><span class="n">publish</span><span class="p">(</span><span class="n">args</span><span class="o">.</span><span class="n">phen_dir</span><span class="p">,</span> <span class="n">args</span><span class="o">.</span><span class="n">msg</span><span class="p">,</span> <span class="n">args</span><span class="o">.</span><span class="n">remote_url</span><span class="p">,</span> <span class="n">args</span><span class="o">.</span><span class="n">increment</span><span class="p">)</span>
+</span><span id="L-64"><a href="#L-64"><span class="linenos"> 64</span></a><span class="k">def</span><span class="w"> </span><span class="nf">_phen_export</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">argparse</span><span class="o">.</span><span class="n">Namespace</span><span class="p">):</span>
+</span><span id="L-65"><a href="#L-65"><span class="linenos"> 65</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Handle the `phen copy` command.&quot;&quot;&quot;</span>
+</span><span id="L-66"><a href="#L-66"><span class="linenos"> 66</span></a>    <span class="n">phen</span><span class="o">.</span><span class="n">export</span><span class="p">(</span><span class="n">args</span><span class="o">.</span><span class="n">phen_dir</span><span class="p">,</span> <span class="n">args</span><span class="o">.</span><span class="n">version</span><span class="p">)</span>
 </span><span id="L-67"><a href="#L-67"><span class="linenos"> 67</span></a>
 </span><span id="L-68"><a href="#L-68"><span class="linenos"> 68</span></a>
-</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a><span class="k">def</span><span class="w"> </span><span class="nf">phen_copy</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">argparse</span><span class="o">.</span><span class="n">Namespace</span><span class="p">):</span>
-</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Handle the `phen copy` command.&quot;&quot;&quot;</span>
-</span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</span></a>    <span class="n">phen</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="n">args</span><span class="o">.</span><span class="n">phen_dir</span><span class="p">,</span> <span class="n">args</span><span class="o">.</span><span class="n">target_dir</span><span class="p">,</span> <span class="n">args</span><span class="o">.</span><span class="n">version</span><span class="p">)</span>
+</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a><span class="k">def</span><span class="w"> </span><span class="nf">_phen_publish</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">argparse</span><span class="o">.</span><span class="n">Namespace</span><span class="p">):</span>
+</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Handle the `phen publish` command.&quot;&quot;&quot;</span>
+</span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</span></a>    <span class="n">phen</span><span class="o">.</span><span class="n">publish</span><span class="p">(</span><span class="n">args</span><span class="o">.</span><span class="n">phen_dir</span><span class="p">,</span> <span class="n">args</span><span class="o">.</span><span class="n">msg</span><span class="p">,</span> <span class="n">args</span><span class="o">.</span><span class="n">remote_url</span><span class="p">,</span> <span class="n">args</span><span class="o">.</span><span class="n">increment</span><span class="p">)</span>
 </span><span id="L-72"><a href="#L-72"><span class="linenos"> 72</span></a>
 </span><span id="L-73"><a href="#L-73"><span class="linenos"> 73</span></a>
-</span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</span></a><span class="k">def</span><span class="w"> </span><span class="nf">phen_diff</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">argparse</span><span class="o">.</span><span class="n">Namespace</span><span class="p">):</span>
-</span><span id="L-75"><a href="#L-75"><span class="linenos"> 75</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Handle the `phen diff` command.&quot;&quot;&quot;</span>
-</span><span id="L-76"><a href="#L-76"><span class="linenos"> 76</span></a>    <span class="n">phen</span><span class="o">.</span><span class="n">diff</span><span class="p">(</span><span class="n">args</span><span class="o">.</span><span class="n">phen_dir</span><span class="p">,</span> <span class="n">args</span><span class="o">.</span><span class="n">version</span><span class="p">,</span> <span class="n">args</span><span class="o">.</span><span class="n">old_phen_dir</span><span class="p">,</span> <span class="n">args</span><span class="o">.</span><span class="n">old_version</span><span class="p">)</span>
+</span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</span></a><span class="k">def</span><span class="w"> </span><span class="nf">_phen_copy</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">argparse</span><span class="o">.</span><span class="n">Namespace</span><span class="p">):</span>
+</span><span id="L-75"><a href="#L-75"><span class="linenos"> 75</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Handle the `phen copy` command.&quot;&quot;&quot;</span>
+</span><span id="L-76"><a href="#L-76"><span class="linenos"> 76</span></a>    <span class="n">phen</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="n">args</span><span class="o">.</span><span class="n">phen_dir</span><span class="p">,</span> <span class="n">args</span><span class="o">.</span><span class="n">target_dir</span><span class="p">,</span> <span class="n">args</span><span class="o">.</span><span class="n">version</span><span class="p">)</span>
 </span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a>
 </span><span id="L-78"><a href="#L-78"><span class="linenos"> 78</span></a>
-</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a><span class="k">def</span><span class="w"> </span><span class="nf">main</span><span class="p">():</span>
-</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a>    <span class="n">parser</span> <span class="o">=</span> <span class="n">argparse</span><span class="o">.</span><span class="n">ArgumentParser</span><span class="p">(</span><span class="n">description</span><span class="o">=</span><span class="s2">&quot;ACMC command-line tool&quot;</span><span class="p">)</span>
-</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a>    <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">&quot;--debug&quot;</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s2">&quot;store_true&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Enable debug mode&quot;</span><span class="p">)</span>
-</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a>    <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
-</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a>        <span class="s2">&quot;--version&quot;</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s2">&quot;version&quot;</span><span class="p">,</span> <span class="n">version</span><span class="o">=</span><span class="sa">f</span><span class="s2">&quot;acmc </span><span class="si">{</span><span class="n">acmc</span><span class="o">.</span><span class="n">__version__</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a>    <span class="p">)</span>
-</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a>
-</span><span id="L-86"><a href="#L-86"><span class="linenos"> 86</span></a>    <span class="c1"># Top-level commands</span>
-</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a>    <span class="n">subparsers</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">add_subparsers</span><span class="p">(</span>
-</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a>        <span class="n">dest</span><span class="o">=</span><span class="s2">&quot;command&quot;</span><span class="p">,</span> <span class="n">required</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Available commands&quot;</span>
+</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a><span class="k">def</span><span class="w"> </span><span class="nf">_phen_diff</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">argparse</span><span class="o">.</span><span class="n">Namespace</span><span class="p">):</span>
+</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Handle the `phen diff` command.&quot;&quot;&quot;</span>
+</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a>    <span class="n">phen</span><span class="o">.</span><span class="n">diff</span><span class="p">(</span><span class="n">args</span><span class="o">.</span><span class="n">phen_dir</span><span class="p">,</span> <span class="n">args</span><span class="o">.</span><span class="n">version</span><span class="p">,</span> <span class="n">args</span><span class="o">.</span><span class="n">old_phen_dir</span><span class="p">,</span> <span class="n">args</span><span class="o">.</span><span class="n">old_version</span><span class="p">)</span>
+</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a>
+</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a>
+</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a><span class="k">def</span><span class="w"> </span><span class="nf">main</span><span class="p">():</span>
+</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a>    <span class="n">parser</span> <span class="o">=</span> <span class="n">argparse</span><span class="o">.</span><span class="n">ArgumentParser</span><span class="p">(</span><span class="n">description</span><span class="o">=</span><span class="s2">&quot;ACMC command-line tool&quot;</span><span class="p">)</span>
+</span><span id="L-86"><a href="#L-86"><span class="linenos"> 86</span></a>    <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">&quot;--debug&quot;</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s2">&quot;store_true&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Enable debug mode&quot;</span><span class="p">)</span>
+</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a>    <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
+</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a>        <span class="s2">&quot;--version&quot;</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s2">&quot;version&quot;</span><span class="p">,</span> <span class="n">version</span><span class="o">=</span><span class="sa">f</span><span class="s2">&quot;acmc </span><span class="si">{</span><span class="n">acmc</span><span class="o">.</span><span class="n">__version__</span><span class="si">}</span><span class="s2">&quot;</span>
 </span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a>    <span class="p">)</span>
 </span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a>
-</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a>    <span class="c1">### TRUD Command ###</span>
-</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a>    <span class="n">trud_parser</span> <span class="o">=</span> <span class="n">subparsers</span><span class="o">.</span><span class="n">add_parser</span><span class="p">(</span><span class="s2">&quot;trud&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;TRUD commands&quot;</span><span class="p">)</span>
-</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a>    <span class="n">trud_subparsers</span> <span class="o">=</span> <span class="n">trud_parser</span><span class="o">.</span><span class="n">add_subparsers</span><span class="p">(</span>
-</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a>        <span class="n">dest</span><span class="o">=</span><span class="s2">&quot;subcommand&quot;</span><span class="p">,</span> <span class="n">required</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;TRUD subcommands&quot;</span>
-</span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</span></a>    <span class="p">)</span>
-</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a>
-</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a>    <span class="c1"># trud install</span>
-</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a>    <span class="n">trud_install_parser</span> <span class="o">=</span> <span class="n">trud_subparsers</span><span class="o">.</span><span class="n">add_parser</span><span class="p">(</span>
-</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a>        <span class="s2">&quot;install&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Install TRUD components&quot;</span>
+</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a>    <span class="c1"># Top-level commands</span>
+</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a>    <span class="n">subparsers</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">add_subparsers</span><span class="p">(</span>
+</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a>        <span class="n">dest</span><span class="o">=</span><span class="s2">&quot;command&quot;</span><span class="p">,</span> <span class="n">required</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Available commands&quot;</span>
+</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a>    <span class="p">)</span>
+</span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</span></a>
+</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a>    <span class="c1">### TRUD Command ###</span>
+</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a>    <span class="n">trud_parser</span> <span class="o">=</span> <span class="n">subparsers</span><span class="o">.</span><span class="n">add_parser</span><span class="p">(</span><span class="s2">&quot;trud&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;TRUD commands&quot;</span><span class="p">)</span>
+</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a>    <span class="n">trud_subparsers</span> <span class="o">=</span> <span class="n">trud_parser</span><span class="o">.</span><span class="n">add_subparsers</span><span class="p">(</span>
+</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a>        <span class="n">dest</span><span class="o">=</span><span class="s2">&quot;subcommand&quot;</span><span class="p">,</span> <span class="n">required</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;TRUD subcommands&quot;</span>
 </span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a>    <span class="p">)</span>
-</span><span id="L-101"><a href="#L-101"><span class="linenos">101</span></a>    <span class="n">trud_install_parser</span><span class="o">.</span><span class="n">set_defaults</span><span class="p">(</span><span class="n">func</span><span class="o">=</span><span class="n">trud_install</span><span class="p">)</span>
-</span><span id="L-102"><a href="#L-102"><span class="linenos">102</span></a>
-</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a>    <span class="c1">### OMOP Command ###</span>
-</span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a>    <span class="n">omop_parser</span> <span class="o">=</span> <span class="n">subparsers</span><span class="o">.</span><span class="n">add_parser</span><span class="p">(</span><span class="s2">&quot;omop&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;OMOP commands&quot;</span><span class="p">)</span>
-</span><span id="L-105"><a href="#L-105"><span class="linenos">105</span></a>    <span class="n">omop_subparsers</span> <span class="o">=</span> <span class="n">omop_parser</span><span class="o">.</span><span class="n">add_subparsers</span><span class="p">(</span>
-</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a>        <span class="n">dest</span><span class="o">=</span><span class="s2">&quot;subcommand&quot;</span><span class="p">,</span> <span class="n">required</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;OMOP subcommands&quot;</span>
-</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a>    <span class="p">)</span>
-</span><span id="L-108"><a href="#L-108"><span class="linenos">108</span></a>
-</span><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a>    <span class="c1"># omop install</span>
-</span><span id="L-110"><a href="#L-110"><span class="linenos">110</span></a>    <span class="n">omop_install_parser</span> <span class="o">=</span> <span class="n">omop_subparsers</span><span class="o">.</span><span class="n">add_parser</span><span class="p">(</span>
-</span><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a>        <span class="s2">&quot;install&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Install OMOP codes within database&quot;</span>
+</span><span id="L-101"><a href="#L-101"><span class="linenos">101</span></a>
+</span><span id="L-102"><a href="#L-102"><span class="linenos">102</span></a>    <span class="c1"># trud install</span>
+</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a>    <span class="n">trud_install_parser</span> <span class="o">=</span> <span class="n">trud_subparsers</span><span class="o">.</span><span class="n">add_parser</span><span class="p">(</span>
+</span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a>        <span class="s2">&quot;install&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Install TRUD components&quot;</span>
+</span><span id="L-105"><a href="#L-105"><span class="linenos">105</span></a>    <span class="p">)</span>
+</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a>    <span class="n">trud_install_parser</span><span class="o">.</span><span class="n">set_defaults</span><span class="p">(</span><span class="n">func</span><span class="o">=</span><span class="n">_trud_install</span><span class="p">)</span>
+</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a>
+</span><span id="L-108"><a href="#L-108"><span class="linenos">108</span></a>    <span class="c1">### OMOP Command ###</span>
+</span><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a>    <span class="n">omop_parser</span> <span class="o">=</span> <span class="n">subparsers</span><span class="o">.</span><span class="n">add_parser</span><span class="p">(</span><span class="s2">&quot;omop&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;OMOP commands&quot;</span><span class="p">)</span>
+</span><span id="L-110"><a href="#L-110"><span class="linenos">110</span></a>    <span class="n">omop_subparsers</span> <span class="o">=</span> <span class="n">omop_parser</span><span class="o">.</span><span class="n">add_subparsers</span><span class="p">(</span>
+</span><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a>        <span class="n">dest</span><span class="o">=</span><span class="s2">&quot;subcommand&quot;</span><span class="p">,</span> <span class="n">required</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;OMOP subcommands&quot;</span>
 </span><span id="L-112"><a href="#L-112"><span class="linenos">112</span></a>    <span class="p">)</span>
-</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a>    <span class="n">omop_install_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
-</span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a>        <span class="s2">&quot;-f&quot;</span><span class="p">,</span> <span class="s2">&quot;--omop-zip-file&quot;</span><span class="p">,</span> <span class="n">required</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Path to downloaded OMOP zip file&quot;</span>
-</span><span id="L-115"><a href="#L-115"><span class="linenos">115</span></a>    <span class="p">)</span>
-</span><span id="L-116"><a href="#L-116"><span class="linenos">116</span></a>    <span class="n">omop_install_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
-</span><span id="L-117"><a href="#L-117"><span class="linenos">117</span></a>        <span class="s2">&quot;-v&quot;</span><span class="p">,</span> <span class="s2">&quot;--version&quot;</span><span class="p">,</span> <span class="n">required</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;OMOP vocabularies release version&quot;</span>
-</span><span id="L-118"><a href="#L-118"><span class="linenos">118</span></a>    <span class="p">)</span>
-</span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a>    <span class="n">omop_install_parser</span><span class="o">.</span><span class="n">set_defaults</span><span class="p">(</span><span class="n">func</span><span class="o">=</span><span class="n">omop_install</span><span class="p">)</span>
-</span><span id="L-120"><a href="#L-120"><span class="linenos">120</span></a>
-</span><span id="L-121"><a href="#L-121"><span class="linenos">121</span></a>    <span class="c1"># omop clear</span>
-</span><span id="L-122"><a href="#L-122"><span class="linenos">122</span></a>    <span class="n">omop_clear_parser</span> <span class="o">=</span> <span class="n">omop_subparsers</span><span class="o">.</span><span class="n">add_parser</span><span class="p">(</span>
-</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a>        <span class="s2">&quot;clear&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Clear OMOP data from database&quot;</span>
-</span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a>    <span class="p">)</span>
-</span><span id="L-125"><a href="#L-125"><span class="linenos">125</span></a>    <span class="n">omop_clear_parser</span><span class="o">.</span><span class="n">set_defaults</span><span class="p">(</span><span class="n">func</span><span class="o">=</span><span class="n">omop_clear</span><span class="p">)</span>
-</span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a>
-</span><span id="L-127"><a href="#L-127"><span class="linenos">127</span></a>    <span class="c1"># omop delete</span>
-</span><span id="L-128"><a href="#L-128"><span class="linenos">128</span></a>    <span class="n">omop_delete_parser</span> <span class="o">=</span> <span class="n">omop_subparsers</span><span class="o">.</span><span class="n">add_parser</span><span class="p">(</span>
-</span><span id="L-129"><a href="#L-129"><span class="linenos">129</span></a>        <span class="s2">&quot;delete&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Delete OMOP database&quot;</span>
-</span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a>    <span class="p">)</span>
-</span><span id="L-131"><a href="#L-131"><span class="linenos">131</span></a>    <span class="n">omop_delete_parser</span><span class="o">.</span><span class="n">set_defaults</span><span class="p">(</span><span class="n">func</span><span class="o">=</span><span class="n">omop_delete</span><span class="p">)</span>
-</span><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a>
-</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a>    <span class="c1">### PHEN Command ###</span>
-</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a>    <span class="n">phen_parser</span> <span class="o">=</span> <span class="n">subparsers</span><span class="o">.</span><span class="n">add_parser</span><span class="p">(</span><span class="s2">&quot;phen&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Phen commands&quot;</span><span class="p">)</span>
-</span><span id="L-135"><a href="#L-135"><span class="linenos">135</span></a>    <span class="n">phen_subparsers</span> <span class="o">=</span> <span class="n">phen_parser</span><span class="o">.</span><span class="n">add_subparsers</span><span class="p">(</span>
-</span><span id="L-136"><a href="#L-136"><span class="linenos">136</span></a>        <span class="n">dest</span><span class="o">=</span><span class="s2">&quot;subcommand&quot;</span><span class="p">,</span> <span class="n">required</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Phen subcommands&quot;</span>
-</span><span id="L-137"><a href="#L-137"><span class="linenos">137</span></a>    <span class="p">)</span>
-</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a>
-</span><span id="L-139"><a href="#L-139"><span class="linenos">139</span></a>    <span class="c1"># phen init</span>
-</span><span id="L-140"><a href="#L-140"><span class="linenos">140</span></a>    <span class="n">phen_init_parser</span> <span class="o">=</span> <span class="n">phen_subparsers</span><span class="o">.</span><span class="n">add_parser</span><span class="p">(</span>
-</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a>        <span class="s2">&quot;init&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Initiatise phenotype directory&quot;</span>
+</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a>
+</span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a>    <span class="c1"># omop install</span>
+</span><span id="L-115"><a href="#L-115"><span class="linenos">115</span></a>    <span class="n">omop_install_parser</span> <span class="o">=</span> <span class="n">omop_subparsers</span><span class="o">.</span><span class="n">add_parser</span><span class="p">(</span>
+</span><span id="L-116"><a href="#L-116"><span class="linenos">116</span></a>        <span class="s2">&quot;install&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Install OMOP codes within database&quot;</span>
+</span><span id="L-117"><a href="#L-117"><span class="linenos">117</span></a>    <span class="p">)</span>
+</span><span id="L-118"><a href="#L-118"><span class="linenos">118</span></a>    <span class="n">omop_install_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
+</span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a>        <span class="s2">&quot;-f&quot;</span><span class="p">,</span> <span class="s2">&quot;--omop-zip-file&quot;</span><span class="p">,</span> <span class="n">required</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Path to downloaded OMOP zip file&quot;</span>
+</span><span id="L-120"><a href="#L-120"><span class="linenos">120</span></a>    <span class="p">)</span>
+</span><span id="L-121"><a href="#L-121"><span class="linenos">121</span></a>    <span class="n">omop_install_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
+</span><span id="L-122"><a href="#L-122"><span class="linenos">122</span></a>        <span class="s2">&quot;-v&quot;</span><span class="p">,</span> <span class="s2">&quot;--version&quot;</span><span class="p">,</span> <span class="n">required</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;OMOP vocabularies release version&quot;</span>
+</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a>    <span class="p">)</span>
+</span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a>    <span class="n">omop_install_parser</span><span class="o">.</span><span class="n">set_defaults</span><span class="p">(</span><span class="n">func</span><span class="o">=</span><span class="n">_omop_install</span><span class="p">)</span>
+</span><span id="L-125"><a href="#L-125"><span class="linenos">125</span></a>
+</span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a>    <span class="c1"># omop clear</span>
+</span><span id="L-127"><a href="#L-127"><span class="linenos">127</span></a>    <span class="n">omop_clear_parser</span> <span class="o">=</span> <span class="n">omop_subparsers</span><span class="o">.</span><span class="n">add_parser</span><span class="p">(</span>
+</span><span id="L-128"><a href="#L-128"><span class="linenos">128</span></a>        <span class="s2">&quot;clear&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Clear OMOP data from database&quot;</span>
+</span><span id="L-129"><a href="#L-129"><span class="linenos">129</span></a>    <span class="p">)</span>
+</span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a>    <span class="n">omop_clear_parser</span><span class="o">.</span><span class="n">set_defaults</span><span class="p">(</span><span class="n">func</span><span class="o">=</span><span class="n">_omop_clear</span><span class="p">)</span>
+</span><span id="L-131"><a href="#L-131"><span class="linenos">131</span></a>
+</span><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a>    <span class="c1"># omop delete</span>
+</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a>    <span class="n">omop_delete_parser</span> <span class="o">=</span> <span class="n">omop_subparsers</span><span class="o">.</span><span class="n">add_parser</span><span class="p">(</span>
+</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a>        <span class="s2">&quot;delete&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Delete OMOP database&quot;</span>
+</span><span id="L-135"><a href="#L-135"><span class="linenos">135</span></a>    <span class="p">)</span>
+</span><span id="L-136"><a href="#L-136"><span class="linenos">136</span></a>    <span class="n">omop_delete_parser</span><span class="o">.</span><span class="n">set_defaults</span><span class="p">(</span><span class="n">func</span><span class="o">=</span><span class="n">_omop_delete</span><span class="p">)</span>
+</span><span id="L-137"><a href="#L-137"><span class="linenos">137</span></a>
+</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a>    <span class="c1">### PHEN Command ###</span>
+</span><span id="L-139"><a href="#L-139"><span class="linenos">139</span></a>    <span class="n">phen_parser</span> <span class="o">=</span> <span class="n">subparsers</span><span class="o">.</span><span class="n">add_parser</span><span class="p">(</span><span class="s2">&quot;phen&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Phen commands&quot;</span><span class="p">)</span>
+</span><span id="L-140"><a href="#L-140"><span class="linenos">140</span></a>    <span class="n">phen_subparsers</span> <span class="o">=</span> <span class="n">phen_parser</span><span class="o">.</span><span class="n">add_subparsers</span><span class="p">(</span>
+</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a>        <span class="n">dest</span><span class="o">=</span><span class="s2">&quot;subcommand&quot;</span><span class="p">,</span> <span class="n">required</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Phen subcommands&quot;</span>
 </span><span id="L-142"><a href="#L-142"><span class="linenos">142</span></a>    <span class="p">)</span>
-</span><span id="L-143"><a href="#L-143"><span class="linenos">143</span></a>    <span class="n">phen_init_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
-</span><span id="L-144"><a href="#L-144"><span class="linenos">144</span></a>        <span class="s2">&quot;-d&quot;</span><span class="p">,</span>
-</span><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a>        <span class="s2">&quot;--phen-dir&quot;</span><span class="p">,</span>
-</span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a>        <span class="nb">type</span><span class="o">=</span><span class="nb">str</span><span class="p">,</span>
-</span><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a>        <span class="n">default</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">phen</span><span class="o">.</span><span class="n">DEFAULT_PHEN_PATH</span><span class="o">.</span><span class="n">resolve</span><span class="p">()),</span>
-</span><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;(Optional) Local phenotype workspace directory (default is ./workspace/phen).&quot;</span><span class="p">,</span>
-</span><span id="L-149"><a href="#L-149"><span class="linenos">149</span></a>    <span class="p">)</span>
-</span><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a>    <span class="n">phen_init_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
-</span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a>        <span class="s2">&quot;-r&quot;</span><span class="p">,</span>
-</span><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a>        <span class="s2">&quot;--remote_url&quot;</span><span class="p">,</span>
-</span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;(Optional) URL to repository where the phenotype will be published.&quot;</span><span class="p">,</span>
+</span><span id="L-143"><a href="#L-143"><span class="linenos">143</span></a>
+</span><span id="L-144"><a href="#L-144"><span class="linenos">144</span></a>    <span class="c1"># phen init</span>
+</span><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a>    <span class="n">phen_init_parser</span> <span class="o">=</span> <span class="n">phen_subparsers</span><span class="o">.</span><span class="n">add_parser</span><span class="p">(</span>
+</span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a>        <span class="s2">&quot;init&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Initiatise phenotype directory&quot;</span>
+</span><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a>    <span class="p">)</span>
+</span><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a>    <span class="n">phen_init_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
+</span><span id="L-149"><a href="#L-149"><span class="linenos">149</span></a>        <span class="s2">&quot;-d&quot;</span><span class="p">,</span>
+</span><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a>        <span class="s2">&quot;--phen-dir&quot;</span><span class="p">,</span>
+</span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a>        <span class="nb">type</span><span class="o">=</span><span class="nb">str</span><span class="p">,</span>
+</span><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a>        <span class="n">default</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">phen</span><span class="o">.</span><span class="n">DEFAULT_PHEN_PATH</span><span class="o">.</span><span class="n">resolve</span><span class="p">()),</span>
+</span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;(Optional) Local phenotype workspace directory (default is ./workspace/phen).&quot;</span><span class="p">,</span>
 </span><span id="L-154"><a href="#L-154"><span class="linenos">154</span></a>    <span class="p">)</span>
-</span><span id="L-155"><a href="#L-155"><span class="linenos">155</span></a>    <span class="n">phen_init_parser</span><span class="o">.</span><span class="n">set_defaults</span><span class="p">(</span><span class="n">func</span><span class="o">=</span><span class="n">phen_init</span><span class="p">)</span>
-</span><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a>
-</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a>    <span class="c1"># phen fork</span>
-</span><span id="L-158"><a href="#L-158"><span class="linenos">158</span></a>    <span class="n">phen_fork_parser</span> <span class="o">=</span> <span class="n">phen_subparsers</span><span class="o">.</span><span class="n">add_parser</span><span class="p">(</span>
-</span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a>        <span class="s2">&quot;fork&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Fork an existing phenotype&quot;</span>
-</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a>    <span class="p">)</span>
-</span><span id="L-161"><a href="#L-161"><span class="linenos">161</span></a>    <span class="n">phen_fork_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
-</span><span id="L-162"><a href="#L-162"><span class="linenos">162</span></a>        <span class="s2">&quot;-d&quot;</span><span class="p">,</span>
-</span><span id="L-163"><a href="#L-163"><span class="linenos">163</span></a>        <span class="s2">&quot;--phen-dir&quot;</span><span class="p">,</span>
-</span><span id="L-164"><a href="#L-164"><span class="linenos">164</span></a>        <span class="nb">type</span><span class="o">=</span><span class="nb">str</span><span class="p">,</span>
-</span><span id="L-165"><a href="#L-165"><span class="linenos">165</span></a>        <span class="n">default</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">phen</span><span class="o">.</span><span class="n">DEFAULT_PHEN_PATH</span><span class="o">.</span><span class="n">resolve</span><span class="p">()),</span>
-</span><span id="L-166"><a href="#L-166"><span class="linenos">166</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;(Optional) Local phenotype workspace directory (default is ./workspace/phen).&quot;</span><span class="p">,</span>
-</span><span id="L-167"><a href="#L-167"><span class="linenos">167</span></a>    <span class="p">)</span>
-</span><span id="L-168"><a href="#L-168"><span class="linenos">168</span></a>    <span class="n">phen_fork_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
-</span><span id="L-169"><a href="#L-169"><span class="linenos">169</span></a>        <span class="s2">&quot;-r&quot;</span><span class="p">,</span>
-</span><span id="L-170"><a href="#L-170"><span class="linenos">170</span></a>        <span class="s2">&quot;--remote_url&quot;</span><span class="p">,</span>
-</span><span id="L-171"><a href="#L-171"><span class="linenos">171</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;(Optional) URL to repository where the forked phenotype will be published.&quot;</span><span class="p">,</span>
+</span><span id="L-155"><a href="#L-155"><span class="linenos">155</span></a>    <span class="n">phen_init_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
+</span><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a>        <span class="s2">&quot;-r&quot;</span><span class="p">,</span>
+</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a>        <span class="s2">&quot;--remote_url&quot;</span><span class="p">,</span>
+</span><span id="L-158"><a href="#L-158"><span class="linenos">158</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;(Optional) URL to repository where the phenotype will be published.&quot;</span><span class="p">,</span>
+</span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a>    <span class="p">)</span>
+</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a>    <span class="n">phen_init_parser</span><span class="o">.</span><span class="n">set_defaults</span><span class="p">(</span><span class="n">func</span><span class="o">=</span><span class="n">_phen_init</span><span class="p">)</span>
+</span><span id="L-161"><a href="#L-161"><span class="linenos">161</span></a>
+</span><span id="L-162"><a href="#L-162"><span class="linenos">162</span></a>    <span class="c1"># phen fork</span>
+</span><span id="L-163"><a href="#L-163"><span class="linenos">163</span></a>    <span class="n">phen_fork_parser</span> <span class="o">=</span> <span class="n">phen_subparsers</span><span class="o">.</span><span class="n">add_parser</span><span class="p">(</span>
+</span><span id="L-164"><a href="#L-164"><span class="linenos">164</span></a>        <span class="s2">&quot;fork&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Fork an existing phenotype&quot;</span>
+</span><span id="L-165"><a href="#L-165"><span class="linenos">165</span></a>    <span class="p">)</span>
+</span><span id="L-166"><a href="#L-166"><span class="linenos">166</span></a>    <span class="n">phen_fork_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
+</span><span id="L-167"><a href="#L-167"><span class="linenos">167</span></a>        <span class="s2">&quot;-d&quot;</span><span class="p">,</span>
+</span><span id="L-168"><a href="#L-168"><span class="linenos">168</span></a>        <span class="s2">&quot;--phen-dir&quot;</span><span class="p">,</span>
+</span><span id="L-169"><a href="#L-169"><span class="linenos">169</span></a>        <span class="nb">type</span><span class="o">=</span><span class="nb">str</span><span class="p">,</span>
+</span><span id="L-170"><a href="#L-170"><span class="linenos">170</span></a>        <span class="n">default</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">phen</span><span class="o">.</span><span class="n">DEFAULT_PHEN_PATH</span><span class="o">.</span><span class="n">resolve</span><span class="p">()),</span>
+</span><span id="L-171"><a href="#L-171"><span class="linenos">171</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;(Optional) Local phenotype workspace directory (default is ./workspace/phen).&quot;</span><span class="p">,</span>
 </span><span id="L-172"><a href="#L-172"><span class="linenos">172</span></a>    <span class="p">)</span>
 </span><span id="L-173"><a href="#L-173"><span class="linenos">173</span></a>    <span class="n">phen_fork_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
-</span><span id="L-174"><a href="#L-174"><span class="linenos">174</span></a>        <span class="s2">&quot;-u&quot;</span><span class="p">,</span>
-</span><span id="L-175"><a href="#L-175"><span class="linenos">175</span></a>        <span class="s2">&quot;--upstream-url&quot;</span><span class="p">,</span>
-</span><span id="L-176"><a href="#L-176"><span class="linenos">176</span></a>        <span class="n">required</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
-</span><span id="L-177"><a href="#L-177"><span class="linenos">177</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;(Required) URL to the phenotype repository to fork.&quot;</span><span class="p">,</span>
-</span><span id="L-178"><a href="#L-178"><span class="linenos">178</span></a>    <span class="p">)</span>
-</span><span id="L-179"><a href="#L-179"><span class="linenos">179</span></a>    <span class="n">phen_fork_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
-</span><span id="L-180"><a href="#L-180"><span class="linenos">180</span></a>        <span class="s2">&quot;-v&quot;</span><span class="p">,</span>
-</span><span id="L-181"><a href="#L-181"><span class="linenos">181</span></a>        <span class="s2">&quot;--upstream-version&quot;</span><span class="p">,</span>
-</span><span id="L-182"><a href="#L-182"><span class="linenos">182</span></a>        <span class="n">required</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
-</span><span id="L-183"><a href="#L-183"><span class="linenos">183</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;(Required) Phenotype version to fork.&quot;</span><span class="p">,</span>
-</span><span id="L-184"><a href="#L-184"><span class="linenos">184</span></a>    <span class="p">)</span>
-</span><span id="L-185"><a href="#L-185"><span class="linenos">185</span></a>    <span class="n">phen_fork_parser</span><span class="o">.</span><span class="n">set_defaults</span><span class="p">(</span><span class="n">func</span><span class="o">=</span><span class="n">phen_fork</span><span class="p">)</span>
-</span><span id="L-186"><a href="#L-186"><span class="linenos">186</span></a>
-</span><span id="L-187"><a href="#L-187"><span class="linenos">187</span></a>    <span class="c1"># phen validate</span>
-</span><span id="L-188"><a href="#L-188"><span class="linenos">188</span></a>    <span class="n">phen_validate_parser</span> <span class="o">=</span> <span class="n">phen_subparsers</span><span class="o">.</span><span class="n">add_parser</span><span class="p">(</span>
-</span><span id="L-189"><a href="#L-189"><span class="linenos">189</span></a>        <span class="s2">&quot;validate&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Validate phenotype configuration&quot;</span>
-</span><span id="L-190"><a href="#L-190"><span class="linenos">190</span></a>    <span class="p">)</span>
-</span><span id="L-191"><a href="#L-191"><span class="linenos">191</span></a>    <span class="n">phen_validate_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
-</span><span id="L-192"><a href="#L-192"><span class="linenos">192</span></a>        <span class="s2">&quot;-d&quot;</span><span class="p">,</span>
-</span><span id="L-193"><a href="#L-193"><span class="linenos">193</span></a>        <span class="s2">&quot;--phen-dir&quot;</span><span class="p">,</span>
-</span><span id="L-194"><a href="#L-194"><span class="linenos">194</span></a>        <span class="nb">type</span><span class="o">=</span><span class="nb">str</span><span class="p">,</span>
-</span><span id="L-195"><a href="#L-195"><span class="linenos">195</span></a>        <span class="n">default</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">phen</span><span class="o">.</span><span class="n">DEFAULT_PHEN_PATH</span><span class="o">.</span><span class="n">resolve</span><span class="p">()),</span>
-</span><span id="L-196"><a href="#L-196"><span class="linenos">196</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;(Optional) Local phenotype workspace directory (default is ./workspace/phen).&quot;</span><span class="p">,</span>
-</span><span id="L-197"><a href="#L-197"><span class="linenos">197</span></a>    <span class="p">)</span>
-</span><span id="L-198"><a href="#L-198"><span class="linenos">198</span></a>    <span class="n">phen_validate_parser</span><span class="o">.</span><span class="n">set_defaults</span><span class="p">(</span><span class="n">func</span><span class="o">=</span><span class="n">phen_validate</span><span class="p">)</span>
-</span><span id="L-199"><a href="#L-199"><span class="linenos">199</span></a>
-</span><span id="L-200"><a href="#L-200"><span class="linenos">200</span></a>    <span class="c1"># phen map</span>
-</span><span id="L-201"><a href="#L-201"><span class="linenos">201</span></a>    <span class="n">phen_map_parser</span> <span class="o">=</span> <span class="n">phen_subparsers</span><span class="o">.</span><span class="n">add_parser</span><span class="p">(</span><span class="s2">&quot;map&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Process phen mapping&quot;</span><span class="p">)</span>
-</span><span id="L-202"><a href="#L-202"><span class="linenos">202</span></a>    <span class="n">phen_map_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
-</span><span id="L-203"><a href="#L-203"><span class="linenos">203</span></a>        <span class="s2">&quot;-d&quot;</span><span class="p">,</span>
-</span><span id="L-204"><a href="#L-204"><span class="linenos">204</span></a>        <span class="s2">&quot;--phen-dir&quot;</span><span class="p">,</span>
-</span><span id="L-205"><a href="#L-205"><span class="linenos">205</span></a>        <span class="nb">type</span><span class="o">=</span><span class="nb">str</span><span class="p">,</span>
-</span><span id="L-206"><a href="#L-206"><span class="linenos">206</span></a>        <span class="n">default</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">phen</span><span class="o">.</span><span class="n">DEFAULT_PHEN_PATH</span><span class="o">.</span><span class="n">resolve</span><span class="p">()),</span>
-</span><span id="L-207"><a href="#L-207"><span class="linenos">207</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;(Optional) Local phenotype workspace directory (default is ./workspace/phen).&quot;</span><span class="p">,</span>
-</span><span id="L-208"><a href="#L-208"><span class="linenos">208</span></a>    <span class="p">)</span>
-</span><span id="L-209"><a href="#L-209"><span class="linenos">209</span></a>    <span class="n">phen_map_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
-</span><span id="L-210"><a href="#L-210"><span class="linenos">210</span></a>        <span class="s2">&quot;-t&quot;</span><span class="p">,</span>
-</span><span id="L-211"><a href="#L-211"><span class="linenos">211</span></a>        <span class="s2">&quot;--target-coding&quot;</span><span class="p">,</span>
-</span><span id="L-212"><a href="#L-212"><span class="linenos">212</span></a>        <span class="n">choices</span><span class="o">=</span><span class="n">parse</span><span class="o">.</span><span class="n">SUPPORTED_CODE_TYPES</span><span class="p">,</span>
-</span><span id="L-213"><a href="#L-213"><span class="linenos">213</span></a>        <span class="n">help</span><span class="o">=</span><span class="sa">f</span><span class="s2">&quot;Specify the target coding </span><span class="si">{</span><span class="n">parse</span><span class="o">.</span><span class="n">SUPPORTED_CODE_TYPES</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="L-214"><a href="#L-214"><span class="linenos">214</span></a>    <span class="p">)</span>
-</span><span id="L-215"><a href="#L-215"><span class="linenos">215</span></a>    <span class="n">phen_map_parser</span><span class="o">.</span><span class="n">set_defaults</span><span class="p">(</span><span class="n">func</span><span class="o">=</span><span class="n">phen_map</span><span class="p">)</span>
-</span><span id="L-216"><a href="#L-216"><span class="linenos">216</span></a>
-</span><span id="L-217"><a href="#L-217"><span class="linenos">217</span></a>    <span class="c1"># phen export</span>
-</span><span id="L-218"><a href="#L-218"><span class="linenos">218</span></a>    <span class="n">phen_export_parser</span> <span class="o">=</span> <span class="n">phen_subparsers</span><span class="o">.</span><span class="n">add_parser</span><span class="p">(</span>
-</span><span id="L-219"><a href="#L-219"><span class="linenos">219</span></a>        <span class="s2">&quot;export&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Export phen to OMOP database&quot;</span>
-</span><span id="L-220"><a href="#L-220"><span class="linenos">220</span></a>    <span class="p">)</span>
-</span><span id="L-221"><a href="#L-221"><span class="linenos">221</span></a>    <span class="n">phen_export_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
-</span><span id="L-222"><a href="#L-222"><span class="linenos">222</span></a>        <span class="s2">&quot;-d&quot;</span><span class="p">,</span>
-</span><span id="L-223"><a href="#L-223"><span class="linenos">223</span></a>        <span class="s2">&quot;--phen-dir&quot;</span><span class="p">,</span>
-</span><span id="L-224"><a href="#L-224"><span class="linenos">224</span></a>        <span class="nb">type</span><span class="o">=</span><span class="nb">str</span><span class="p">,</span>
-</span><span id="L-225"><a href="#L-225"><span class="linenos">225</span></a>        <span class="n">default</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">phen</span><span class="o">.</span><span class="n">DEFAULT_PHEN_PATH</span><span class="o">.</span><span class="n">resolve</span><span class="p">()),</span>
-</span><span id="L-226"><a href="#L-226"><span class="linenos">226</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;(Optional) Local phenotype workspace directory (default is ./workspace/phen).&quot;</span><span class="p">,</span>
-</span><span id="L-227"><a href="#L-227"><span class="linenos">227</span></a>    <span class="p">)</span>
-</span><span id="L-228"><a href="#L-228"><span class="linenos">228</span></a>    <span class="n">phen_export_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
-</span><span id="L-229"><a href="#L-229"><span class="linenos">229</span></a>        <span class="s2">&quot;-v&quot;</span><span class="p">,</span>
-</span><span id="L-230"><a href="#L-230"><span class="linenos">230</span></a>        <span class="s2">&quot;--version&quot;</span><span class="p">,</span>
-</span><span id="L-231"><a href="#L-231"><span class="linenos">231</span></a>        <span class="nb">type</span><span class="o">=</span><span class="nb">str</span><span class="p">,</span>
-</span><span id="L-232"><a href="#L-232"><span class="linenos">232</span></a>        <span class="n">default</span><span class="o">=</span><span class="s2">&quot;latest&quot;</span><span class="p">,</span>
-</span><span id="L-233"><a href="#L-233"><span class="linenos">233</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Phenotype version to export, defaults to the latest version&quot;</span><span class="p">,</span>
-</span><span id="L-234"><a href="#L-234"><span class="linenos">234</span></a>    <span class="p">)</span>
-</span><span id="L-235"><a href="#L-235"><span class="linenos">235</span></a>    <span class="n">phen_export_parser</span><span class="o">.</span><span class="n">set_defaults</span><span class="p">(</span><span class="n">func</span><span class="o">=</span><span class="n">phen_export</span><span class="p">)</span>
-</span><span id="L-236"><a href="#L-236"><span class="linenos">236</span></a>
-</span><span id="L-237"><a href="#L-237"><span class="linenos">237</span></a>    <span class="c1"># phen publish</span>
-</span><span id="L-238"><a href="#L-238"><span class="linenos">238</span></a>    <span class="n">phen_publish_parser</span> <span class="o">=</span> <span class="n">phen_subparsers</span><span class="o">.</span><span class="n">add_parser</span><span class="p">(</span>
-</span><span id="L-239"><a href="#L-239"><span class="linenos">239</span></a>        <span class="s2">&quot;publish&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Publish phenotype configuration&quot;</span>
-</span><span id="L-240"><a href="#L-240"><span class="linenos">240</span></a>    <span class="p">)</span>
-</span><span id="L-241"><a href="#L-241"><span class="linenos">241</span></a>    <span class="n">phen_publish_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
-</span><span id="L-242"><a href="#L-242"><span class="linenos">242</span></a>        <span class="s2">&quot;-d&quot;</span><span class="p">,</span>
-</span><span id="L-243"><a href="#L-243"><span class="linenos">243</span></a>        <span class="s2">&quot;--phen-dir&quot;</span><span class="p">,</span>
-</span><span id="L-244"><a href="#L-244"><span class="linenos">244</span></a>        <span class="nb">type</span><span class="o">=</span><span class="nb">str</span><span class="p">,</span>
-</span><span id="L-245"><a href="#L-245"><span class="linenos">245</span></a>        <span class="n">default</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">phen</span><span class="o">.</span><span class="n">DEFAULT_PHEN_PATH</span><span class="o">.</span><span class="n">resolve</span><span class="p">()),</span>
-</span><span id="L-246"><a href="#L-246"><span class="linenos">246</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;(Optional) Local phenotype workspace directory (default is ./workspace/phen).&quot;</span><span class="p">,</span>
-</span><span id="L-247"><a href="#L-247"><span class="linenos">247</span></a>    <span class="p">)</span>
-</span><span id="L-248"><a href="#L-248"><span class="linenos">248</span></a>    <span class="n">phen_publish_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
-</span><span id="L-249"><a href="#L-249"><span class="linenos">249</span></a>        <span class="s2">&quot;-i&quot;</span><span class="p">,</span>
-</span><span id="L-250"><a href="#L-250"><span class="linenos">250</span></a>        <span class="s2">&quot;--increment&quot;</span><span class="p">,</span>
-</span><span id="L-251"><a href="#L-251"><span class="linenos">251</span></a>        <span class="nb">type</span><span class="o">=</span><span class="nb">str</span><span class="p">,</span>
-</span><span id="L-252"><a href="#L-252"><span class="linenos">252</span></a>        <span class="n">default</span><span class="o">=</span><span class="n">phen</span><span class="o">.</span><span class="n">DEFAULT_VERSION_INC</span><span class="p">,</span>
-</span><span id="L-253"><a href="#L-253"><span class="linenos">253</span></a>        <span class="n">choices</span><span class="o">=</span><span class="n">phen</span><span class="o">.</span><span class="n">SEMANTIC_VERSION_TYPES</span><span class="p">,</span>
-</span><span id="L-254"><a href="#L-254"><span class="linenos">254</span></a>        <span class="n">help</span><span class="o">=</span><span class="sa">f</span><span class="s2">&quot;Version increment: </span><span class="si">{</span><span class="n">phen</span><span class="o">.</span><span class="n">SEMANTIC_VERSION_TYPES</span><span class="si">}</span><span class="s2">, default is </span><span class="si">{</span><span class="n">phen</span><span class="o">.</span><span class="n">DEFAULT_VERSION_INC</span><span class="si">}</span><span class="s2"> increment&quot;</span><span class="p">,</span>
-</span><span id="L-255"><a href="#L-255"><span class="linenos">255</span></a>    <span class="p">)</span>
-</span><span id="L-256"><a href="#L-256"><span class="linenos">256</span></a>    <span class="n">phen_publish_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
-</span><span id="L-257"><a href="#L-257"><span class="linenos">257</span></a>        <span class="s2">&quot;-m&quot;</span><span class="p">,</span> <span class="s2">&quot;--msg&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Message to include with the published version&quot;</span>
-</span><span id="L-258"><a href="#L-258"><span class="linenos">258</span></a>    <span class="p">)</span>
-</span><span id="L-259"><a href="#L-259"><span class="linenos">259</span></a>    <span class="n">phen_publish_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
-</span><span id="L-260"><a href="#L-260"><span class="linenos">260</span></a>        <span class="s2">&quot;-r&quot;</span><span class="p">,</span> <span class="s2">&quot;--remote_url&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;URL to remote git repository&quot;</span>
-</span><span id="L-261"><a href="#L-261"><span class="linenos">261</span></a>    <span class="p">)</span>
-</span><span id="L-262"><a href="#L-262"><span class="linenos">262</span></a>    <span class="n">phen_publish_parser</span><span class="o">.</span><span class="n">set_defaults</span><span class="p">(</span><span class="n">func</span><span class="o">=</span><span class="n">phen_publish</span><span class="p">)</span>
-</span><span id="L-263"><a href="#L-263"><span class="linenos">263</span></a>
-</span><span id="L-264"><a href="#L-264"><span class="linenos">264</span></a>    <span class="c1"># phen copy</span>
-</span><span id="L-265"><a href="#L-265"><span class="linenos">265</span></a>    <span class="n">phen_copy_parser</span> <span class="o">=</span> <span class="n">phen_subparsers</span><span class="o">.</span><span class="n">add_parser</span><span class="p">(</span>
-</span><span id="L-266"><a href="#L-266"><span class="linenos">266</span></a>        <span class="s2">&quot;copy&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Publish phenotype configuration&quot;</span>
-</span><span id="L-267"><a href="#L-267"><span class="linenos">267</span></a>    <span class="p">)</span>
-</span><span id="L-268"><a href="#L-268"><span class="linenos">268</span></a>    <span class="n">phen_copy_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
-</span><span id="L-269"><a href="#L-269"><span class="linenos">269</span></a>        <span class="s2">&quot;-d&quot;</span><span class="p">,</span>
-</span><span id="L-270"><a href="#L-270"><span class="linenos">270</span></a>        <span class="s2">&quot;--phen-dir&quot;</span><span class="p">,</span>
-</span><span id="L-271"><a href="#L-271"><span class="linenos">271</span></a>        <span class="nb">type</span><span class="o">=</span><span class="nb">str</span><span class="p">,</span>
-</span><span id="L-272"><a href="#L-272"><span class="linenos">272</span></a>        <span class="n">default</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">phen</span><span class="o">.</span><span class="n">DEFAULT_PHEN_PATH</span><span class="o">.</span><span class="n">resolve</span><span class="p">()),</span>
-</span><span id="L-273"><a href="#L-273"><span class="linenos">273</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;(Optional) Local phenotype workspace directory (default is ./workspace/phen).&quot;</span><span class="p">,</span>
-</span><span id="L-274"><a href="#L-274"><span class="linenos">274</span></a>    <span class="p">)</span>
-</span><span id="L-275"><a href="#L-275"><span class="linenos">275</span></a>    <span class="n">phen_copy_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
-</span><span id="L-276"><a href="#L-276"><span class="linenos">276</span></a>        <span class="s2">&quot;-td&quot;</span><span class="p">,</span>
-</span><span id="L-277"><a href="#L-277"><span class="linenos">277</span></a>        <span class="s2">&quot;--target-dir&quot;</span><span class="p">,</span>
-</span><span id="L-278"><a href="#L-278"><span class="linenos">278</span></a>        <span class="nb">type</span><span class="o">=</span><span class="nb">str</span><span class="p">,</span>
-</span><span id="L-279"><a href="#L-279"><span class="linenos">279</span></a>        <span class="n">default</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">DEFAULT_WORKSPACE_PATH</span><span class="o">.</span><span class="n">resolve</span><span class="p">()),</span>
-</span><span id="L-280"><a href="#L-280"><span class="linenos">280</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Target directory for the copy&quot;</span><span class="p">,</span>
-</span><span id="L-281"><a href="#L-281"><span class="linenos">281</span></a>    <span class="p">)</span>
-</span><span id="L-282"><a href="#L-282"><span class="linenos">282</span></a>    <span class="n">phen_copy_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
-</span><span id="L-283"><a href="#L-283"><span class="linenos">283</span></a>        <span class="s2">&quot;-v&quot;</span><span class="p">,</span>
-</span><span id="L-284"><a href="#L-284"><span class="linenos">284</span></a>        <span class="s2">&quot;--version&quot;</span><span class="p">,</span>
-</span><span id="L-285"><a href="#L-285"><span class="linenos">285</span></a>        <span class="nb">type</span><span class="o">=</span><span class="nb">str</span><span class="p">,</span>
-</span><span id="L-286"><a href="#L-286"><span class="linenos">286</span></a>        <span class="n">default</span><span class="o">=</span><span class="s2">&quot;latest&quot;</span><span class="p">,</span>
-</span><span id="L-287"><a href="#L-287"><span class="linenos">287</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Phenotype version to copy, defaults to the latest version&quot;</span><span class="p">,</span>
-</span><span id="L-288"><a href="#L-288"><span class="linenos">288</span></a>    <span class="p">)</span>
-</span><span id="L-289"><a href="#L-289"><span class="linenos">289</span></a>    <span class="n">phen_copy_parser</span><span class="o">.</span><span class="n">set_defaults</span><span class="p">(</span><span class="n">func</span><span class="o">=</span><span class="n">phen_copy</span><span class="p">)</span>
-</span><span id="L-290"><a href="#L-290"><span class="linenos">290</span></a>
-</span><span id="L-291"><a href="#L-291"><span class="linenos">291</span></a>    <span class="c1"># phen diff</span>
-</span><span id="L-292"><a href="#L-292"><span class="linenos">292</span></a>    <span class="n">phen_diff_parser</span> <span class="o">=</span> <span class="n">phen_subparsers</span><span class="o">.</span><span class="n">add_parser</span><span class="p">(</span>
-</span><span id="L-293"><a href="#L-293"><span class="linenos">293</span></a>        <span class="s2">&quot;diff&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Publish phenotype configuration&quot;</span>
-</span><span id="L-294"><a href="#L-294"><span class="linenos">294</span></a>    <span class="p">)</span>
-</span><span id="L-295"><a href="#L-295"><span class="linenos">295</span></a>    <span class="n">phen_diff_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
-</span><span id="L-296"><a href="#L-296"><span class="linenos">296</span></a>        <span class="s2">&quot;-d&quot;</span><span class="p">,</span>
-</span><span id="L-297"><a href="#L-297"><span class="linenos">297</span></a>        <span class="s2">&quot;--phen-dir&quot;</span><span class="p">,</span>
-</span><span id="L-298"><a href="#L-298"><span class="linenos">298</span></a>        <span class="nb">type</span><span class="o">=</span><span class="nb">str</span><span class="p">,</span>
-</span><span id="L-299"><a href="#L-299"><span class="linenos">299</span></a>        <span class="n">default</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">phen</span><span class="o">.</span><span class="n">DEFAULT_PHEN_PATH</span><span class="o">.</span><span class="n">resolve</span><span class="p">()),</span>
-</span><span id="L-300"><a href="#L-300"><span class="linenos">300</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;(Optional) Local phenotype workspace directory (default is ./workspace/phen).&quot;</span><span class="p">,</span>
-</span><span id="L-301"><a href="#L-301"><span class="linenos">301</span></a>    <span class="p">)</span>
-</span><span id="L-302"><a href="#L-302"><span class="linenos">302</span></a>    <span class="n">phen_diff_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
-</span><span id="L-303"><a href="#L-303"><span class="linenos">303</span></a>        <span class="s2">&quot;-v&quot;</span><span class="p">,</span>
-</span><span id="L-304"><a href="#L-304"><span class="linenos">304</span></a>        <span class="s2">&quot;--version&quot;</span><span class="p">,</span>
-</span><span id="L-305"><a href="#L-305"><span class="linenos">305</span></a>        <span class="n">default</span><span class="o">=</span><span class="s2">&quot;latest&quot;</span><span class="p">,</span>
-</span><span id="L-306"><a href="#L-306"><span class="linenos">306</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Phenotype version to compare with an old version, defaults to the HEAD of the workspace directory&quot;</span><span class="p">,</span>
-</span><span id="L-307"><a href="#L-307"><span class="linenos">307</span></a>    <span class="p">)</span>
-</span><span id="L-308"><a href="#L-308"><span class="linenos">308</span></a>    <span class="n">phen_diff_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
-</span><span id="L-309"><a href="#L-309"><span class="linenos">309</span></a>        <span class="s2">&quot;-od&quot;</span><span class="p">,</span>
-</span><span id="L-310"><a href="#L-310"><span class="linenos">310</span></a>        <span class="s2">&quot;--old-phen-dir&quot;</span><span class="p">,</span>
-</span><span id="L-311"><a href="#L-311"><span class="linenos">311</span></a>        <span class="nb">type</span><span class="o">=</span><span class="nb">str</span><span class="p">,</span>
-</span><span id="L-312"><a href="#L-312"><span class="linenos">312</span></a>        <span class="n">default</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">phen</span><span class="o">.</span><span class="n">DEFAULT_PHEN_PATH</span><span class="o">.</span><span class="n">resolve</span><span class="p">()),</span>
-</span><span id="L-313"><a href="#L-313"><span class="linenos">313</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Directory for the old phenotype version, defaults to workspace directory&quot;</span><span class="p">,</span>
-</span><span id="L-314"><a href="#L-314"><span class="linenos">314</span></a>    <span class="p">)</span>
-</span><span id="L-315"><a href="#L-315"><span class="linenos">315</span></a>    <span class="n">phen_diff_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
-</span><span id="L-316"><a href="#L-316"><span class="linenos">316</span></a>        <span class="s2">&quot;-ov&quot;</span><span class="p">,</span>
-</span><span id="L-317"><a href="#L-317"><span class="linenos">317</span></a>        <span class="s2">&quot;--old-version&quot;</span><span class="p">,</span>
-</span><span id="L-318"><a href="#L-318"><span class="linenos">318</span></a>        <span class="n">required</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
-</span><span id="L-319"><a href="#L-319"><span class="linenos">319</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Old phenotype version to compare with the changed version&quot;</span><span class="p">,</span>
-</span><span id="L-320"><a href="#L-320"><span class="linenos">320</span></a>    <span class="p">)</span>
-</span><span id="L-321"><a href="#L-321"><span class="linenos">321</span></a>    <span class="n">phen_diff_parser</span><span class="o">.</span><span class="n">set_defaults</span><span class="p">(</span><span class="n">func</span><span class="o">=</span><span class="n">phen_diff</span><span class="p">)</span>
-</span><span id="L-322"><a href="#L-322"><span class="linenos">322</span></a>
-</span><span id="L-323"><a href="#L-323"><span class="linenos">323</span></a>    <span class="c1"># Parse arguments</span>
-</span><span id="L-324"><a href="#L-324"><span class="linenos">324</span></a>    <span class="n">args</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">parse_args</span><span class="p">()</span>
-</span><span id="L-325"><a href="#L-325"><span class="linenos">325</span></a>
-</span><span id="L-326"><a href="#L-326"><span class="linenos">326</span></a>    <span class="c1"># setup logging</span>
-</span><span id="L-327"><a href="#L-327"><span class="linenos">327</span></a>    <span class="k">if</span> <span class="n">args</span><span class="o">.</span><span class="n">debug</span><span class="p">:</span>
-</span><span id="L-328"><a href="#L-328"><span class="linenos">328</span></a>        <span class="n">lc</span><span class="o">.</span><span class="n">set_log_level</span><span class="p">(</span><span class="n">logging</span><span class="o">.</span><span class="n">DEBUG</span><span class="p">)</span>
-</span><span id="L-329"><a href="#L-329"><span class="linenos">329</span></a>
-</span><span id="L-330"><a href="#L-330"><span class="linenos">330</span></a>    <span class="c1"># Call the function associated with the command</span>
-</span><span id="L-331"><a href="#L-331"><span class="linenos">331</span></a>    <span class="n">args</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
-</span><span id="L-332"><a href="#L-332"><span class="linenos">332</span></a>
-</span><span id="L-333"><a href="#L-333"><span class="linenos">333</span></a>
-</span><span id="L-334"><a href="#L-334"><span class="linenos">334</span></a><span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s2">&quot;__main__&quot;</span><span class="p">:</span>
-</span><span id="L-335"><a href="#L-335"><span class="linenos">335</span></a>    <span class="n">main</span><span class="p">()</span>
+</span><span id="L-174"><a href="#L-174"><span class="linenos">174</span></a>        <span class="s2">&quot;-r&quot;</span><span class="p">,</span>
+</span><span id="L-175"><a href="#L-175"><span class="linenos">175</span></a>        <span class="s2">&quot;--remote_url&quot;</span><span class="p">,</span>
+</span><span id="L-176"><a href="#L-176"><span class="linenos">176</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;(Optional) URL to repository where the forked phenotype will be published.&quot;</span><span class="p">,</span>
+</span><span id="L-177"><a href="#L-177"><span class="linenos">177</span></a>    <span class="p">)</span>
+</span><span id="L-178"><a href="#L-178"><span class="linenos">178</span></a>    <span class="n">phen_fork_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
+</span><span id="L-179"><a href="#L-179"><span class="linenos">179</span></a>        <span class="s2">&quot;-u&quot;</span><span class="p">,</span>
+</span><span id="L-180"><a href="#L-180"><span class="linenos">180</span></a>        <span class="s2">&quot;--upstream-url&quot;</span><span class="p">,</span>
+</span><span id="L-181"><a href="#L-181"><span class="linenos">181</span></a>        <span class="n">required</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+</span><span id="L-182"><a href="#L-182"><span class="linenos">182</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;(Required) URL to the phenotype repository to fork.&quot;</span><span class="p">,</span>
+</span><span id="L-183"><a href="#L-183"><span class="linenos">183</span></a>    <span class="p">)</span>
+</span><span id="L-184"><a href="#L-184"><span class="linenos">184</span></a>    <span class="n">phen_fork_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
+</span><span id="L-185"><a href="#L-185"><span class="linenos">185</span></a>        <span class="s2">&quot;-v&quot;</span><span class="p">,</span>
+</span><span id="L-186"><a href="#L-186"><span class="linenos">186</span></a>        <span class="s2">&quot;--upstream-version&quot;</span><span class="p">,</span>
+</span><span id="L-187"><a href="#L-187"><span class="linenos">187</span></a>        <span class="n">required</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+</span><span id="L-188"><a href="#L-188"><span class="linenos">188</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;(Required) Phenotype version to fork.&quot;</span><span class="p">,</span>
+</span><span id="L-189"><a href="#L-189"><span class="linenos">189</span></a>    <span class="p">)</span>
+</span><span id="L-190"><a href="#L-190"><span class="linenos">190</span></a>    <span class="n">phen_fork_parser</span><span class="o">.</span><span class="n">set_defaults</span><span class="p">(</span><span class="n">func</span><span class="o">=</span><span class="n">_phen_fork</span><span class="p">)</span>
+</span><span id="L-191"><a href="#L-191"><span class="linenos">191</span></a>
+</span><span id="L-192"><a href="#L-192"><span class="linenos">192</span></a>    <span class="c1"># phen validate</span>
+</span><span id="L-193"><a href="#L-193"><span class="linenos">193</span></a>    <span class="n">phen_validate_parser</span> <span class="o">=</span> <span class="n">phen_subparsers</span><span class="o">.</span><span class="n">add_parser</span><span class="p">(</span>
+</span><span id="L-194"><a href="#L-194"><span class="linenos">194</span></a>        <span class="s2">&quot;validate&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Validate phenotype configuration&quot;</span>
+</span><span id="L-195"><a href="#L-195"><span class="linenos">195</span></a>    <span class="p">)</span>
+</span><span id="L-196"><a href="#L-196"><span class="linenos">196</span></a>    <span class="n">phen_validate_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
+</span><span id="L-197"><a href="#L-197"><span class="linenos">197</span></a>        <span class="s2">&quot;-d&quot;</span><span class="p">,</span>
+</span><span id="L-198"><a href="#L-198"><span class="linenos">198</span></a>        <span class="s2">&quot;--phen-dir&quot;</span><span class="p">,</span>
+</span><span id="L-199"><a href="#L-199"><span class="linenos">199</span></a>        <span class="nb">type</span><span class="o">=</span><span class="nb">str</span><span class="p">,</span>
+</span><span id="L-200"><a href="#L-200"><span class="linenos">200</span></a>        <span class="n">default</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">phen</span><span class="o">.</span><span class="n">DEFAULT_PHEN_PATH</span><span class="o">.</span><span class="n">resolve</span><span class="p">()),</span>
+</span><span id="L-201"><a href="#L-201"><span class="linenos">201</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;(Optional) Local phenotype workspace directory (default is ./workspace/phen).&quot;</span><span class="p">,</span>
+</span><span id="L-202"><a href="#L-202"><span class="linenos">202</span></a>    <span class="p">)</span>
+</span><span id="L-203"><a href="#L-203"><span class="linenos">203</span></a>    <span class="n">phen_validate_parser</span><span class="o">.</span><span class="n">set_defaults</span><span class="p">(</span><span class="n">func</span><span class="o">=</span><span class="n">_phen_validate</span><span class="p">)</span>
+</span><span id="L-204"><a href="#L-204"><span class="linenos">204</span></a>
+</span><span id="L-205"><a href="#L-205"><span class="linenos">205</span></a>    <span class="c1"># phen map</span>
+</span><span id="L-206"><a href="#L-206"><span class="linenos">206</span></a>    <span class="n">phen_map_parser</span> <span class="o">=</span> <span class="n">phen_subparsers</span><span class="o">.</span><span class="n">add_parser</span><span class="p">(</span><span class="s2">&quot;map&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Process phen mapping&quot;</span><span class="p">)</span>
+</span><span id="L-207"><a href="#L-207"><span class="linenos">207</span></a>    <span class="n">phen_map_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
+</span><span id="L-208"><a href="#L-208"><span class="linenos">208</span></a>        <span class="s2">&quot;-d&quot;</span><span class="p">,</span>
+</span><span id="L-209"><a href="#L-209"><span class="linenos">209</span></a>        <span class="s2">&quot;--phen-dir&quot;</span><span class="p">,</span>
+</span><span id="L-210"><a href="#L-210"><span class="linenos">210</span></a>        <span class="nb">type</span><span class="o">=</span><span class="nb">str</span><span class="p">,</span>
+</span><span id="L-211"><a href="#L-211"><span class="linenos">211</span></a>        <span class="n">default</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">phen</span><span class="o">.</span><span class="n">DEFAULT_PHEN_PATH</span><span class="o">.</span><span class="n">resolve</span><span class="p">()),</span>
+</span><span id="L-212"><a href="#L-212"><span class="linenos">212</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;(Optional) Local phenotype workspace directory (default is ./workspace/phen).&quot;</span><span class="p">,</span>
+</span><span id="L-213"><a href="#L-213"><span class="linenos">213</span></a>    <span class="p">)</span>
+</span><span id="L-214"><a href="#L-214"><span class="linenos">214</span></a>    <span class="n">phen_map_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
+</span><span id="L-215"><a href="#L-215"><span class="linenos">215</span></a>        <span class="s2">&quot;-t&quot;</span><span class="p">,</span>
+</span><span id="L-216"><a href="#L-216"><span class="linenos">216</span></a>        <span class="s2">&quot;--target-coding&quot;</span><span class="p">,</span>
+</span><span id="L-217"><a href="#L-217"><span class="linenos">217</span></a>        <span class="n">choices</span><span class="o">=</span><span class="n">parse</span><span class="o">.</span><span class="n">SUPPORTED_CODE_TYPES</span><span class="p">,</span>
+</span><span id="L-218"><a href="#L-218"><span class="linenos">218</span></a>        <span class="n">help</span><span class="o">=</span><span class="sa">f</span><span class="s2">&quot;Specify the target coding </span><span class="si">{</span><span class="n">parse</span><span class="o">.</span><span class="n">SUPPORTED_CODE_TYPES</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="L-219"><a href="#L-219"><span class="linenos">219</span></a>    <span class="p">)</span>
+</span><span id="L-220"><a href="#L-220"><span class="linenos">220</span></a>    <span class="n">phen_map_parser</span><span class="o">.</span><span class="n">set_defaults</span><span class="p">(</span><span class="n">func</span><span class="o">=</span><span class="n">_phen_map</span><span class="p">)</span>
+</span><span id="L-221"><a href="#L-221"><span class="linenos">221</span></a>
+</span><span id="L-222"><a href="#L-222"><span class="linenos">222</span></a>    <span class="c1"># phen export</span>
+</span><span id="L-223"><a href="#L-223"><span class="linenos">223</span></a>    <span class="n">phen_export_parser</span> <span class="o">=</span> <span class="n">phen_subparsers</span><span class="o">.</span><span class="n">add_parser</span><span class="p">(</span>
+</span><span id="L-224"><a href="#L-224"><span class="linenos">224</span></a>        <span class="s2">&quot;export&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Export phen to OMOP database&quot;</span>
+</span><span id="L-225"><a href="#L-225"><span class="linenos">225</span></a>    <span class="p">)</span>
+</span><span id="L-226"><a href="#L-226"><span class="linenos">226</span></a>    <span class="n">phen_export_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
+</span><span id="L-227"><a href="#L-227"><span class="linenos">227</span></a>        <span class="s2">&quot;-d&quot;</span><span class="p">,</span>
+</span><span id="L-228"><a href="#L-228"><span class="linenos">228</span></a>        <span class="s2">&quot;--phen-dir&quot;</span><span class="p">,</span>
+</span><span id="L-229"><a href="#L-229"><span class="linenos">229</span></a>        <span class="nb">type</span><span class="o">=</span><span class="nb">str</span><span class="p">,</span>
+</span><span id="L-230"><a href="#L-230"><span class="linenos">230</span></a>        <span class="n">default</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">phen</span><span class="o">.</span><span class="n">DEFAULT_PHEN_PATH</span><span class="o">.</span><span class="n">resolve</span><span class="p">()),</span>
+</span><span id="L-231"><a href="#L-231"><span class="linenos">231</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;(Optional) Local phenotype workspace directory (default is ./workspace/phen).&quot;</span><span class="p">,</span>
+</span><span id="L-232"><a href="#L-232"><span class="linenos">232</span></a>    <span class="p">)</span>
+</span><span id="L-233"><a href="#L-233"><span class="linenos">233</span></a>    <span class="n">phen_export_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
+</span><span id="L-234"><a href="#L-234"><span class="linenos">234</span></a>        <span class="s2">&quot;-v&quot;</span><span class="p">,</span>
+</span><span id="L-235"><a href="#L-235"><span class="linenos">235</span></a>        <span class="s2">&quot;--version&quot;</span><span class="p">,</span>
+</span><span id="L-236"><a href="#L-236"><span class="linenos">236</span></a>        <span class="nb">type</span><span class="o">=</span><span class="nb">str</span><span class="p">,</span>
+</span><span id="L-237"><a href="#L-237"><span class="linenos">237</span></a>        <span class="n">default</span><span class="o">=</span><span class="s2">&quot;latest&quot;</span><span class="p">,</span>
+</span><span id="L-238"><a href="#L-238"><span class="linenos">238</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Phenotype version to export, defaults to the latest version&quot;</span><span class="p">,</span>
+</span><span id="L-239"><a href="#L-239"><span class="linenos">239</span></a>    <span class="p">)</span>
+</span><span id="L-240"><a href="#L-240"><span class="linenos">240</span></a>    <span class="n">phen_export_parser</span><span class="o">.</span><span class="n">set_defaults</span><span class="p">(</span><span class="n">func</span><span class="o">=</span><span class="n">_phen_export</span><span class="p">)</span>
+</span><span id="L-241"><a href="#L-241"><span class="linenos">241</span></a>
+</span><span id="L-242"><a href="#L-242"><span class="linenos">242</span></a>    <span class="c1"># phen publish</span>
+</span><span id="L-243"><a href="#L-243"><span class="linenos">243</span></a>    <span class="n">phen_publish_parser</span> <span class="o">=</span> <span class="n">phen_subparsers</span><span class="o">.</span><span class="n">add_parser</span><span class="p">(</span>
+</span><span id="L-244"><a href="#L-244"><span class="linenos">244</span></a>        <span class="s2">&quot;publish&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Publish phenotype configuration&quot;</span>
+</span><span id="L-245"><a href="#L-245"><span class="linenos">245</span></a>    <span class="p">)</span>
+</span><span id="L-246"><a href="#L-246"><span class="linenos">246</span></a>    <span class="n">phen_publish_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
+</span><span id="L-247"><a href="#L-247"><span class="linenos">247</span></a>        <span class="s2">&quot;-d&quot;</span><span class="p">,</span>
+</span><span id="L-248"><a href="#L-248"><span class="linenos">248</span></a>        <span class="s2">&quot;--phen-dir&quot;</span><span class="p">,</span>
+</span><span id="L-249"><a href="#L-249"><span class="linenos">249</span></a>        <span class="nb">type</span><span class="o">=</span><span class="nb">str</span><span class="p">,</span>
+</span><span id="L-250"><a href="#L-250"><span class="linenos">250</span></a>        <span class="n">default</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">phen</span><span class="o">.</span><span class="n">DEFAULT_PHEN_PATH</span><span class="o">.</span><span class="n">resolve</span><span class="p">()),</span>
+</span><span id="L-251"><a href="#L-251"><span class="linenos">251</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;(Optional) Local phenotype workspace directory (default is ./workspace/phen).&quot;</span><span class="p">,</span>
+</span><span id="L-252"><a href="#L-252"><span class="linenos">252</span></a>    <span class="p">)</span>
+</span><span id="L-253"><a href="#L-253"><span class="linenos">253</span></a>    <span class="n">phen_publish_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
+</span><span id="L-254"><a href="#L-254"><span class="linenos">254</span></a>        <span class="s2">&quot;-i&quot;</span><span class="p">,</span>
+</span><span id="L-255"><a href="#L-255"><span class="linenos">255</span></a>        <span class="s2">&quot;--increment&quot;</span><span class="p">,</span>
+</span><span id="L-256"><a href="#L-256"><span class="linenos">256</span></a>        <span class="nb">type</span><span class="o">=</span><span class="nb">str</span><span class="p">,</span>
+</span><span id="L-257"><a href="#L-257"><span class="linenos">257</span></a>        <span class="n">default</span><span class="o">=</span><span class="n">phen</span><span class="o">.</span><span class="n">DEFAULT_VERSION_INC</span><span class="p">,</span>
+</span><span id="L-258"><a href="#L-258"><span class="linenos">258</span></a>        <span class="n">choices</span><span class="o">=</span><span class="n">phen</span><span class="o">.</span><span class="n">SEMANTIC_VERSION_TYPES</span><span class="p">,</span>
+</span><span id="L-259"><a href="#L-259"><span class="linenos">259</span></a>        <span class="n">help</span><span class="o">=</span><span class="sa">f</span><span class="s2">&quot;Version increment: </span><span class="si">{</span><span class="n">phen</span><span class="o">.</span><span class="n">SEMANTIC_VERSION_TYPES</span><span class="si">}</span><span class="s2">, default is </span><span class="si">{</span><span class="n">phen</span><span class="o">.</span><span class="n">DEFAULT_VERSION_INC</span><span class="si">}</span><span class="s2"> increment&quot;</span><span class="p">,</span>
+</span><span id="L-260"><a href="#L-260"><span class="linenos">260</span></a>    <span class="p">)</span>
+</span><span id="L-261"><a href="#L-261"><span class="linenos">261</span></a>    <span class="n">phen_publish_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
+</span><span id="L-262"><a href="#L-262"><span class="linenos">262</span></a>        <span class="s2">&quot;-m&quot;</span><span class="p">,</span> <span class="s2">&quot;--msg&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Message to include with the published version&quot;</span>
+</span><span id="L-263"><a href="#L-263"><span class="linenos">263</span></a>    <span class="p">)</span>
+</span><span id="L-264"><a href="#L-264"><span class="linenos">264</span></a>    <span class="n">phen_publish_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
+</span><span id="L-265"><a href="#L-265"><span class="linenos">265</span></a>        <span class="s2">&quot;-r&quot;</span><span class="p">,</span> <span class="s2">&quot;--remote_url&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;URL to remote git repository&quot;</span>
+</span><span id="L-266"><a href="#L-266"><span class="linenos">266</span></a>    <span class="p">)</span>
+</span><span id="L-267"><a href="#L-267"><span class="linenos">267</span></a>    <span class="n">phen_publish_parser</span><span class="o">.</span><span class="n">set_defaults</span><span class="p">(</span><span class="n">func</span><span class="o">=</span><span class="n">_phen_publish</span><span class="p">)</span>
+</span><span id="L-268"><a href="#L-268"><span class="linenos">268</span></a>
+</span><span id="L-269"><a href="#L-269"><span class="linenos">269</span></a>    <span class="c1"># phen copy</span>
+</span><span id="L-270"><a href="#L-270"><span class="linenos">270</span></a>    <span class="n">phen_copy_parser</span> <span class="o">=</span> <span class="n">phen_subparsers</span><span class="o">.</span><span class="n">add_parser</span><span class="p">(</span>
+</span><span id="L-271"><a href="#L-271"><span class="linenos">271</span></a>        <span class="s2">&quot;copy&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Publish phenotype configuration&quot;</span>
+</span><span id="L-272"><a href="#L-272"><span class="linenos">272</span></a>    <span class="p">)</span>
+</span><span id="L-273"><a href="#L-273"><span class="linenos">273</span></a>    <span class="n">phen_copy_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
+</span><span id="L-274"><a href="#L-274"><span class="linenos">274</span></a>        <span class="s2">&quot;-d&quot;</span><span class="p">,</span>
+</span><span id="L-275"><a href="#L-275"><span class="linenos">275</span></a>        <span class="s2">&quot;--phen-dir&quot;</span><span class="p">,</span>
+</span><span id="L-276"><a href="#L-276"><span class="linenos">276</span></a>        <span class="nb">type</span><span class="o">=</span><span class="nb">str</span><span class="p">,</span>
+</span><span id="L-277"><a href="#L-277"><span class="linenos">277</span></a>        <span class="n">default</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">phen</span><span class="o">.</span><span class="n">DEFAULT_PHEN_PATH</span><span class="o">.</span><span class="n">resolve</span><span class="p">()),</span>
+</span><span id="L-278"><a href="#L-278"><span class="linenos">278</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;(Optional) Local phenotype workspace directory (default is ./workspace/phen).&quot;</span><span class="p">,</span>
+</span><span id="L-279"><a href="#L-279"><span class="linenos">279</span></a>    <span class="p">)</span>
+</span><span id="L-280"><a href="#L-280"><span class="linenos">280</span></a>    <span class="n">phen_copy_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
+</span><span id="L-281"><a href="#L-281"><span class="linenos">281</span></a>        <span class="s2">&quot;-td&quot;</span><span class="p">,</span>
+</span><span id="L-282"><a href="#L-282"><span class="linenos">282</span></a>        <span class="s2">&quot;--target-dir&quot;</span><span class="p">,</span>
+</span><span id="L-283"><a href="#L-283"><span class="linenos">283</span></a>        <span class="nb">type</span><span class="o">=</span><span class="nb">str</span><span class="p">,</span>
+</span><span id="L-284"><a href="#L-284"><span class="linenos">284</span></a>        <span class="n">default</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">DEFAULT_WORKSPACE_PATH</span><span class="o">.</span><span class="n">resolve</span><span class="p">()),</span>
+</span><span id="L-285"><a href="#L-285"><span class="linenos">285</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Target directory for the copy&quot;</span><span class="p">,</span>
+</span><span id="L-286"><a href="#L-286"><span class="linenos">286</span></a>    <span class="p">)</span>
+</span><span id="L-287"><a href="#L-287"><span class="linenos">287</span></a>    <span class="n">phen_copy_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
+</span><span id="L-288"><a href="#L-288"><span class="linenos">288</span></a>        <span class="s2">&quot;-v&quot;</span><span class="p">,</span>
+</span><span id="L-289"><a href="#L-289"><span class="linenos">289</span></a>        <span class="s2">&quot;--version&quot;</span><span class="p">,</span>
+</span><span id="L-290"><a href="#L-290"><span class="linenos">290</span></a>        <span class="nb">type</span><span class="o">=</span><span class="nb">str</span><span class="p">,</span>
+</span><span id="L-291"><a href="#L-291"><span class="linenos">291</span></a>        <span class="n">default</span><span class="o">=</span><span class="s2">&quot;latest&quot;</span><span class="p">,</span>
+</span><span id="L-292"><a href="#L-292"><span class="linenos">292</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Phenotype version to copy, defaults to the latest version&quot;</span><span class="p">,</span>
+</span><span id="L-293"><a href="#L-293"><span class="linenos">293</span></a>    <span class="p">)</span>
+</span><span id="L-294"><a href="#L-294"><span class="linenos">294</span></a>    <span class="n">phen_copy_parser</span><span class="o">.</span><span class="n">set_defaults</span><span class="p">(</span><span class="n">func</span><span class="o">=</span><span class="n">_phen_copy</span><span class="p">)</span>
+</span><span id="L-295"><a href="#L-295"><span class="linenos">295</span></a>
+</span><span id="L-296"><a href="#L-296"><span class="linenos">296</span></a>    <span class="c1"># phen diff</span>
+</span><span id="L-297"><a href="#L-297"><span class="linenos">297</span></a>    <span class="n">phen_diff_parser</span> <span class="o">=</span> <span class="n">phen_subparsers</span><span class="o">.</span><span class="n">add_parser</span><span class="p">(</span>
+</span><span id="L-298"><a href="#L-298"><span class="linenos">298</span></a>        <span class="s2">&quot;diff&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Publish phenotype configuration&quot;</span>
+</span><span id="L-299"><a href="#L-299"><span class="linenos">299</span></a>    <span class="p">)</span>
+</span><span id="L-300"><a href="#L-300"><span class="linenos">300</span></a>    <span class="n">phen_diff_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
+</span><span id="L-301"><a href="#L-301"><span class="linenos">301</span></a>        <span class="s2">&quot;-d&quot;</span><span class="p">,</span>
+</span><span id="L-302"><a href="#L-302"><span class="linenos">302</span></a>        <span class="s2">&quot;--phen-dir&quot;</span><span class="p">,</span>
+</span><span id="L-303"><a href="#L-303"><span class="linenos">303</span></a>        <span class="nb">type</span><span class="o">=</span><span class="nb">str</span><span class="p">,</span>
+</span><span id="L-304"><a href="#L-304"><span class="linenos">304</span></a>        <span class="n">default</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">phen</span><span class="o">.</span><span class="n">DEFAULT_PHEN_PATH</span><span class="o">.</span><span class="n">resolve</span><span class="p">()),</span>
+</span><span id="L-305"><a href="#L-305"><span class="linenos">305</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;(Optional) Local phenotype workspace directory (default is ./workspace/phen).&quot;</span><span class="p">,</span>
+</span><span id="L-306"><a href="#L-306"><span class="linenos">306</span></a>    <span class="p">)</span>
+</span><span id="L-307"><a href="#L-307"><span class="linenos">307</span></a>    <span class="n">phen_diff_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
+</span><span id="L-308"><a href="#L-308"><span class="linenos">308</span></a>        <span class="s2">&quot;-v&quot;</span><span class="p">,</span>
+</span><span id="L-309"><a href="#L-309"><span class="linenos">309</span></a>        <span class="s2">&quot;--version&quot;</span><span class="p">,</span>
+</span><span id="L-310"><a href="#L-310"><span class="linenos">310</span></a>        <span class="n">default</span><span class="o">=</span><span class="s2">&quot;latest&quot;</span><span class="p">,</span>
+</span><span id="L-311"><a href="#L-311"><span class="linenos">311</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Phenotype version to compare with an old version, defaults to the HEAD of the workspace directory&quot;</span><span class="p">,</span>
+</span><span id="L-312"><a href="#L-312"><span class="linenos">312</span></a>    <span class="p">)</span>
+</span><span id="L-313"><a href="#L-313"><span class="linenos">313</span></a>    <span class="n">phen_diff_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
+</span><span id="L-314"><a href="#L-314"><span class="linenos">314</span></a>        <span class="s2">&quot;-od&quot;</span><span class="p">,</span>
+</span><span id="L-315"><a href="#L-315"><span class="linenos">315</span></a>        <span class="s2">&quot;--old-phen-dir&quot;</span><span class="p">,</span>
+</span><span id="L-316"><a href="#L-316"><span class="linenos">316</span></a>        <span class="nb">type</span><span class="o">=</span><span class="nb">str</span><span class="p">,</span>
+</span><span id="L-317"><a href="#L-317"><span class="linenos">317</span></a>        <span class="n">default</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">phen</span><span class="o">.</span><span class="n">DEFAULT_PHEN_PATH</span><span class="o">.</span><span class="n">resolve</span><span class="p">()),</span>
+</span><span id="L-318"><a href="#L-318"><span class="linenos">318</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Directory for the old phenotype version, defaults to workspace directory&quot;</span><span class="p">,</span>
+</span><span id="L-319"><a href="#L-319"><span class="linenos">319</span></a>    <span class="p">)</span>
+</span><span id="L-320"><a href="#L-320"><span class="linenos">320</span></a>    <span class="n">phen_diff_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
+</span><span id="L-321"><a href="#L-321"><span class="linenos">321</span></a>        <span class="s2">&quot;-ov&quot;</span><span class="p">,</span>
+</span><span id="L-322"><a href="#L-322"><span class="linenos">322</span></a>        <span class="s2">&quot;--old-version&quot;</span><span class="p">,</span>
+</span><span id="L-323"><a href="#L-323"><span class="linenos">323</span></a>        <span class="n">required</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+</span><span id="L-324"><a href="#L-324"><span class="linenos">324</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Old phenotype version to compare with the changed version&quot;</span><span class="p">,</span>
+</span><span id="L-325"><a href="#L-325"><span class="linenos">325</span></a>    <span class="p">)</span>
+</span><span id="L-326"><a href="#L-326"><span class="linenos">326</span></a>    <span class="n">phen_diff_parser</span><span class="o">.</span><span class="n">set_defaults</span><span class="p">(</span><span class="n">func</span><span class="o">=</span><span class="n">_phen_diff</span><span class="p">)</span>
+</span><span id="L-327"><a href="#L-327"><span class="linenos">327</span></a>
+</span><span id="L-328"><a href="#L-328"><span class="linenos">328</span></a>    <span class="c1"># Parse arguments</span>
+</span><span id="L-329"><a href="#L-329"><span class="linenos">329</span></a>    <span class="n">args</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">parse_args</span><span class="p">()</span>
+</span><span id="L-330"><a href="#L-330"><span class="linenos">330</span></a>
+</span><span id="L-331"><a href="#L-331"><span class="linenos">331</span></a>    <span class="c1"># setup logging</span>
+</span><span id="L-332"><a href="#L-332"><span class="linenos">332</span></a>    <span class="k">if</span> <span class="n">args</span><span class="o">.</span><span class="n">debug</span><span class="p">:</span>
+</span><span id="L-333"><a href="#L-333"><span class="linenos">333</span></a>        <span class="n">lc</span><span class="o">.</span><span class="n">set_log_level</span><span class="p">(</span><span class="n">logging</span><span class="o">.</span><span class="n">DEBUG</span><span class="p">)</span>
+</span><span id="L-334"><a href="#L-334"><span class="linenos">334</span></a>
+</span><span id="L-335"><a href="#L-335"><span class="linenos">335</span></a>    <span class="c1"># Call the function associated with the command</span>
+</span><span id="L-336"><a href="#L-336"><span class="linenos">336</span></a>    <span class="n">args</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
+</span><span id="L-337"><a href="#L-337"><span class="linenos">337</span></a>
+</span><span id="L-338"><a href="#L-338"><span class="linenos">338</span></a>
+</span><span id="L-339"><a href="#L-339"><span class="linenos">339</span></a><span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s2">&quot;__main__&quot;</span><span class="p">:</span>
+</span><span id="L-340"><a href="#L-340"><span class="linenos">340</span></a>    <span class="n">main</span><span class="p">()</span>
 </span></pre></div>
 
 
             </section>
-                <section id="logger">
-                    <div class="attr variable">
-            <span class="name">logger</span>        =
-<span class="default_value">&lt;Logger acmc_logger (INFO)&gt;</span>
-
-        
-    </div>
-    <a class="headerlink" href="#logger"></a>
-    
-    
-
-                </section>
                 <section id="DEFAULT_WORKSPACE_PATH">
                     <div class="attr variable">
             <span class="name">DEFAULT_WORKSPACE_PATH</span>        =
@@ -456,274 +414,7 @@
     </div>
     <a class="headerlink" href="#DEFAULT_WORKSPACE_PATH"></a>
     
-    
-
-                </section>
-                <section id="trud_install">
-                            <input id="trud_install-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
-<div class="attr function">
-            
-        <span class="def">def</span>
-        <span class="name">trud_install</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">args</span><span class="p">:</span> <span class="n">argparse</span><span class="o">.</span><span class="n">Namespace</span></span><span class="return-annotation">):</span></span>
-
-                <label class="view-source-button" for="trud_install-view-source"><span>View Source</span></label>
-
-    </div>
-    <a class="headerlink" href="#trud_install"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="trud_install-15"><a href="#trud_install-15"><span class="linenos">15</span></a><span class="k">def</span><span class="w"> </span><span class="nf">trud_install</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">argparse</span><span class="o">.</span><span class="n">Namespace</span><span class="p">):</span>
-</span><span id="trud_install-16"><a href="#trud_install-16"><span class="linenos">16</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Handle the `trud install` command.&quot;&quot;&quot;</span>
-</span><span id="trud_install-17"><a href="#trud_install-17"><span class="linenos">17</span></a>    <span class="n">trud</span><span class="o">.</span><span class="n">install</span><span class="p">()</span>
-</span></pre></div>
-
-
-            <div class="docstring"><p>Handle the <code>trud install</code> command.</p>
-</div>
-
-
-                </section>
-                <section id="omop_install">
-                            <input id="omop_install-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
-<div class="attr function">
-            
-        <span class="def">def</span>
-        <span class="name">omop_install</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">args</span><span class="p">:</span> <span class="n">argparse</span><span class="o">.</span><span class="n">Namespace</span></span><span class="return-annotation">):</span></span>
-
-                <label class="view-source-button" for="omop_install-view-source"><span>View Source</span></label>
-
-    </div>
-    <a class="headerlink" href="#omop_install"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="omop_install-20"><a href="#omop_install-20"><span class="linenos">20</span></a><span class="k">def</span><span class="w"> </span><span class="nf">omop_install</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">argparse</span><span class="o">.</span><span class="n">Namespace</span><span class="p">):</span>
-</span><span id="omop_install-21"><a href="#omop_install-21"><span class="linenos">21</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Handle the `omop install` command.&quot;&quot;&quot;</span>
-</span><span id="omop_install-22"><a href="#omop_install-22"><span class="linenos">22</span></a>    <span class="n">omop</span><span class="o">.</span><span class="n">install</span><span class="p">(</span><span class="n">args</span><span class="o">.</span><span class="n">omop_zip_file</span><span class="p">,</span> <span class="n">args</span><span class="o">.</span><span class="n">version</span><span class="p">)</span>
-</span></pre></div>
-
-
-            <div class="docstring"><p>Handle the <code>omop install</code> command.</p>
-</div>
-
-
-                </section>
-                <section id="omop_clear">
-                            <input id="omop_clear-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
-<div class="attr function">
-            
-        <span class="def">def</span>
-        <span class="name">omop_clear</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">args</span><span class="p">:</span> <span class="n">argparse</span><span class="o">.</span><span class="n">Namespace</span></span><span class="return-annotation">):</span></span>
-
-                <label class="view-source-button" for="omop_clear-view-source"><span>View Source</span></label>
-
-    </div>
-    <a class="headerlink" href="#omop_clear"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="omop_clear-25"><a href="#omop_clear-25"><span class="linenos">25</span></a><span class="k">def</span><span class="w"> </span><span class="nf">omop_clear</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">argparse</span><span class="o">.</span><span class="n">Namespace</span><span class="p">):</span>
-</span><span id="omop_clear-26"><a href="#omop_clear-26"><span class="linenos">26</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Handle the `omop clear` command.&quot;&quot;&quot;</span>
-</span><span id="omop_clear-27"><a href="#omop_clear-27"><span class="linenos">27</span></a>    <span class="n">omop</span><span class="o">.</span><span class="n">clear</span><span class="p">(</span><span class="n">omop</span><span class="o">.</span><span class="n">DB_PATH</span><span class="p">)</span>
-</span></pre></div>
-
-
-            <div class="docstring"><p>Handle the <code>omop clear</code> command.</p>
-</div>
-
-
-                </section>
-                <section id="omop_delete">
-                            <input id="omop_delete-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
-<div class="attr function">
-            
-        <span class="def">def</span>
-        <span class="name">omop_delete</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">args</span><span class="p">:</span> <span class="n">argparse</span><span class="o">.</span><span class="n">Namespace</span></span><span class="return-annotation">):</span></span>
-
-                <label class="view-source-button" for="omop_delete-view-source"><span>View Source</span></label>
-
-    </div>
-    <a class="headerlink" href="#omop_delete"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="omop_delete-30"><a href="#omop_delete-30"><span class="linenos">30</span></a><span class="k">def</span><span class="w"> </span><span class="nf">omop_delete</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">argparse</span><span class="o">.</span><span class="n">Namespace</span><span class="p">):</span>
-</span><span id="omop_delete-31"><a href="#omop_delete-31"><span class="linenos">31</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Handle the `omop delete` command.&quot;&quot;&quot;</span>
-</span><span id="omop_delete-32"><a href="#omop_delete-32"><span class="linenos">32</span></a>    <span class="n">omop</span><span class="o">.</span><span class="n">delete</span><span class="p">(</span><span class="n">omop</span><span class="o">.</span><span class="n">DB_PATH</span><span class="p">)</span>
-</span></pre></div>
-
-
-            <div class="docstring"><p>Handle the <code>omop delete</code> command.</p>
-</div>
-
-
-                </section>
-                <section id="phen_init">
-                            <input id="phen_init-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
-<div class="attr function">
-            
-        <span class="def">def</span>
-        <span class="name">phen_init</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">args</span><span class="p">:</span> <span class="n">argparse</span><span class="o">.</span><span class="n">Namespace</span></span><span class="return-annotation">):</span></span>
-
-                <label class="view-source-button" for="phen_init-view-source"><span>View Source</span></label>
-
-    </div>
-    <a class="headerlink" href="#phen_init"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="phen_init-35"><a href="#phen_init-35"><span class="linenos">35</span></a><span class="k">def</span><span class="w"> </span><span class="nf">phen_init</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">argparse</span><span class="o">.</span><span class="n">Namespace</span><span class="p">):</span>
-</span><span id="phen_init-36"><a href="#phen_init-36"><span class="linenos">36</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Handle the `phen init` command.&quot;&quot;&quot;</span>
-</span><span id="phen_init-37"><a href="#phen_init-37"><span class="linenos">37</span></a>    <span class="n">phen</span><span class="o">.</span><span class="n">init</span><span class="p">(</span><span class="n">args</span><span class="o">.</span><span class="n">phen_dir</span><span class="p">,</span> <span class="n">args</span><span class="o">.</span><span class="n">remote_url</span><span class="p">)</span>
-</span></pre></div>
-
-
-            <div class="docstring"><p>Handle the <code>phen init</code> command.</p>
-</div>
-
-
-                </section>
-                <section id="phen_fork">
-                            <input id="phen_fork-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
-<div class="attr function">
-            
-        <span class="def">def</span>
-        <span class="name">phen_fork</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">args</span><span class="p">:</span> <span class="n">argparse</span><span class="o">.</span><span class="n">Namespace</span></span><span class="return-annotation">):</span></span>
-
-                <label class="view-source-button" for="phen_fork-view-source"><span>View Source</span></label>
-
-    </div>
-    <a class="headerlink" href="#phen_fork"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="phen_fork-40"><a href="#phen_fork-40"><span class="linenos">40</span></a><span class="k">def</span><span class="w"> </span><span class="nf">phen_fork</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">argparse</span><span class="o">.</span><span class="n">Namespace</span><span class="p">):</span>
-</span><span id="phen_fork-41"><a href="#phen_fork-41"><span class="linenos">41</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Handle the `phen fork` command.&quot;&quot;&quot;</span>
-</span><span id="phen_fork-42"><a href="#phen_fork-42"><span class="linenos">42</span></a>    <span class="n">phen</span><span class="o">.</span><span class="n">fork</span><span class="p">(</span>
-</span><span id="phen_fork-43"><a href="#phen_fork-43"><span class="linenos">43</span></a>        <span class="n">args</span><span class="o">.</span><span class="n">phen_dir</span><span class="p">,</span>
-</span><span id="phen_fork-44"><a href="#phen_fork-44"><span class="linenos">44</span></a>        <span class="n">args</span><span class="o">.</span><span class="n">upstream_url</span><span class="p">,</span>
-</span><span id="phen_fork-45"><a href="#phen_fork-45"><span class="linenos">45</span></a>        <span class="n">args</span><span class="o">.</span><span class="n">upstream_version</span><span class="p">,</span>
-</span><span id="phen_fork-46"><a href="#phen_fork-46"><span class="linenos">46</span></a>        <span class="n">new_origin_url</span><span class="o">=</span><span class="n">args</span><span class="o">.</span><span class="n">remote_url</span><span class="p">,</span>
-</span><span id="phen_fork-47"><a href="#phen_fork-47"><span class="linenos">47</span></a>    <span class="p">)</span>
-</span></pre></div>
-
-
-            <div class="docstring"><p>Handle the <code>phen fork</code> command.</p>
-</div>
-
-
-                </section>
-                <section id="phen_validate">
-                            <input id="phen_validate-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
-<div class="attr function">
-            
-        <span class="def">def</span>
-        <span class="name">phen_validate</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">args</span><span class="p">:</span> <span class="n">argparse</span><span class="o">.</span><span class="n">Namespace</span></span><span class="return-annotation">):</span></span>
-
-                <label class="view-source-button" for="phen_validate-view-source"><span>View Source</span></label>
-
-    </div>
-    <a class="headerlink" href="#phen_validate"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="phen_validate-50"><a href="#phen_validate-50"><span class="linenos">50</span></a><span class="k">def</span><span class="w"> </span><span class="nf">phen_validate</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">argparse</span><span class="o">.</span><span class="n">Namespace</span><span class="p">):</span>
-</span><span id="phen_validate-51"><a href="#phen_validate-51"><span class="linenos">51</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Handle the `phen validate` command.&quot;&quot;&quot;</span>
-</span><span id="phen_validate-52"><a href="#phen_validate-52"><span class="linenos">52</span></a>    <span class="n">phen</span><span class="o">.</span><span class="n">validate</span><span class="p">(</span><span class="n">args</span><span class="o">.</span><span class="n">phen_dir</span><span class="p">)</span>
-</span></pre></div>
-
-
-            <div class="docstring"><p>Handle the <code>phen validate</code> command.</p>
-</div>
-
-
-                </section>
-                <section id="phen_map">
-                            <input id="phen_map-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
-<div class="attr function">
-            
-        <span class="def">def</span>
-        <span class="name">phen_map</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">args</span><span class="p">:</span> <span class="n">argparse</span><span class="o">.</span><span class="n">Namespace</span></span><span class="return-annotation">):</span></span>
-
-                <label class="view-source-button" for="phen_map-view-source"><span>View Source</span></label>
-
-    </div>
-    <a class="headerlink" href="#phen_map"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="phen_map-55"><a href="#phen_map-55"><span class="linenos">55</span></a><span class="k">def</span><span class="w"> </span><span class="nf">phen_map</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">argparse</span><span class="o">.</span><span class="n">Namespace</span><span class="p">):</span>
-</span><span id="phen_map-56"><a href="#phen_map-56"><span class="linenos">56</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Handle the `phen map` command.&quot;&quot;&quot;</span>
-</span><span id="phen_map-57"><a href="#phen_map-57"><span class="linenos">57</span></a>    <span class="n">phen</span><span class="o">.</span><span class="n">map</span><span class="p">(</span><span class="n">args</span><span class="o">.</span><span class="n">phen_dir</span><span class="p">,</span> <span class="n">args</span><span class="o">.</span><span class="n">target_coding</span><span class="p">)</span>
-</span></pre></div>
-
-
-            <div class="docstring"><p>Handle the <code>phen map</code> command.</p>
-</div>
-
-
-                </section>
-                <section id="phen_export">
-                            <input id="phen_export-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
-<div class="attr function">
-            
-        <span class="def">def</span>
-        <span class="name">phen_export</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">args</span><span class="p">:</span> <span class="n">argparse</span><span class="o">.</span><span class="n">Namespace</span></span><span class="return-annotation">):</span></span>
-
-                <label class="view-source-button" for="phen_export-view-source"><span>View Source</span></label>
-
-    </div>
-    <a class="headerlink" href="#phen_export"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="phen_export-60"><a href="#phen_export-60"><span class="linenos">60</span></a><span class="k">def</span><span class="w"> </span><span class="nf">phen_export</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">argparse</span><span class="o">.</span><span class="n">Namespace</span><span class="p">):</span>
-</span><span id="phen_export-61"><a href="#phen_export-61"><span class="linenos">61</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Handle the `phen copy` command.&quot;&quot;&quot;</span>
-</span><span id="phen_export-62"><a href="#phen_export-62"><span class="linenos">62</span></a>    <span class="n">phen</span><span class="o">.</span><span class="n">export</span><span class="p">(</span><span class="n">args</span><span class="o">.</span><span class="n">phen_dir</span><span class="p">,</span> <span class="n">args</span><span class="o">.</span><span class="n">version</span><span class="p">)</span>
-</span></pre></div>
-
-
-            <div class="docstring"><p>Handle the <code>phen copy</code> command.</p>
-</div>
-
-
-                </section>
-                <section id="phen_publish">
-                            <input id="phen_publish-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
-<div class="attr function">
-            
-        <span class="def">def</span>
-        <span class="name">phen_publish</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">args</span><span class="p">:</span> <span class="n">argparse</span><span class="o">.</span><span class="n">Namespace</span></span><span class="return-annotation">):</span></span>
-
-                <label class="view-source-button" for="phen_publish-view-source"><span>View Source</span></label>
-
-    </div>
-    <a class="headerlink" href="#phen_publish"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="phen_publish-65"><a href="#phen_publish-65"><span class="linenos">65</span></a><span class="k">def</span><span class="w"> </span><span class="nf">phen_publish</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">argparse</span><span class="o">.</span><span class="n">Namespace</span><span class="p">):</span>
-</span><span id="phen_publish-66"><a href="#phen_publish-66"><span class="linenos">66</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Handle the `phen publish` command.&quot;&quot;&quot;</span>
-</span><span id="phen_publish-67"><a href="#phen_publish-67"><span class="linenos">67</span></a>    <span class="n">phen</span><span class="o">.</span><span class="n">publish</span><span class="p">(</span><span class="n">args</span><span class="o">.</span><span class="n">phen_dir</span><span class="p">,</span> <span class="n">args</span><span class="o">.</span><span class="n">msg</span><span class="p">,</span> <span class="n">args</span><span class="o">.</span><span class="n">remote_url</span><span class="p">,</span> <span class="n">args</span><span class="o">.</span><span class="n">increment</span><span class="p">)</span>
-</span></pre></div>
-
-
-            <div class="docstring"><p>Handle the <code>phen publish</code> command.</p>
-</div>
-
-
-                </section>
-                <section id="phen_copy">
-                            <input id="phen_copy-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
-<div class="attr function">
-            
-        <span class="def">def</span>
-        <span class="name">phen_copy</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">args</span><span class="p">:</span> <span class="n">argparse</span><span class="o">.</span><span class="n">Namespace</span></span><span class="return-annotation">):</span></span>
-
-                <label class="view-source-button" for="phen_copy-view-source"><span>View Source</span></label>
-
-    </div>
-    <a class="headerlink" href="#phen_copy"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="phen_copy-70"><a href="#phen_copy-70"><span class="linenos">70</span></a><span class="k">def</span><span class="w"> </span><span class="nf">phen_copy</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">argparse</span><span class="o">.</span><span class="n">Namespace</span><span class="p">):</span>
-</span><span id="phen_copy-71"><a href="#phen_copy-71"><span class="linenos">71</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Handle the `phen copy` command.&quot;&quot;&quot;</span>
-</span><span id="phen_copy-72"><a href="#phen_copy-72"><span class="linenos">72</span></a>    <span class="n">phen</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="n">args</span><span class="o">.</span><span class="n">phen_dir</span><span class="p">,</span> <span class="n">args</span><span class="o">.</span><span class="n">target_dir</span><span class="p">,</span> <span class="n">args</span><span class="o">.</span><span class="n">version</span><span class="p">)</span>
-</span></pre></div>
-
-
-            <div class="docstring"><p>Handle the <code>phen copy</code> command.</p>
-</div>
-
-
-                </section>
-                <section id="phen_diff">
-                            <input id="phen_diff-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
-<div class="attr function">
-            
-        <span class="def">def</span>
-        <span class="name">phen_diff</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">args</span><span class="p">:</span> <span class="n">argparse</span><span class="o">.</span><span class="n">Namespace</span></span><span class="return-annotation">):</span></span>
-
-                <label class="view-source-button" for="phen_diff-view-source"><span>View Source</span></label>
-
-    </div>
-    <a class="headerlink" href="#phen_diff"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="phen_diff-75"><a href="#phen_diff-75"><span class="linenos">75</span></a><span class="k">def</span><span class="w"> </span><span class="nf">phen_diff</span><span class="p">(</span><span class="n">args</span><span class="p">:</span> <span class="n">argparse</span><span class="o">.</span><span class="n">Namespace</span><span class="p">):</span>
-</span><span id="phen_diff-76"><a href="#phen_diff-76"><span class="linenos">76</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Handle the `phen diff` command.&quot;&quot;&quot;</span>
-</span><span id="phen_diff-77"><a href="#phen_diff-77"><span class="linenos">77</span></a>    <span class="n">phen</span><span class="o">.</span><span class="n">diff</span><span class="p">(</span><span class="n">args</span><span class="o">.</span><span class="n">phen_dir</span><span class="p">,</span> <span class="n">args</span><span class="o">.</span><span class="n">version</span><span class="p">,</span> <span class="n">args</span><span class="o">.</span><span class="n">old_phen_dir</span><span class="p">,</span> <span class="n">args</span><span class="o">.</span><span class="n">old_version</span><span class="p">)</span>
-</span></pre></div>
-
-
-            <div class="docstring"><p>Handle the <code>phen diff</code> command.</p>
+            <div class="docstring"><p>Default phenotype workspace path</p>
 </div>
 
 
@@ -739,259 +430,259 @@
 
     </div>
     <a class="headerlink" href="#main"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="main-80"><a href="#main-80"><span class="linenos"> 80</span></a><span class="k">def</span><span class="w"> </span><span class="nf">main</span><span class="p">():</span>
-</span><span id="main-81"><a href="#main-81"><span class="linenos"> 81</span></a>    <span class="n">parser</span> <span class="o">=</span> <span class="n">argparse</span><span class="o">.</span><span class="n">ArgumentParser</span><span class="p">(</span><span class="n">description</span><span class="o">=</span><span class="s2">&quot;ACMC command-line tool&quot;</span><span class="p">)</span>
-</span><span id="main-82"><a href="#main-82"><span class="linenos"> 82</span></a>    <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">&quot;--debug&quot;</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s2">&quot;store_true&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Enable debug mode&quot;</span><span class="p">)</span>
-</span><span id="main-83"><a href="#main-83"><span class="linenos"> 83</span></a>    <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
-</span><span id="main-84"><a href="#main-84"><span class="linenos"> 84</span></a>        <span class="s2">&quot;--version&quot;</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s2">&quot;version&quot;</span><span class="p">,</span> <span class="n">version</span><span class="o">=</span><span class="sa">f</span><span class="s2">&quot;acmc </span><span class="si">{</span><span class="n">acmc</span><span class="o">.</span><span class="n">__version__</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="main-85"><a href="#main-85"><span class="linenos"> 85</span></a>    <span class="p">)</span>
-</span><span id="main-86"><a href="#main-86"><span class="linenos"> 86</span></a>
-</span><span id="main-87"><a href="#main-87"><span class="linenos"> 87</span></a>    <span class="c1"># Top-level commands</span>
-</span><span id="main-88"><a href="#main-88"><span class="linenos"> 88</span></a>    <span class="n">subparsers</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">add_subparsers</span><span class="p">(</span>
-</span><span id="main-89"><a href="#main-89"><span class="linenos"> 89</span></a>        <span class="n">dest</span><span class="o">=</span><span class="s2">&quot;command&quot;</span><span class="p">,</span> <span class="n">required</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Available commands&quot;</span>
+            <div class="pdoc-code codehilite"><pre><span></span><span id="main-85"><a href="#main-85"><span class="linenos"> 85</span></a><span class="k">def</span><span class="w"> </span><span class="nf">main</span><span class="p">():</span>
+</span><span id="main-86"><a href="#main-86"><span class="linenos"> 86</span></a>    <span class="n">parser</span> <span class="o">=</span> <span class="n">argparse</span><span class="o">.</span><span class="n">ArgumentParser</span><span class="p">(</span><span class="n">description</span><span class="o">=</span><span class="s2">&quot;ACMC command-line tool&quot;</span><span class="p">)</span>
+</span><span id="main-87"><a href="#main-87"><span class="linenos"> 87</span></a>    <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">&quot;--debug&quot;</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s2">&quot;store_true&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Enable debug mode&quot;</span><span class="p">)</span>
+</span><span id="main-88"><a href="#main-88"><span class="linenos"> 88</span></a>    <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
+</span><span id="main-89"><a href="#main-89"><span class="linenos"> 89</span></a>        <span class="s2">&quot;--version&quot;</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s2">&quot;version&quot;</span><span class="p">,</span> <span class="n">version</span><span class="o">=</span><span class="sa">f</span><span class="s2">&quot;acmc </span><span class="si">{</span><span class="n">acmc</span><span class="o">.</span><span class="n">__version__</span><span class="si">}</span><span class="s2">&quot;</span>
 </span><span id="main-90"><a href="#main-90"><span class="linenos"> 90</span></a>    <span class="p">)</span>
 </span><span id="main-91"><a href="#main-91"><span class="linenos"> 91</span></a>
-</span><span id="main-92"><a href="#main-92"><span class="linenos"> 92</span></a>    <span class="c1">### TRUD Command ###</span>
-</span><span id="main-93"><a href="#main-93"><span class="linenos"> 93</span></a>    <span class="n">trud_parser</span> <span class="o">=</span> <span class="n">subparsers</span><span class="o">.</span><span class="n">add_parser</span><span class="p">(</span><span class="s2">&quot;trud&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;TRUD commands&quot;</span><span class="p">)</span>
-</span><span id="main-94"><a href="#main-94"><span class="linenos"> 94</span></a>    <span class="n">trud_subparsers</span> <span class="o">=</span> <span class="n">trud_parser</span><span class="o">.</span><span class="n">add_subparsers</span><span class="p">(</span>
-</span><span id="main-95"><a href="#main-95"><span class="linenos"> 95</span></a>        <span class="n">dest</span><span class="o">=</span><span class="s2">&quot;subcommand&quot;</span><span class="p">,</span> <span class="n">required</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;TRUD subcommands&quot;</span>
-</span><span id="main-96"><a href="#main-96"><span class="linenos"> 96</span></a>    <span class="p">)</span>
-</span><span id="main-97"><a href="#main-97"><span class="linenos"> 97</span></a>
-</span><span id="main-98"><a href="#main-98"><span class="linenos"> 98</span></a>    <span class="c1"># trud install</span>
-</span><span id="main-99"><a href="#main-99"><span class="linenos"> 99</span></a>    <span class="n">trud_install_parser</span> <span class="o">=</span> <span class="n">trud_subparsers</span><span class="o">.</span><span class="n">add_parser</span><span class="p">(</span>
-</span><span id="main-100"><a href="#main-100"><span class="linenos">100</span></a>        <span class="s2">&quot;install&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Install TRUD components&quot;</span>
+</span><span id="main-92"><a href="#main-92"><span class="linenos"> 92</span></a>    <span class="c1"># Top-level commands</span>
+</span><span id="main-93"><a href="#main-93"><span class="linenos"> 93</span></a>    <span class="n">subparsers</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">add_subparsers</span><span class="p">(</span>
+</span><span id="main-94"><a href="#main-94"><span class="linenos"> 94</span></a>        <span class="n">dest</span><span class="o">=</span><span class="s2">&quot;command&quot;</span><span class="p">,</span> <span class="n">required</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Available commands&quot;</span>
+</span><span id="main-95"><a href="#main-95"><span class="linenos"> 95</span></a>    <span class="p">)</span>
+</span><span id="main-96"><a href="#main-96"><span class="linenos"> 96</span></a>
+</span><span id="main-97"><a href="#main-97"><span class="linenos"> 97</span></a>    <span class="c1">### TRUD Command ###</span>
+</span><span id="main-98"><a href="#main-98"><span class="linenos"> 98</span></a>    <span class="n">trud_parser</span> <span class="o">=</span> <span class="n">subparsers</span><span class="o">.</span><span class="n">add_parser</span><span class="p">(</span><span class="s2">&quot;trud&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;TRUD commands&quot;</span><span class="p">)</span>
+</span><span id="main-99"><a href="#main-99"><span class="linenos"> 99</span></a>    <span class="n">trud_subparsers</span> <span class="o">=</span> <span class="n">trud_parser</span><span class="o">.</span><span class="n">add_subparsers</span><span class="p">(</span>
+</span><span id="main-100"><a href="#main-100"><span class="linenos">100</span></a>        <span class="n">dest</span><span class="o">=</span><span class="s2">&quot;subcommand&quot;</span><span class="p">,</span> <span class="n">required</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;TRUD subcommands&quot;</span>
 </span><span id="main-101"><a href="#main-101"><span class="linenos">101</span></a>    <span class="p">)</span>
-</span><span id="main-102"><a href="#main-102"><span class="linenos">102</span></a>    <span class="n">trud_install_parser</span><span class="o">.</span><span class="n">set_defaults</span><span class="p">(</span><span class="n">func</span><span class="o">=</span><span class="n">trud_install</span><span class="p">)</span>
-</span><span id="main-103"><a href="#main-103"><span class="linenos">103</span></a>
-</span><span id="main-104"><a href="#main-104"><span class="linenos">104</span></a>    <span class="c1">### OMOP Command ###</span>
-</span><span id="main-105"><a href="#main-105"><span class="linenos">105</span></a>    <span class="n">omop_parser</span> <span class="o">=</span> <span class="n">subparsers</span><span class="o">.</span><span class="n">add_parser</span><span class="p">(</span><span class="s2">&quot;omop&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;OMOP commands&quot;</span><span class="p">)</span>
-</span><span id="main-106"><a href="#main-106"><span class="linenos">106</span></a>    <span class="n">omop_subparsers</span> <span class="o">=</span> <span class="n">omop_parser</span><span class="o">.</span><span class="n">add_subparsers</span><span class="p">(</span>
-</span><span id="main-107"><a href="#main-107"><span class="linenos">107</span></a>        <span class="n">dest</span><span class="o">=</span><span class="s2">&quot;subcommand&quot;</span><span class="p">,</span> <span class="n">required</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;OMOP subcommands&quot;</span>
-</span><span id="main-108"><a href="#main-108"><span class="linenos">108</span></a>    <span class="p">)</span>
-</span><span id="main-109"><a href="#main-109"><span class="linenos">109</span></a>
-</span><span id="main-110"><a href="#main-110"><span class="linenos">110</span></a>    <span class="c1"># omop install</span>
-</span><span id="main-111"><a href="#main-111"><span class="linenos">111</span></a>    <span class="n">omop_install_parser</span> <span class="o">=</span> <span class="n">omop_subparsers</span><span class="o">.</span><span class="n">add_parser</span><span class="p">(</span>
-</span><span id="main-112"><a href="#main-112"><span class="linenos">112</span></a>        <span class="s2">&quot;install&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Install OMOP codes within database&quot;</span>
+</span><span id="main-102"><a href="#main-102"><span class="linenos">102</span></a>
+</span><span id="main-103"><a href="#main-103"><span class="linenos">103</span></a>    <span class="c1"># trud install</span>
+</span><span id="main-104"><a href="#main-104"><span class="linenos">104</span></a>    <span class="n">trud_install_parser</span> <span class="o">=</span> <span class="n">trud_subparsers</span><span class="o">.</span><span class="n">add_parser</span><span class="p">(</span>
+</span><span id="main-105"><a href="#main-105"><span class="linenos">105</span></a>        <span class="s2">&quot;install&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Install TRUD components&quot;</span>
+</span><span id="main-106"><a href="#main-106"><span class="linenos">106</span></a>    <span class="p">)</span>
+</span><span id="main-107"><a href="#main-107"><span class="linenos">107</span></a>    <span class="n">trud_install_parser</span><span class="o">.</span><span class="n">set_defaults</span><span class="p">(</span><span class="n">func</span><span class="o">=</span><span class="n">_trud_install</span><span class="p">)</span>
+</span><span id="main-108"><a href="#main-108"><span class="linenos">108</span></a>
+</span><span id="main-109"><a href="#main-109"><span class="linenos">109</span></a>    <span class="c1">### OMOP Command ###</span>
+</span><span id="main-110"><a href="#main-110"><span class="linenos">110</span></a>    <span class="n">omop_parser</span> <span class="o">=</span> <span class="n">subparsers</span><span class="o">.</span><span class="n">add_parser</span><span class="p">(</span><span class="s2">&quot;omop&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;OMOP commands&quot;</span><span class="p">)</span>
+</span><span id="main-111"><a href="#main-111"><span class="linenos">111</span></a>    <span class="n">omop_subparsers</span> <span class="o">=</span> <span class="n">omop_parser</span><span class="o">.</span><span class="n">add_subparsers</span><span class="p">(</span>
+</span><span id="main-112"><a href="#main-112"><span class="linenos">112</span></a>        <span class="n">dest</span><span class="o">=</span><span class="s2">&quot;subcommand&quot;</span><span class="p">,</span> <span class="n">required</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;OMOP subcommands&quot;</span>
 </span><span id="main-113"><a href="#main-113"><span class="linenos">113</span></a>    <span class="p">)</span>
-</span><span id="main-114"><a href="#main-114"><span class="linenos">114</span></a>    <span class="n">omop_install_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
-</span><span id="main-115"><a href="#main-115"><span class="linenos">115</span></a>        <span class="s2">&quot;-f&quot;</span><span class="p">,</span> <span class="s2">&quot;--omop-zip-file&quot;</span><span class="p">,</span> <span class="n">required</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Path to downloaded OMOP zip file&quot;</span>
-</span><span id="main-116"><a href="#main-116"><span class="linenos">116</span></a>    <span class="p">)</span>
-</span><span id="main-117"><a href="#main-117"><span class="linenos">117</span></a>    <span class="n">omop_install_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
-</span><span id="main-118"><a href="#main-118"><span class="linenos">118</span></a>        <span class="s2">&quot;-v&quot;</span><span class="p">,</span> <span class="s2">&quot;--version&quot;</span><span class="p">,</span> <span class="n">required</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;OMOP vocabularies release version&quot;</span>
-</span><span id="main-119"><a href="#main-119"><span class="linenos">119</span></a>    <span class="p">)</span>
-</span><span id="main-120"><a href="#main-120"><span class="linenos">120</span></a>    <span class="n">omop_install_parser</span><span class="o">.</span><span class="n">set_defaults</span><span class="p">(</span><span class="n">func</span><span class="o">=</span><span class="n">omop_install</span><span class="p">)</span>
-</span><span id="main-121"><a href="#main-121"><span class="linenos">121</span></a>
-</span><span id="main-122"><a href="#main-122"><span class="linenos">122</span></a>    <span class="c1"># omop clear</span>
-</span><span id="main-123"><a href="#main-123"><span class="linenos">123</span></a>    <span class="n">omop_clear_parser</span> <span class="o">=</span> <span class="n">omop_subparsers</span><span class="o">.</span><span class="n">add_parser</span><span class="p">(</span>
-</span><span id="main-124"><a href="#main-124"><span class="linenos">124</span></a>        <span class="s2">&quot;clear&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Clear OMOP data from database&quot;</span>
-</span><span id="main-125"><a href="#main-125"><span class="linenos">125</span></a>    <span class="p">)</span>
-</span><span id="main-126"><a href="#main-126"><span class="linenos">126</span></a>    <span class="n">omop_clear_parser</span><span class="o">.</span><span class="n">set_defaults</span><span class="p">(</span><span class="n">func</span><span class="o">=</span><span class="n">omop_clear</span><span class="p">)</span>
-</span><span id="main-127"><a href="#main-127"><span class="linenos">127</span></a>
-</span><span id="main-128"><a href="#main-128"><span class="linenos">128</span></a>    <span class="c1"># omop delete</span>
-</span><span id="main-129"><a href="#main-129"><span class="linenos">129</span></a>    <span class="n">omop_delete_parser</span> <span class="o">=</span> <span class="n">omop_subparsers</span><span class="o">.</span><span class="n">add_parser</span><span class="p">(</span>
-</span><span id="main-130"><a href="#main-130"><span class="linenos">130</span></a>        <span class="s2">&quot;delete&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Delete OMOP database&quot;</span>
-</span><span id="main-131"><a href="#main-131"><span class="linenos">131</span></a>    <span class="p">)</span>
-</span><span id="main-132"><a href="#main-132"><span class="linenos">132</span></a>    <span class="n">omop_delete_parser</span><span class="o">.</span><span class="n">set_defaults</span><span class="p">(</span><span class="n">func</span><span class="o">=</span><span class="n">omop_delete</span><span class="p">)</span>
-</span><span id="main-133"><a href="#main-133"><span class="linenos">133</span></a>
-</span><span id="main-134"><a href="#main-134"><span class="linenos">134</span></a>    <span class="c1">### PHEN Command ###</span>
-</span><span id="main-135"><a href="#main-135"><span class="linenos">135</span></a>    <span class="n">phen_parser</span> <span class="o">=</span> <span class="n">subparsers</span><span class="o">.</span><span class="n">add_parser</span><span class="p">(</span><span class="s2">&quot;phen&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Phen commands&quot;</span><span class="p">)</span>
-</span><span id="main-136"><a href="#main-136"><span class="linenos">136</span></a>    <span class="n">phen_subparsers</span> <span class="o">=</span> <span class="n">phen_parser</span><span class="o">.</span><span class="n">add_subparsers</span><span class="p">(</span>
-</span><span id="main-137"><a href="#main-137"><span class="linenos">137</span></a>        <span class="n">dest</span><span class="o">=</span><span class="s2">&quot;subcommand&quot;</span><span class="p">,</span> <span class="n">required</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Phen subcommands&quot;</span>
-</span><span id="main-138"><a href="#main-138"><span class="linenos">138</span></a>    <span class="p">)</span>
-</span><span id="main-139"><a href="#main-139"><span class="linenos">139</span></a>
-</span><span id="main-140"><a href="#main-140"><span class="linenos">140</span></a>    <span class="c1"># phen init</span>
-</span><span id="main-141"><a href="#main-141"><span class="linenos">141</span></a>    <span class="n">phen_init_parser</span> <span class="o">=</span> <span class="n">phen_subparsers</span><span class="o">.</span><span class="n">add_parser</span><span class="p">(</span>
-</span><span id="main-142"><a href="#main-142"><span class="linenos">142</span></a>        <span class="s2">&quot;init&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Initiatise phenotype directory&quot;</span>
+</span><span id="main-114"><a href="#main-114"><span class="linenos">114</span></a>
+</span><span id="main-115"><a href="#main-115"><span class="linenos">115</span></a>    <span class="c1"># omop install</span>
+</span><span id="main-116"><a href="#main-116"><span class="linenos">116</span></a>    <span class="n">omop_install_parser</span> <span class="o">=</span> <span class="n">omop_subparsers</span><span class="o">.</span><span class="n">add_parser</span><span class="p">(</span>
+</span><span id="main-117"><a href="#main-117"><span class="linenos">117</span></a>        <span class="s2">&quot;install&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Install OMOP codes within database&quot;</span>
+</span><span id="main-118"><a href="#main-118"><span class="linenos">118</span></a>    <span class="p">)</span>
+</span><span id="main-119"><a href="#main-119"><span class="linenos">119</span></a>    <span class="n">omop_install_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
+</span><span id="main-120"><a href="#main-120"><span class="linenos">120</span></a>        <span class="s2">&quot;-f&quot;</span><span class="p">,</span> <span class="s2">&quot;--omop-zip-file&quot;</span><span class="p">,</span> <span class="n">required</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Path to downloaded OMOP zip file&quot;</span>
+</span><span id="main-121"><a href="#main-121"><span class="linenos">121</span></a>    <span class="p">)</span>
+</span><span id="main-122"><a href="#main-122"><span class="linenos">122</span></a>    <span class="n">omop_install_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
+</span><span id="main-123"><a href="#main-123"><span class="linenos">123</span></a>        <span class="s2">&quot;-v&quot;</span><span class="p">,</span> <span class="s2">&quot;--version&quot;</span><span class="p">,</span> <span class="n">required</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;OMOP vocabularies release version&quot;</span>
+</span><span id="main-124"><a href="#main-124"><span class="linenos">124</span></a>    <span class="p">)</span>
+</span><span id="main-125"><a href="#main-125"><span class="linenos">125</span></a>    <span class="n">omop_install_parser</span><span class="o">.</span><span class="n">set_defaults</span><span class="p">(</span><span class="n">func</span><span class="o">=</span><span class="n">_omop_install</span><span class="p">)</span>
+</span><span id="main-126"><a href="#main-126"><span class="linenos">126</span></a>
+</span><span id="main-127"><a href="#main-127"><span class="linenos">127</span></a>    <span class="c1"># omop clear</span>
+</span><span id="main-128"><a href="#main-128"><span class="linenos">128</span></a>    <span class="n">omop_clear_parser</span> <span class="o">=</span> <span class="n">omop_subparsers</span><span class="o">.</span><span class="n">add_parser</span><span class="p">(</span>
+</span><span id="main-129"><a href="#main-129"><span class="linenos">129</span></a>        <span class="s2">&quot;clear&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Clear OMOP data from database&quot;</span>
+</span><span id="main-130"><a href="#main-130"><span class="linenos">130</span></a>    <span class="p">)</span>
+</span><span id="main-131"><a href="#main-131"><span class="linenos">131</span></a>    <span class="n">omop_clear_parser</span><span class="o">.</span><span class="n">set_defaults</span><span class="p">(</span><span class="n">func</span><span class="o">=</span><span class="n">_omop_clear</span><span class="p">)</span>
+</span><span id="main-132"><a href="#main-132"><span class="linenos">132</span></a>
+</span><span id="main-133"><a href="#main-133"><span class="linenos">133</span></a>    <span class="c1"># omop delete</span>
+</span><span id="main-134"><a href="#main-134"><span class="linenos">134</span></a>    <span class="n">omop_delete_parser</span> <span class="o">=</span> <span class="n">omop_subparsers</span><span class="o">.</span><span class="n">add_parser</span><span class="p">(</span>
+</span><span id="main-135"><a href="#main-135"><span class="linenos">135</span></a>        <span class="s2">&quot;delete&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Delete OMOP database&quot;</span>
+</span><span id="main-136"><a href="#main-136"><span class="linenos">136</span></a>    <span class="p">)</span>
+</span><span id="main-137"><a href="#main-137"><span class="linenos">137</span></a>    <span class="n">omop_delete_parser</span><span class="o">.</span><span class="n">set_defaults</span><span class="p">(</span><span class="n">func</span><span class="o">=</span><span class="n">_omop_delete</span><span class="p">)</span>
+</span><span id="main-138"><a href="#main-138"><span class="linenos">138</span></a>
+</span><span id="main-139"><a href="#main-139"><span class="linenos">139</span></a>    <span class="c1">### PHEN Command ###</span>
+</span><span id="main-140"><a href="#main-140"><span class="linenos">140</span></a>    <span class="n">phen_parser</span> <span class="o">=</span> <span class="n">subparsers</span><span class="o">.</span><span class="n">add_parser</span><span class="p">(</span><span class="s2">&quot;phen&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Phen commands&quot;</span><span class="p">)</span>
+</span><span id="main-141"><a href="#main-141"><span class="linenos">141</span></a>    <span class="n">phen_subparsers</span> <span class="o">=</span> <span class="n">phen_parser</span><span class="o">.</span><span class="n">add_subparsers</span><span class="p">(</span>
+</span><span id="main-142"><a href="#main-142"><span class="linenos">142</span></a>        <span class="n">dest</span><span class="o">=</span><span class="s2">&quot;subcommand&quot;</span><span class="p">,</span> <span class="n">required</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Phen subcommands&quot;</span>
 </span><span id="main-143"><a href="#main-143"><span class="linenos">143</span></a>    <span class="p">)</span>
-</span><span id="main-144"><a href="#main-144"><span class="linenos">144</span></a>    <span class="n">phen_init_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
-</span><span id="main-145"><a href="#main-145"><span class="linenos">145</span></a>        <span class="s2">&quot;-d&quot;</span><span class="p">,</span>
-</span><span id="main-146"><a href="#main-146"><span class="linenos">146</span></a>        <span class="s2">&quot;--phen-dir&quot;</span><span class="p">,</span>
-</span><span id="main-147"><a href="#main-147"><span class="linenos">147</span></a>        <span class="nb">type</span><span class="o">=</span><span class="nb">str</span><span class="p">,</span>
-</span><span id="main-148"><a href="#main-148"><span class="linenos">148</span></a>        <span class="n">default</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">phen</span><span class="o">.</span><span class="n">DEFAULT_PHEN_PATH</span><span class="o">.</span><span class="n">resolve</span><span class="p">()),</span>
-</span><span id="main-149"><a href="#main-149"><span class="linenos">149</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;(Optional) Local phenotype workspace directory (default is ./workspace/phen).&quot;</span><span class="p">,</span>
-</span><span id="main-150"><a href="#main-150"><span class="linenos">150</span></a>    <span class="p">)</span>
-</span><span id="main-151"><a href="#main-151"><span class="linenos">151</span></a>    <span class="n">phen_init_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
-</span><span id="main-152"><a href="#main-152"><span class="linenos">152</span></a>        <span class="s2">&quot;-r&quot;</span><span class="p">,</span>
-</span><span id="main-153"><a href="#main-153"><span class="linenos">153</span></a>        <span class="s2">&quot;--remote_url&quot;</span><span class="p">,</span>
-</span><span id="main-154"><a href="#main-154"><span class="linenos">154</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;(Optional) URL to repository where the phenotype will be published.&quot;</span><span class="p">,</span>
+</span><span id="main-144"><a href="#main-144"><span class="linenos">144</span></a>
+</span><span id="main-145"><a href="#main-145"><span class="linenos">145</span></a>    <span class="c1"># phen init</span>
+</span><span id="main-146"><a href="#main-146"><span class="linenos">146</span></a>    <span class="n">phen_init_parser</span> <span class="o">=</span> <span class="n">phen_subparsers</span><span class="o">.</span><span class="n">add_parser</span><span class="p">(</span>
+</span><span id="main-147"><a href="#main-147"><span class="linenos">147</span></a>        <span class="s2">&quot;init&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Initiatise phenotype directory&quot;</span>
+</span><span id="main-148"><a href="#main-148"><span class="linenos">148</span></a>    <span class="p">)</span>
+</span><span id="main-149"><a href="#main-149"><span class="linenos">149</span></a>    <span class="n">phen_init_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
+</span><span id="main-150"><a href="#main-150"><span class="linenos">150</span></a>        <span class="s2">&quot;-d&quot;</span><span class="p">,</span>
+</span><span id="main-151"><a href="#main-151"><span class="linenos">151</span></a>        <span class="s2">&quot;--phen-dir&quot;</span><span class="p">,</span>
+</span><span id="main-152"><a href="#main-152"><span class="linenos">152</span></a>        <span class="nb">type</span><span class="o">=</span><span class="nb">str</span><span class="p">,</span>
+</span><span id="main-153"><a href="#main-153"><span class="linenos">153</span></a>        <span class="n">default</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">phen</span><span class="o">.</span><span class="n">DEFAULT_PHEN_PATH</span><span class="o">.</span><span class="n">resolve</span><span class="p">()),</span>
+</span><span id="main-154"><a href="#main-154"><span class="linenos">154</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;(Optional) Local phenotype workspace directory (default is ./workspace/phen).&quot;</span><span class="p">,</span>
 </span><span id="main-155"><a href="#main-155"><span class="linenos">155</span></a>    <span class="p">)</span>
-</span><span id="main-156"><a href="#main-156"><span class="linenos">156</span></a>    <span class="n">phen_init_parser</span><span class="o">.</span><span class="n">set_defaults</span><span class="p">(</span><span class="n">func</span><span class="o">=</span><span class="n">phen_init</span><span class="p">)</span>
-</span><span id="main-157"><a href="#main-157"><span class="linenos">157</span></a>
-</span><span id="main-158"><a href="#main-158"><span class="linenos">158</span></a>    <span class="c1"># phen fork</span>
-</span><span id="main-159"><a href="#main-159"><span class="linenos">159</span></a>    <span class="n">phen_fork_parser</span> <span class="o">=</span> <span class="n">phen_subparsers</span><span class="o">.</span><span class="n">add_parser</span><span class="p">(</span>
-</span><span id="main-160"><a href="#main-160"><span class="linenos">160</span></a>        <span class="s2">&quot;fork&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Fork an existing phenotype&quot;</span>
-</span><span id="main-161"><a href="#main-161"><span class="linenos">161</span></a>    <span class="p">)</span>
-</span><span id="main-162"><a href="#main-162"><span class="linenos">162</span></a>    <span class="n">phen_fork_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
-</span><span id="main-163"><a href="#main-163"><span class="linenos">163</span></a>        <span class="s2">&quot;-d&quot;</span><span class="p">,</span>
-</span><span id="main-164"><a href="#main-164"><span class="linenos">164</span></a>        <span class="s2">&quot;--phen-dir&quot;</span><span class="p">,</span>
-</span><span id="main-165"><a href="#main-165"><span class="linenos">165</span></a>        <span class="nb">type</span><span class="o">=</span><span class="nb">str</span><span class="p">,</span>
-</span><span id="main-166"><a href="#main-166"><span class="linenos">166</span></a>        <span class="n">default</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">phen</span><span class="o">.</span><span class="n">DEFAULT_PHEN_PATH</span><span class="o">.</span><span class="n">resolve</span><span class="p">()),</span>
-</span><span id="main-167"><a href="#main-167"><span class="linenos">167</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;(Optional) Local phenotype workspace directory (default is ./workspace/phen).&quot;</span><span class="p">,</span>
-</span><span id="main-168"><a href="#main-168"><span class="linenos">168</span></a>    <span class="p">)</span>
-</span><span id="main-169"><a href="#main-169"><span class="linenos">169</span></a>    <span class="n">phen_fork_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
-</span><span id="main-170"><a href="#main-170"><span class="linenos">170</span></a>        <span class="s2">&quot;-r&quot;</span><span class="p">,</span>
-</span><span id="main-171"><a href="#main-171"><span class="linenos">171</span></a>        <span class="s2">&quot;--remote_url&quot;</span><span class="p">,</span>
-</span><span id="main-172"><a href="#main-172"><span class="linenos">172</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;(Optional) URL to repository where the forked phenotype will be published.&quot;</span><span class="p">,</span>
+</span><span id="main-156"><a href="#main-156"><span class="linenos">156</span></a>    <span class="n">phen_init_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
+</span><span id="main-157"><a href="#main-157"><span class="linenos">157</span></a>        <span class="s2">&quot;-r&quot;</span><span class="p">,</span>
+</span><span id="main-158"><a href="#main-158"><span class="linenos">158</span></a>        <span class="s2">&quot;--remote_url&quot;</span><span class="p">,</span>
+</span><span id="main-159"><a href="#main-159"><span class="linenos">159</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;(Optional) URL to repository where the phenotype will be published.&quot;</span><span class="p">,</span>
+</span><span id="main-160"><a href="#main-160"><span class="linenos">160</span></a>    <span class="p">)</span>
+</span><span id="main-161"><a href="#main-161"><span class="linenos">161</span></a>    <span class="n">phen_init_parser</span><span class="o">.</span><span class="n">set_defaults</span><span class="p">(</span><span class="n">func</span><span class="o">=</span><span class="n">_phen_init</span><span class="p">)</span>
+</span><span id="main-162"><a href="#main-162"><span class="linenos">162</span></a>
+</span><span id="main-163"><a href="#main-163"><span class="linenos">163</span></a>    <span class="c1"># phen fork</span>
+</span><span id="main-164"><a href="#main-164"><span class="linenos">164</span></a>    <span class="n">phen_fork_parser</span> <span class="o">=</span> <span class="n">phen_subparsers</span><span class="o">.</span><span class="n">add_parser</span><span class="p">(</span>
+</span><span id="main-165"><a href="#main-165"><span class="linenos">165</span></a>        <span class="s2">&quot;fork&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Fork an existing phenotype&quot;</span>
+</span><span id="main-166"><a href="#main-166"><span class="linenos">166</span></a>    <span class="p">)</span>
+</span><span id="main-167"><a href="#main-167"><span class="linenos">167</span></a>    <span class="n">phen_fork_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
+</span><span id="main-168"><a href="#main-168"><span class="linenos">168</span></a>        <span class="s2">&quot;-d&quot;</span><span class="p">,</span>
+</span><span id="main-169"><a href="#main-169"><span class="linenos">169</span></a>        <span class="s2">&quot;--phen-dir&quot;</span><span class="p">,</span>
+</span><span id="main-170"><a href="#main-170"><span class="linenos">170</span></a>        <span class="nb">type</span><span class="o">=</span><span class="nb">str</span><span class="p">,</span>
+</span><span id="main-171"><a href="#main-171"><span class="linenos">171</span></a>        <span class="n">default</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">phen</span><span class="o">.</span><span class="n">DEFAULT_PHEN_PATH</span><span class="o">.</span><span class="n">resolve</span><span class="p">()),</span>
+</span><span id="main-172"><a href="#main-172"><span class="linenos">172</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;(Optional) Local phenotype workspace directory (default is ./workspace/phen).&quot;</span><span class="p">,</span>
 </span><span id="main-173"><a href="#main-173"><span class="linenos">173</span></a>    <span class="p">)</span>
 </span><span id="main-174"><a href="#main-174"><span class="linenos">174</span></a>    <span class="n">phen_fork_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
-</span><span id="main-175"><a href="#main-175"><span class="linenos">175</span></a>        <span class="s2">&quot;-u&quot;</span><span class="p">,</span>
-</span><span id="main-176"><a href="#main-176"><span class="linenos">176</span></a>        <span class="s2">&quot;--upstream-url&quot;</span><span class="p">,</span>
-</span><span id="main-177"><a href="#main-177"><span class="linenos">177</span></a>        <span class="n">required</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
-</span><span id="main-178"><a href="#main-178"><span class="linenos">178</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;(Required) URL to the phenotype repository to fork.&quot;</span><span class="p">,</span>
-</span><span id="main-179"><a href="#main-179"><span class="linenos">179</span></a>    <span class="p">)</span>
-</span><span id="main-180"><a href="#main-180"><span class="linenos">180</span></a>    <span class="n">phen_fork_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
-</span><span id="main-181"><a href="#main-181"><span class="linenos">181</span></a>        <span class="s2">&quot;-v&quot;</span><span class="p">,</span>
-</span><span id="main-182"><a href="#main-182"><span class="linenos">182</span></a>        <span class="s2">&quot;--upstream-version&quot;</span><span class="p">,</span>
-</span><span id="main-183"><a href="#main-183"><span class="linenos">183</span></a>        <span class="n">required</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
-</span><span id="main-184"><a href="#main-184"><span class="linenos">184</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;(Required) Phenotype version to fork.&quot;</span><span class="p">,</span>
-</span><span id="main-185"><a href="#main-185"><span class="linenos">185</span></a>    <span class="p">)</span>
-</span><span id="main-186"><a href="#main-186"><span class="linenos">186</span></a>    <span class="n">phen_fork_parser</span><span class="o">.</span><span class="n">set_defaults</span><span class="p">(</span><span class="n">func</span><span class="o">=</span><span class="n">phen_fork</span><span class="p">)</span>
-</span><span id="main-187"><a href="#main-187"><span class="linenos">187</span></a>
-</span><span id="main-188"><a href="#main-188"><span class="linenos">188</span></a>    <span class="c1"># phen validate</span>
-</span><span id="main-189"><a href="#main-189"><span class="linenos">189</span></a>    <span class="n">phen_validate_parser</span> <span class="o">=</span> <span class="n">phen_subparsers</span><span class="o">.</span><span class="n">add_parser</span><span class="p">(</span>
-</span><span id="main-190"><a href="#main-190"><span class="linenos">190</span></a>        <span class="s2">&quot;validate&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Validate phenotype configuration&quot;</span>
-</span><span id="main-191"><a href="#main-191"><span class="linenos">191</span></a>    <span class="p">)</span>
-</span><span id="main-192"><a href="#main-192"><span class="linenos">192</span></a>    <span class="n">phen_validate_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
-</span><span id="main-193"><a href="#main-193"><span class="linenos">193</span></a>        <span class="s2">&quot;-d&quot;</span><span class="p">,</span>
-</span><span id="main-194"><a href="#main-194"><span class="linenos">194</span></a>        <span class="s2">&quot;--phen-dir&quot;</span><span class="p">,</span>
-</span><span id="main-195"><a href="#main-195"><span class="linenos">195</span></a>        <span class="nb">type</span><span class="o">=</span><span class="nb">str</span><span class="p">,</span>
-</span><span id="main-196"><a href="#main-196"><span class="linenos">196</span></a>        <span class="n">default</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">phen</span><span class="o">.</span><span class="n">DEFAULT_PHEN_PATH</span><span class="o">.</span><span class="n">resolve</span><span class="p">()),</span>
-</span><span id="main-197"><a href="#main-197"><span class="linenos">197</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;(Optional) Local phenotype workspace directory (default is ./workspace/phen).&quot;</span><span class="p">,</span>
-</span><span id="main-198"><a href="#main-198"><span class="linenos">198</span></a>    <span class="p">)</span>
-</span><span id="main-199"><a href="#main-199"><span class="linenos">199</span></a>    <span class="n">phen_validate_parser</span><span class="o">.</span><span class="n">set_defaults</span><span class="p">(</span><span class="n">func</span><span class="o">=</span><span class="n">phen_validate</span><span class="p">)</span>
-</span><span id="main-200"><a href="#main-200"><span class="linenos">200</span></a>
-</span><span id="main-201"><a href="#main-201"><span class="linenos">201</span></a>    <span class="c1"># phen map</span>
-</span><span id="main-202"><a href="#main-202"><span class="linenos">202</span></a>    <span class="n">phen_map_parser</span> <span class="o">=</span> <span class="n">phen_subparsers</span><span class="o">.</span><span class="n">add_parser</span><span class="p">(</span><span class="s2">&quot;map&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Process phen mapping&quot;</span><span class="p">)</span>
-</span><span id="main-203"><a href="#main-203"><span class="linenos">203</span></a>    <span class="n">phen_map_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
-</span><span id="main-204"><a href="#main-204"><span class="linenos">204</span></a>        <span class="s2">&quot;-d&quot;</span><span class="p">,</span>
-</span><span id="main-205"><a href="#main-205"><span class="linenos">205</span></a>        <span class="s2">&quot;--phen-dir&quot;</span><span class="p">,</span>
-</span><span id="main-206"><a href="#main-206"><span class="linenos">206</span></a>        <span class="nb">type</span><span class="o">=</span><span class="nb">str</span><span class="p">,</span>
-</span><span id="main-207"><a href="#main-207"><span class="linenos">207</span></a>        <span class="n">default</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">phen</span><span class="o">.</span><span class="n">DEFAULT_PHEN_PATH</span><span class="o">.</span><span class="n">resolve</span><span class="p">()),</span>
-</span><span id="main-208"><a href="#main-208"><span class="linenos">208</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;(Optional) Local phenotype workspace directory (default is ./workspace/phen).&quot;</span><span class="p">,</span>
-</span><span id="main-209"><a href="#main-209"><span class="linenos">209</span></a>    <span class="p">)</span>
-</span><span id="main-210"><a href="#main-210"><span class="linenos">210</span></a>    <span class="n">phen_map_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
-</span><span id="main-211"><a href="#main-211"><span class="linenos">211</span></a>        <span class="s2">&quot;-t&quot;</span><span class="p">,</span>
-</span><span id="main-212"><a href="#main-212"><span class="linenos">212</span></a>        <span class="s2">&quot;--target-coding&quot;</span><span class="p">,</span>
-</span><span id="main-213"><a href="#main-213"><span class="linenos">213</span></a>        <span class="n">choices</span><span class="o">=</span><span class="n">parse</span><span class="o">.</span><span class="n">SUPPORTED_CODE_TYPES</span><span class="p">,</span>
-</span><span id="main-214"><a href="#main-214"><span class="linenos">214</span></a>        <span class="n">help</span><span class="o">=</span><span class="sa">f</span><span class="s2">&quot;Specify the target coding </span><span class="si">{</span><span class="n">parse</span><span class="o">.</span><span class="n">SUPPORTED_CODE_TYPES</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="main-215"><a href="#main-215"><span class="linenos">215</span></a>    <span class="p">)</span>
-</span><span id="main-216"><a href="#main-216"><span class="linenos">216</span></a>    <span class="n">phen_map_parser</span><span class="o">.</span><span class="n">set_defaults</span><span class="p">(</span><span class="n">func</span><span class="o">=</span><span class="n">phen_map</span><span class="p">)</span>
-</span><span id="main-217"><a href="#main-217"><span class="linenos">217</span></a>
-</span><span id="main-218"><a href="#main-218"><span class="linenos">218</span></a>    <span class="c1"># phen export</span>
-</span><span id="main-219"><a href="#main-219"><span class="linenos">219</span></a>    <span class="n">phen_export_parser</span> <span class="o">=</span> <span class="n">phen_subparsers</span><span class="o">.</span><span class="n">add_parser</span><span class="p">(</span>
-</span><span id="main-220"><a href="#main-220"><span class="linenos">220</span></a>        <span class="s2">&quot;export&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Export phen to OMOP database&quot;</span>
-</span><span id="main-221"><a href="#main-221"><span class="linenos">221</span></a>    <span class="p">)</span>
-</span><span id="main-222"><a href="#main-222"><span class="linenos">222</span></a>    <span class="n">phen_export_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
-</span><span id="main-223"><a href="#main-223"><span class="linenos">223</span></a>        <span class="s2">&quot;-d&quot;</span><span class="p">,</span>
-</span><span id="main-224"><a href="#main-224"><span class="linenos">224</span></a>        <span class="s2">&quot;--phen-dir&quot;</span><span class="p">,</span>
-</span><span id="main-225"><a href="#main-225"><span class="linenos">225</span></a>        <span class="nb">type</span><span class="o">=</span><span class="nb">str</span><span class="p">,</span>
-</span><span id="main-226"><a href="#main-226"><span class="linenos">226</span></a>        <span class="n">default</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">phen</span><span class="o">.</span><span class="n">DEFAULT_PHEN_PATH</span><span class="o">.</span><span class="n">resolve</span><span class="p">()),</span>
-</span><span id="main-227"><a href="#main-227"><span class="linenos">227</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;(Optional) Local phenotype workspace directory (default is ./workspace/phen).&quot;</span><span class="p">,</span>
-</span><span id="main-228"><a href="#main-228"><span class="linenos">228</span></a>    <span class="p">)</span>
-</span><span id="main-229"><a href="#main-229"><span class="linenos">229</span></a>    <span class="n">phen_export_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
-</span><span id="main-230"><a href="#main-230"><span class="linenos">230</span></a>        <span class="s2">&quot;-v&quot;</span><span class="p">,</span>
-</span><span id="main-231"><a href="#main-231"><span class="linenos">231</span></a>        <span class="s2">&quot;--version&quot;</span><span class="p">,</span>
-</span><span id="main-232"><a href="#main-232"><span class="linenos">232</span></a>        <span class="nb">type</span><span class="o">=</span><span class="nb">str</span><span class="p">,</span>
-</span><span id="main-233"><a href="#main-233"><span class="linenos">233</span></a>        <span class="n">default</span><span class="o">=</span><span class="s2">&quot;latest&quot;</span><span class="p">,</span>
-</span><span id="main-234"><a href="#main-234"><span class="linenos">234</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Phenotype version to export, defaults to the latest version&quot;</span><span class="p">,</span>
-</span><span id="main-235"><a href="#main-235"><span class="linenos">235</span></a>    <span class="p">)</span>
-</span><span id="main-236"><a href="#main-236"><span class="linenos">236</span></a>    <span class="n">phen_export_parser</span><span class="o">.</span><span class="n">set_defaults</span><span class="p">(</span><span class="n">func</span><span class="o">=</span><span class="n">phen_export</span><span class="p">)</span>
-</span><span id="main-237"><a href="#main-237"><span class="linenos">237</span></a>
-</span><span id="main-238"><a href="#main-238"><span class="linenos">238</span></a>    <span class="c1"># phen publish</span>
-</span><span id="main-239"><a href="#main-239"><span class="linenos">239</span></a>    <span class="n">phen_publish_parser</span> <span class="o">=</span> <span class="n">phen_subparsers</span><span class="o">.</span><span class="n">add_parser</span><span class="p">(</span>
-</span><span id="main-240"><a href="#main-240"><span class="linenos">240</span></a>        <span class="s2">&quot;publish&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Publish phenotype configuration&quot;</span>
-</span><span id="main-241"><a href="#main-241"><span class="linenos">241</span></a>    <span class="p">)</span>
-</span><span id="main-242"><a href="#main-242"><span class="linenos">242</span></a>    <span class="n">phen_publish_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
-</span><span id="main-243"><a href="#main-243"><span class="linenos">243</span></a>        <span class="s2">&quot;-d&quot;</span><span class="p">,</span>
-</span><span id="main-244"><a href="#main-244"><span class="linenos">244</span></a>        <span class="s2">&quot;--phen-dir&quot;</span><span class="p">,</span>
-</span><span id="main-245"><a href="#main-245"><span class="linenos">245</span></a>        <span class="nb">type</span><span class="o">=</span><span class="nb">str</span><span class="p">,</span>
-</span><span id="main-246"><a href="#main-246"><span class="linenos">246</span></a>        <span class="n">default</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">phen</span><span class="o">.</span><span class="n">DEFAULT_PHEN_PATH</span><span class="o">.</span><span class="n">resolve</span><span class="p">()),</span>
-</span><span id="main-247"><a href="#main-247"><span class="linenos">247</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;(Optional) Local phenotype workspace directory (default is ./workspace/phen).&quot;</span><span class="p">,</span>
-</span><span id="main-248"><a href="#main-248"><span class="linenos">248</span></a>    <span class="p">)</span>
-</span><span id="main-249"><a href="#main-249"><span class="linenos">249</span></a>    <span class="n">phen_publish_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
-</span><span id="main-250"><a href="#main-250"><span class="linenos">250</span></a>        <span class="s2">&quot;-i&quot;</span><span class="p">,</span>
-</span><span id="main-251"><a href="#main-251"><span class="linenos">251</span></a>        <span class="s2">&quot;--increment&quot;</span><span class="p">,</span>
-</span><span id="main-252"><a href="#main-252"><span class="linenos">252</span></a>        <span class="nb">type</span><span class="o">=</span><span class="nb">str</span><span class="p">,</span>
-</span><span id="main-253"><a href="#main-253"><span class="linenos">253</span></a>        <span class="n">default</span><span class="o">=</span><span class="n">phen</span><span class="o">.</span><span class="n">DEFAULT_VERSION_INC</span><span class="p">,</span>
-</span><span id="main-254"><a href="#main-254"><span class="linenos">254</span></a>        <span class="n">choices</span><span class="o">=</span><span class="n">phen</span><span class="o">.</span><span class="n">SEMANTIC_VERSION_TYPES</span><span class="p">,</span>
-</span><span id="main-255"><a href="#main-255"><span class="linenos">255</span></a>        <span class="n">help</span><span class="o">=</span><span class="sa">f</span><span class="s2">&quot;Version increment: </span><span class="si">{</span><span class="n">phen</span><span class="o">.</span><span class="n">SEMANTIC_VERSION_TYPES</span><span class="si">}</span><span class="s2">, default is </span><span class="si">{</span><span class="n">phen</span><span class="o">.</span><span class="n">DEFAULT_VERSION_INC</span><span class="si">}</span><span class="s2"> increment&quot;</span><span class="p">,</span>
-</span><span id="main-256"><a href="#main-256"><span class="linenos">256</span></a>    <span class="p">)</span>
-</span><span id="main-257"><a href="#main-257"><span class="linenos">257</span></a>    <span class="n">phen_publish_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
-</span><span id="main-258"><a href="#main-258"><span class="linenos">258</span></a>        <span class="s2">&quot;-m&quot;</span><span class="p">,</span> <span class="s2">&quot;--msg&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Message to include with the published version&quot;</span>
-</span><span id="main-259"><a href="#main-259"><span class="linenos">259</span></a>    <span class="p">)</span>
-</span><span id="main-260"><a href="#main-260"><span class="linenos">260</span></a>    <span class="n">phen_publish_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
-</span><span id="main-261"><a href="#main-261"><span class="linenos">261</span></a>        <span class="s2">&quot;-r&quot;</span><span class="p">,</span> <span class="s2">&quot;--remote_url&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;URL to remote git repository&quot;</span>
-</span><span id="main-262"><a href="#main-262"><span class="linenos">262</span></a>    <span class="p">)</span>
-</span><span id="main-263"><a href="#main-263"><span class="linenos">263</span></a>    <span class="n">phen_publish_parser</span><span class="o">.</span><span class="n">set_defaults</span><span class="p">(</span><span class="n">func</span><span class="o">=</span><span class="n">phen_publish</span><span class="p">)</span>
-</span><span id="main-264"><a href="#main-264"><span class="linenos">264</span></a>
-</span><span id="main-265"><a href="#main-265"><span class="linenos">265</span></a>    <span class="c1"># phen copy</span>
-</span><span id="main-266"><a href="#main-266"><span class="linenos">266</span></a>    <span class="n">phen_copy_parser</span> <span class="o">=</span> <span class="n">phen_subparsers</span><span class="o">.</span><span class="n">add_parser</span><span class="p">(</span>
-</span><span id="main-267"><a href="#main-267"><span class="linenos">267</span></a>        <span class="s2">&quot;copy&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Publish phenotype configuration&quot;</span>
-</span><span id="main-268"><a href="#main-268"><span class="linenos">268</span></a>    <span class="p">)</span>
-</span><span id="main-269"><a href="#main-269"><span class="linenos">269</span></a>    <span class="n">phen_copy_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
-</span><span id="main-270"><a href="#main-270"><span class="linenos">270</span></a>        <span class="s2">&quot;-d&quot;</span><span class="p">,</span>
-</span><span id="main-271"><a href="#main-271"><span class="linenos">271</span></a>        <span class="s2">&quot;--phen-dir&quot;</span><span class="p">,</span>
-</span><span id="main-272"><a href="#main-272"><span class="linenos">272</span></a>        <span class="nb">type</span><span class="o">=</span><span class="nb">str</span><span class="p">,</span>
-</span><span id="main-273"><a href="#main-273"><span class="linenos">273</span></a>        <span class="n">default</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">phen</span><span class="o">.</span><span class="n">DEFAULT_PHEN_PATH</span><span class="o">.</span><span class="n">resolve</span><span class="p">()),</span>
-</span><span id="main-274"><a href="#main-274"><span class="linenos">274</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;(Optional) Local phenotype workspace directory (default is ./workspace/phen).&quot;</span><span class="p">,</span>
-</span><span id="main-275"><a href="#main-275"><span class="linenos">275</span></a>    <span class="p">)</span>
-</span><span id="main-276"><a href="#main-276"><span class="linenos">276</span></a>    <span class="n">phen_copy_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
-</span><span id="main-277"><a href="#main-277"><span class="linenos">277</span></a>        <span class="s2">&quot;-td&quot;</span><span class="p">,</span>
-</span><span id="main-278"><a href="#main-278"><span class="linenos">278</span></a>        <span class="s2">&quot;--target-dir&quot;</span><span class="p">,</span>
-</span><span id="main-279"><a href="#main-279"><span class="linenos">279</span></a>        <span class="nb">type</span><span class="o">=</span><span class="nb">str</span><span class="p">,</span>
-</span><span id="main-280"><a href="#main-280"><span class="linenos">280</span></a>        <span class="n">default</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">DEFAULT_WORKSPACE_PATH</span><span class="o">.</span><span class="n">resolve</span><span class="p">()),</span>
-</span><span id="main-281"><a href="#main-281"><span class="linenos">281</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Target directory for the copy&quot;</span><span class="p">,</span>
-</span><span id="main-282"><a href="#main-282"><span class="linenos">282</span></a>    <span class="p">)</span>
-</span><span id="main-283"><a href="#main-283"><span class="linenos">283</span></a>    <span class="n">phen_copy_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
-</span><span id="main-284"><a href="#main-284"><span class="linenos">284</span></a>        <span class="s2">&quot;-v&quot;</span><span class="p">,</span>
-</span><span id="main-285"><a href="#main-285"><span class="linenos">285</span></a>        <span class="s2">&quot;--version&quot;</span><span class="p">,</span>
-</span><span id="main-286"><a href="#main-286"><span class="linenos">286</span></a>        <span class="nb">type</span><span class="o">=</span><span class="nb">str</span><span class="p">,</span>
-</span><span id="main-287"><a href="#main-287"><span class="linenos">287</span></a>        <span class="n">default</span><span class="o">=</span><span class="s2">&quot;latest&quot;</span><span class="p">,</span>
-</span><span id="main-288"><a href="#main-288"><span class="linenos">288</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Phenotype version to copy, defaults to the latest version&quot;</span><span class="p">,</span>
-</span><span id="main-289"><a href="#main-289"><span class="linenos">289</span></a>    <span class="p">)</span>
-</span><span id="main-290"><a href="#main-290"><span class="linenos">290</span></a>    <span class="n">phen_copy_parser</span><span class="o">.</span><span class="n">set_defaults</span><span class="p">(</span><span class="n">func</span><span class="o">=</span><span class="n">phen_copy</span><span class="p">)</span>
-</span><span id="main-291"><a href="#main-291"><span class="linenos">291</span></a>
-</span><span id="main-292"><a href="#main-292"><span class="linenos">292</span></a>    <span class="c1"># phen diff</span>
-</span><span id="main-293"><a href="#main-293"><span class="linenos">293</span></a>    <span class="n">phen_diff_parser</span> <span class="o">=</span> <span class="n">phen_subparsers</span><span class="o">.</span><span class="n">add_parser</span><span class="p">(</span>
-</span><span id="main-294"><a href="#main-294"><span class="linenos">294</span></a>        <span class="s2">&quot;diff&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Publish phenotype configuration&quot;</span>
-</span><span id="main-295"><a href="#main-295"><span class="linenos">295</span></a>    <span class="p">)</span>
-</span><span id="main-296"><a href="#main-296"><span class="linenos">296</span></a>    <span class="n">phen_diff_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
-</span><span id="main-297"><a href="#main-297"><span class="linenos">297</span></a>        <span class="s2">&quot;-d&quot;</span><span class="p">,</span>
-</span><span id="main-298"><a href="#main-298"><span class="linenos">298</span></a>        <span class="s2">&quot;--phen-dir&quot;</span><span class="p">,</span>
-</span><span id="main-299"><a href="#main-299"><span class="linenos">299</span></a>        <span class="nb">type</span><span class="o">=</span><span class="nb">str</span><span class="p">,</span>
-</span><span id="main-300"><a href="#main-300"><span class="linenos">300</span></a>        <span class="n">default</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">phen</span><span class="o">.</span><span class="n">DEFAULT_PHEN_PATH</span><span class="o">.</span><span class="n">resolve</span><span class="p">()),</span>
-</span><span id="main-301"><a href="#main-301"><span class="linenos">301</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;(Optional) Local phenotype workspace directory (default is ./workspace/phen).&quot;</span><span class="p">,</span>
-</span><span id="main-302"><a href="#main-302"><span class="linenos">302</span></a>    <span class="p">)</span>
-</span><span id="main-303"><a href="#main-303"><span class="linenos">303</span></a>    <span class="n">phen_diff_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
-</span><span id="main-304"><a href="#main-304"><span class="linenos">304</span></a>        <span class="s2">&quot;-v&quot;</span><span class="p">,</span>
-</span><span id="main-305"><a href="#main-305"><span class="linenos">305</span></a>        <span class="s2">&quot;--version&quot;</span><span class="p">,</span>
-</span><span id="main-306"><a href="#main-306"><span class="linenos">306</span></a>        <span class="n">default</span><span class="o">=</span><span class="s2">&quot;latest&quot;</span><span class="p">,</span>
-</span><span id="main-307"><a href="#main-307"><span class="linenos">307</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Phenotype version to compare with an old version, defaults to the HEAD of the workspace directory&quot;</span><span class="p">,</span>
-</span><span id="main-308"><a href="#main-308"><span class="linenos">308</span></a>    <span class="p">)</span>
-</span><span id="main-309"><a href="#main-309"><span class="linenos">309</span></a>    <span class="n">phen_diff_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
-</span><span id="main-310"><a href="#main-310"><span class="linenos">310</span></a>        <span class="s2">&quot;-od&quot;</span><span class="p">,</span>
-</span><span id="main-311"><a href="#main-311"><span class="linenos">311</span></a>        <span class="s2">&quot;--old-phen-dir&quot;</span><span class="p">,</span>
-</span><span id="main-312"><a href="#main-312"><span class="linenos">312</span></a>        <span class="nb">type</span><span class="o">=</span><span class="nb">str</span><span class="p">,</span>
-</span><span id="main-313"><a href="#main-313"><span class="linenos">313</span></a>        <span class="n">default</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">phen</span><span class="o">.</span><span class="n">DEFAULT_PHEN_PATH</span><span class="o">.</span><span class="n">resolve</span><span class="p">()),</span>
-</span><span id="main-314"><a href="#main-314"><span class="linenos">314</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Directory for the old phenotype version, defaults to workspace directory&quot;</span><span class="p">,</span>
-</span><span id="main-315"><a href="#main-315"><span class="linenos">315</span></a>    <span class="p">)</span>
-</span><span id="main-316"><a href="#main-316"><span class="linenos">316</span></a>    <span class="n">phen_diff_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
-</span><span id="main-317"><a href="#main-317"><span class="linenos">317</span></a>        <span class="s2">&quot;-ov&quot;</span><span class="p">,</span>
-</span><span id="main-318"><a href="#main-318"><span class="linenos">318</span></a>        <span class="s2">&quot;--old-version&quot;</span><span class="p">,</span>
-</span><span id="main-319"><a href="#main-319"><span class="linenos">319</span></a>        <span class="n">required</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
-</span><span id="main-320"><a href="#main-320"><span class="linenos">320</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Old phenotype version to compare with the changed version&quot;</span><span class="p">,</span>
-</span><span id="main-321"><a href="#main-321"><span class="linenos">321</span></a>    <span class="p">)</span>
-</span><span id="main-322"><a href="#main-322"><span class="linenos">322</span></a>    <span class="n">phen_diff_parser</span><span class="o">.</span><span class="n">set_defaults</span><span class="p">(</span><span class="n">func</span><span class="o">=</span><span class="n">phen_diff</span><span class="p">)</span>
-</span><span id="main-323"><a href="#main-323"><span class="linenos">323</span></a>
-</span><span id="main-324"><a href="#main-324"><span class="linenos">324</span></a>    <span class="c1"># Parse arguments</span>
-</span><span id="main-325"><a href="#main-325"><span class="linenos">325</span></a>    <span class="n">args</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">parse_args</span><span class="p">()</span>
-</span><span id="main-326"><a href="#main-326"><span class="linenos">326</span></a>
-</span><span id="main-327"><a href="#main-327"><span class="linenos">327</span></a>    <span class="c1"># setup logging</span>
-</span><span id="main-328"><a href="#main-328"><span class="linenos">328</span></a>    <span class="k">if</span> <span class="n">args</span><span class="o">.</span><span class="n">debug</span><span class="p">:</span>
-</span><span id="main-329"><a href="#main-329"><span class="linenos">329</span></a>        <span class="n">lc</span><span class="o">.</span><span class="n">set_log_level</span><span class="p">(</span><span class="n">logging</span><span class="o">.</span><span class="n">DEBUG</span><span class="p">)</span>
-</span><span id="main-330"><a href="#main-330"><span class="linenos">330</span></a>
-</span><span id="main-331"><a href="#main-331"><span class="linenos">331</span></a>    <span class="c1"># Call the function associated with the command</span>
-</span><span id="main-332"><a href="#main-332"><span class="linenos">332</span></a>    <span class="n">args</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
+</span><span id="main-175"><a href="#main-175"><span class="linenos">175</span></a>        <span class="s2">&quot;-r&quot;</span><span class="p">,</span>
+</span><span id="main-176"><a href="#main-176"><span class="linenos">176</span></a>        <span class="s2">&quot;--remote_url&quot;</span><span class="p">,</span>
+</span><span id="main-177"><a href="#main-177"><span class="linenos">177</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;(Optional) URL to repository where the forked phenotype will be published.&quot;</span><span class="p">,</span>
+</span><span id="main-178"><a href="#main-178"><span class="linenos">178</span></a>    <span class="p">)</span>
+</span><span id="main-179"><a href="#main-179"><span class="linenos">179</span></a>    <span class="n">phen_fork_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
+</span><span id="main-180"><a href="#main-180"><span class="linenos">180</span></a>        <span class="s2">&quot;-u&quot;</span><span class="p">,</span>
+</span><span id="main-181"><a href="#main-181"><span class="linenos">181</span></a>        <span class="s2">&quot;--upstream-url&quot;</span><span class="p">,</span>
+</span><span id="main-182"><a href="#main-182"><span class="linenos">182</span></a>        <span class="n">required</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+</span><span id="main-183"><a href="#main-183"><span class="linenos">183</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;(Required) URL to the phenotype repository to fork.&quot;</span><span class="p">,</span>
+</span><span id="main-184"><a href="#main-184"><span class="linenos">184</span></a>    <span class="p">)</span>
+</span><span id="main-185"><a href="#main-185"><span class="linenos">185</span></a>    <span class="n">phen_fork_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
+</span><span id="main-186"><a href="#main-186"><span class="linenos">186</span></a>        <span class="s2">&quot;-v&quot;</span><span class="p">,</span>
+</span><span id="main-187"><a href="#main-187"><span class="linenos">187</span></a>        <span class="s2">&quot;--upstream-version&quot;</span><span class="p">,</span>
+</span><span id="main-188"><a href="#main-188"><span class="linenos">188</span></a>        <span class="n">required</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+</span><span id="main-189"><a href="#main-189"><span class="linenos">189</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;(Required) Phenotype version to fork.&quot;</span><span class="p">,</span>
+</span><span id="main-190"><a href="#main-190"><span class="linenos">190</span></a>    <span class="p">)</span>
+</span><span id="main-191"><a href="#main-191"><span class="linenos">191</span></a>    <span class="n">phen_fork_parser</span><span class="o">.</span><span class="n">set_defaults</span><span class="p">(</span><span class="n">func</span><span class="o">=</span><span class="n">_phen_fork</span><span class="p">)</span>
+</span><span id="main-192"><a href="#main-192"><span class="linenos">192</span></a>
+</span><span id="main-193"><a href="#main-193"><span class="linenos">193</span></a>    <span class="c1"># phen validate</span>
+</span><span id="main-194"><a href="#main-194"><span class="linenos">194</span></a>    <span class="n">phen_validate_parser</span> <span class="o">=</span> <span class="n">phen_subparsers</span><span class="o">.</span><span class="n">add_parser</span><span class="p">(</span>
+</span><span id="main-195"><a href="#main-195"><span class="linenos">195</span></a>        <span class="s2">&quot;validate&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Validate phenotype configuration&quot;</span>
+</span><span id="main-196"><a href="#main-196"><span class="linenos">196</span></a>    <span class="p">)</span>
+</span><span id="main-197"><a href="#main-197"><span class="linenos">197</span></a>    <span class="n">phen_validate_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
+</span><span id="main-198"><a href="#main-198"><span class="linenos">198</span></a>        <span class="s2">&quot;-d&quot;</span><span class="p">,</span>
+</span><span id="main-199"><a href="#main-199"><span class="linenos">199</span></a>        <span class="s2">&quot;--phen-dir&quot;</span><span class="p">,</span>
+</span><span id="main-200"><a href="#main-200"><span class="linenos">200</span></a>        <span class="nb">type</span><span class="o">=</span><span class="nb">str</span><span class="p">,</span>
+</span><span id="main-201"><a href="#main-201"><span class="linenos">201</span></a>        <span class="n">default</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">phen</span><span class="o">.</span><span class="n">DEFAULT_PHEN_PATH</span><span class="o">.</span><span class="n">resolve</span><span class="p">()),</span>
+</span><span id="main-202"><a href="#main-202"><span class="linenos">202</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;(Optional) Local phenotype workspace directory (default is ./workspace/phen).&quot;</span><span class="p">,</span>
+</span><span id="main-203"><a href="#main-203"><span class="linenos">203</span></a>    <span class="p">)</span>
+</span><span id="main-204"><a href="#main-204"><span class="linenos">204</span></a>    <span class="n">phen_validate_parser</span><span class="o">.</span><span class="n">set_defaults</span><span class="p">(</span><span class="n">func</span><span class="o">=</span><span class="n">_phen_validate</span><span class="p">)</span>
+</span><span id="main-205"><a href="#main-205"><span class="linenos">205</span></a>
+</span><span id="main-206"><a href="#main-206"><span class="linenos">206</span></a>    <span class="c1"># phen map</span>
+</span><span id="main-207"><a href="#main-207"><span class="linenos">207</span></a>    <span class="n">phen_map_parser</span> <span class="o">=</span> <span class="n">phen_subparsers</span><span class="o">.</span><span class="n">add_parser</span><span class="p">(</span><span class="s2">&quot;map&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Process phen mapping&quot;</span><span class="p">)</span>
+</span><span id="main-208"><a href="#main-208"><span class="linenos">208</span></a>    <span class="n">phen_map_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
+</span><span id="main-209"><a href="#main-209"><span class="linenos">209</span></a>        <span class="s2">&quot;-d&quot;</span><span class="p">,</span>
+</span><span id="main-210"><a href="#main-210"><span class="linenos">210</span></a>        <span class="s2">&quot;--phen-dir&quot;</span><span class="p">,</span>
+</span><span id="main-211"><a href="#main-211"><span class="linenos">211</span></a>        <span class="nb">type</span><span class="o">=</span><span class="nb">str</span><span class="p">,</span>
+</span><span id="main-212"><a href="#main-212"><span class="linenos">212</span></a>        <span class="n">default</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">phen</span><span class="o">.</span><span class="n">DEFAULT_PHEN_PATH</span><span class="o">.</span><span class="n">resolve</span><span class="p">()),</span>
+</span><span id="main-213"><a href="#main-213"><span class="linenos">213</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;(Optional) Local phenotype workspace directory (default is ./workspace/phen).&quot;</span><span class="p">,</span>
+</span><span id="main-214"><a href="#main-214"><span class="linenos">214</span></a>    <span class="p">)</span>
+</span><span id="main-215"><a href="#main-215"><span class="linenos">215</span></a>    <span class="n">phen_map_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
+</span><span id="main-216"><a href="#main-216"><span class="linenos">216</span></a>        <span class="s2">&quot;-t&quot;</span><span class="p">,</span>
+</span><span id="main-217"><a href="#main-217"><span class="linenos">217</span></a>        <span class="s2">&quot;--target-coding&quot;</span><span class="p">,</span>
+</span><span id="main-218"><a href="#main-218"><span class="linenos">218</span></a>        <span class="n">choices</span><span class="o">=</span><span class="n">parse</span><span class="o">.</span><span class="n">SUPPORTED_CODE_TYPES</span><span class="p">,</span>
+</span><span id="main-219"><a href="#main-219"><span class="linenos">219</span></a>        <span class="n">help</span><span class="o">=</span><span class="sa">f</span><span class="s2">&quot;Specify the target coding </span><span class="si">{</span><span class="n">parse</span><span class="o">.</span><span class="n">SUPPORTED_CODE_TYPES</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="main-220"><a href="#main-220"><span class="linenos">220</span></a>    <span class="p">)</span>
+</span><span id="main-221"><a href="#main-221"><span class="linenos">221</span></a>    <span class="n">phen_map_parser</span><span class="o">.</span><span class="n">set_defaults</span><span class="p">(</span><span class="n">func</span><span class="o">=</span><span class="n">_phen_map</span><span class="p">)</span>
+</span><span id="main-222"><a href="#main-222"><span class="linenos">222</span></a>
+</span><span id="main-223"><a href="#main-223"><span class="linenos">223</span></a>    <span class="c1"># phen export</span>
+</span><span id="main-224"><a href="#main-224"><span class="linenos">224</span></a>    <span class="n">phen_export_parser</span> <span class="o">=</span> <span class="n">phen_subparsers</span><span class="o">.</span><span class="n">add_parser</span><span class="p">(</span>
+</span><span id="main-225"><a href="#main-225"><span class="linenos">225</span></a>        <span class="s2">&quot;export&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Export phen to OMOP database&quot;</span>
+</span><span id="main-226"><a href="#main-226"><span class="linenos">226</span></a>    <span class="p">)</span>
+</span><span id="main-227"><a href="#main-227"><span class="linenos">227</span></a>    <span class="n">phen_export_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
+</span><span id="main-228"><a href="#main-228"><span class="linenos">228</span></a>        <span class="s2">&quot;-d&quot;</span><span class="p">,</span>
+</span><span id="main-229"><a href="#main-229"><span class="linenos">229</span></a>        <span class="s2">&quot;--phen-dir&quot;</span><span class="p">,</span>
+</span><span id="main-230"><a href="#main-230"><span class="linenos">230</span></a>        <span class="nb">type</span><span class="o">=</span><span class="nb">str</span><span class="p">,</span>
+</span><span id="main-231"><a href="#main-231"><span class="linenos">231</span></a>        <span class="n">default</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">phen</span><span class="o">.</span><span class="n">DEFAULT_PHEN_PATH</span><span class="o">.</span><span class="n">resolve</span><span class="p">()),</span>
+</span><span id="main-232"><a href="#main-232"><span class="linenos">232</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;(Optional) Local phenotype workspace directory (default is ./workspace/phen).&quot;</span><span class="p">,</span>
+</span><span id="main-233"><a href="#main-233"><span class="linenos">233</span></a>    <span class="p">)</span>
+</span><span id="main-234"><a href="#main-234"><span class="linenos">234</span></a>    <span class="n">phen_export_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
+</span><span id="main-235"><a href="#main-235"><span class="linenos">235</span></a>        <span class="s2">&quot;-v&quot;</span><span class="p">,</span>
+</span><span id="main-236"><a href="#main-236"><span class="linenos">236</span></a>        <span class="s2">&quot;--version&quot;</span><span class="p">,</span>
+</span><span id="main-237"><a href="#main-237"><span class="linenos">237</span></a>        <span class="nb">type</span><span class="o">=</span><span class="nb">str</span><span class="p">,</span>
+</span><span id="main-238"><a href="#main-238"><span class="linenos">238</span></a>        <span class="n">default</span><span class="o">=</span><span class="s2">&quot;latest&quot;</span><span class="p">,</span>
+</span><span id="main-239"><a href="#main-239"><span class="linenos">239</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Phenotype version to export, defaults to the latest version&quot;</span><span class="p">,</span>
+</span><span id="main-240"><a href="#main-240"><span class="linenos">240</span></a>    <span class="p">)</span>
+</span><span id="main-241"><a href="#main-241"><span class="linenos">241</span></a>    <span class="n">phen_export_parser</span><span class="o">.</span><span class="n">set_defaults</span><span class="p">(</span><span class="n">func</span><span class="o">=</span><span class="n">_phen_export</span><span class="p">)</span>
+</span><span id="main-242"><a href="#main-242"><span class="linenos">242</span></a>
+</span><span id="main-243"><a href="#main-243"><span class="linenos">243</span></a>    <span class="c1"># phen publish</span>
+</span><span id="main-244"><a href="#main-244"><span class="linenos">244</span></a>    <span class="n">phen_publish_parser</span> <span class="o">=</span> <span class="n">phen_subparsers</span><span class="o">.</span><span class="n">add_parser</span><span class="p">(</span>
+</span><span id="main-245"><a href="#main-245"><span class="linenos">245</span></a>        <span class="s2">&quot;publish&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Publish phenotype configuration&quot;</span>
+</span><span id="main-246"><a href="#main-246"><span class="linenos">246</span></a>    <span class="p">)</span>
+</span><span id="main-247"><a href="#main-247"><span class="linenos">247</span></a>    <span class="n">phen_publish_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
+</span><span id="main-248"><a href="#main-248"><span class="linenos">248</span></a>        <span class="s2">&quot;-d&quot;</span><span class="p">,</span>
+</span><span id="main-249"><a href="#main-249"><span class="linenos">249</span></a>        <span class="s2">&quot;--phen-dir&quot;</span><span class="p">,</span>
+</span><span id="main-250"><a href="#main-250"><span class="linenos">250</span></a>        <span class="nb">type</span><span class="o">=</span><span class="nb">str</span><span class="p">,</span>
+</span><span id="main-251"><a href="#main-251"><span class="linenos">251</span></a>        <span class="n">default</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">phen</span><span class="o">.</span><span class="n">DEFAULT_PHEN_PATH</span><span class="o">.</span><span class="n">resolve</span><span class="p">()),</span>
+</span><span id="main-252"><a href="#main-252"><span class="linenos">252</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;(Optional) Local phenotype workspace directory (default is ./workspace/phen).&quot;</span><span class="p">,</span>
+</span><span id="main-253"><a href="#main-253"><span class="linenos">253</span></a>    <span class="p">)</span>
+</span><span id="main-254"><a href="#main-254"><span class="linenos">254</span></a>    <span class="n">phen_publish_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
+</span><span id="main-255"><a href="#main-255"><span class="linenos">255</span></a>        <span class="s2">&quot;-i&quot;</span><span class="p">,</span>
+</span><span id="main-256"><a href="#main-256"><span class="linenos">256</span></a>        <span class="s2">&quot;--increment&quot;</span><span class="p">,</span>
+</span><span id="main-257"><a href="#main-257"><span class="linenos">257</span></a>        <span class="nb">type</span><span class="o">=</span><span class="nb">str</span><span class="p">,</span>
+</span><span id="main-258"><a href="#main-258"><span class="linenos">258</span></a>        <span class="n">default</span><span class="o">=</span><span class="n">phen</span><span class="o">.</span><span class="n">DEFAULT_VERSION_INC</span><span class="p">,</span>
+</span><span id="main-259"><a href="#main-259"><span class="linenos">259</span></a>        <span class="n">choices</span><span class="o">=</span><span class="n">phen</span><span class="o">.</span><span class="n">SEMANTIC_VERSION_TYPES</span><span class="p">,</span>
+</span><span id="main-260"><a href="#main-260"><span class="linenos">260</span></a>        <span class="n">help</span><span class="o">=</span><span class="sa">f</span><span class="s2">&quot;Version increment: </span><span class="si">{</span><span class="n">phen</span><span class="o">.</span><span class="n">SEMANTIC_VERSION_TYPES</span><span class="si">}</span><span class="s2">, default is </span><span class="si">{</span><span class="n">phen</span><span class="o">.</span><span class="n">DEFAULT_VERSION_INC</span><span class="si">}</span><span class="s2"> increment&quot;</span><span class="p">,</span>
+</span><span id="main-261"><a href="#main-261"><span class="linenos">261</span></a>    <span class="p">)</span>
+</span><span id="main-262"><a href="#main-262"><span class="linenos">262</span></a>    <span class="n">phen_publish_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
+</span><span id="main-263"><a href="#main-263"><span class="linenos">263</span></a>        <span class="s2">&quot;-m&quot;</span><span class="p">,</span> <span class="s2">&quot;--msg&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Message to include with the published version&quot;</span>
+</span><span id="main-264"><a href="#main-264"><span class="linenos">264</span></a>    <span class="p">)</span>
+</span><span id="main-265"><a href="#main-265"><span class="linenos">265</span></a>    <span class="n">phen_publish_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
+</span><span id="main-266"><a href="#main-266"><span class="linenos">266</span></a>        <span class="s2">&quot;-r&quot;</span><span class="p">,</span> <span class="s2">&quot;--remote_url&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;URL to remote git repository&quot;</span>
+</span><span id="main-267"><a href="#main-267"><span class="linenos">267</span></a>    <span class="p">)</span>
+</span><span id="main-268"><a href="#main-268"><span class="linenos">268</span></a>    <span class="n">phen_publish_parser</span><span class="o">.</span><span class="n">set_defaults</span><span class="p">(</span><span class="n">func</span><span class="o">=</span><span class="n">_phen_publish</span><span class="p">)</span>
+</span><span id="main-269"><a href="#main-269"><span class="linenos">269</span></a>
+</span><span id="main-270"><a href="#main-270"><span class="linenos">270</span></a>    <span class="c1"># phen copy</span>
+</span><span id="main-271"><a href="#main-271"><span class="linenos">271</span></a>    <span class="n">phen_copy_parser</span> <span class="o">=</span> <span class="n">phen_subparsers</span><span class="o">.</span><span class="n">add_parser</span><span class="p">(</span>
+</span><span id="main-272"><a href="#main-272"><span class="linenos">272</span></a>        <span class="s2">&quot;copy&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Publish phenotype configuration&quot;</span>
+</span><span id="main-273"><a href="#main-273"><span class="linenos">273</span></a>    <span class="p">)</span>
+</span><span id="main-274"><a href="#main-274"><span class="linenos">274</span></a>    <span class="n">phen_copy_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
+</span><span id="main-275"><a href="#main-275"><span class="linenos">275</span></a>        <span class="s2">&quot;-d&quot;</span><span class="p">,</span>
+</span><span id="main-276"><a href="#main-276"><span class="linenos">276</span></a>        <span class="s2">&quot;--phen-dir&quot;</span><span class="p">,</span>
+</span><span id="main-277"><a href="#main-277"><span class="linenos">277</span></a>        <span class="nb">type</span><span class="o">=</span><span class="nb">str</span><span class="p">,</span>
+</span><span id="main-278"><a href="#main-278"><span class="linenos">278</span></a>        <span class="n">default</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">phen</span><span class="o">.</span><span class="n">DEFAULT_PHEN_PATH</span><span class="o">.</span><span class="n">resolve</span><span class="p">()),</span>
+</span><span id="main-279"><a href="#main-279"><span class="linenos">279</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;(Optional) Local phenotype workspace directory (default is ./workspace/phen).&quot;</span><span class="p">,</span>
+</span><span id="main-280"><a href="#main-280"><span class="linenos">280</span></a>    <span class="p">)</span>
+</span><span id="main-281"><a href="#main-281"><span class="linenos">281</span></a>    <span class="n">phen_copy_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
+</span><span id="main-282"><a href="#main-282"><span class="linenos">282</span></a>        <span class="s2">&quot;-td&quot;</span><span class="p">,</span>
+</span><span id="main-283"><a href="#main-283"><span class="linenos">283</span></a>        <span class="s2">&quot;--target-dir&quot;</span><span class="p">,</span>
+</span><span id="main-284"><a href="#main-284"><span class="linenos">284</span></a>        <span class="nb">type</span><span class="o">=</span><span class="nb">str</span><span class="p">,</span>
+</span><span id="main-285"><a href="#main-285"><span class="linenos">285</span></a>        <span class="n">default</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">DEFAULT_WORKSPACE_PATH</span><span class="o">.</span><span class="n">resolve</span><span class="p">()),</span>
+</span><span id="main-286"><a href="#main-286"><span class="linenos">286</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Target directory for the copy&quot;</span><span class="p">,</span>
+</span><span id="main-287"><a href="#main-287"><span class="linenos">287</span></a>    <span class="p">)</span>
+</span><span id="main-288"><a href="#main-288"><span class="linenos">288</span></a>    <span class="n">phen_copy_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
+</span><span id="main-289"><a href="#main-289"><span class="linenos">289</span></a>        <span class="s2">&quot;-v&quot;</span><span class="p">,</span>
+</span><span id="main-290"><a href="#main-290"><span class="linenos">290</span></a>        <span class="s2">&quot;--version&quot;</span><span class="p">,</span>
+</span><span id="main-291"><a href="#main-291"><span class="linenos">291</span></a>        <span class="nb">type</span><span class="o">=</span><span class="nb">str</span><span class="p">,</span>
+</span><span id="main-292"><a href="#main-292"><span class="linenos">292</span></a>        <span class="n">default</span><span class="o">=</span><span class="s2">&quot;latest&quot;</span><span class="p">,</span>
+</span><span id="main-293"><a href="#main-293"><span class="linenos">293</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Phenotype version to copy, defaults to the latest version&quot;</span><span class="p">,</span>
+</span><span id="main-294"><a href="#main-294"><span class="linenos">294</span></a>    <span class="p">)</span>
+</span><span id="main-295"><a href="#main-295"><span class="linenos">295</span></a>    <span class="n">phen_copy_parser</span><span class="o">.</span><span class="n">set_defaults</span><span class="p">(</span><span class="n">func</span><span class="o">=</span><span class="n">_phen_copy</span><span class="p">)</span>
+</span><span id="main-296"><a href="#main-296"><span class="linenos">296</span></a>
+</span><span id="main-297"><a href="#main-297"><span class="linenos">297</span></a>    <span class="c1"># phen diff</span>
+</span><span id="main-298"><a href="#main-298"><span class="linenos">298</span></a>    <span class="n">phen_diff_parser</span> <span class="o">=</span> <span class="n">phen_subparsers</span><span class="o">.</span><span class="n">add_parser</span><span class="p">(</span>
+</span><span id="main-299"><a href="#main-299"><span class="linenos">299</span></a>        <span class="s2">&quot;diff&quot;</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Publish phenotype configuration&quot;</span>
+</span><span id="main-300"><a href="#main-300"><span class="linenos">300</span></a>    <span class="p">)</span>
+</span><span id="main-301"><a href="#main-301"><span class="linenos">301</span></a>    <span class="n">phen_diff_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
+</span><span id="main-302"><a href="#main-302"><span class="linenos">302</span></a>        <span class="s2">&quot;-d&quot;</span><span class="p">,</span>
+</span><span id="main-303"><a href="#main-303"><span class="linenos">303</span></a>        <span class="s2">&quot;--phen-dir&quot;</span><span class="p">,</span>
+</span><span id="main-304"><a href="#main-304"><span class="linenos">304</span></a>        <span class="nb">type</span><span class="o">=</span><span class="nb">str</span><span class="p">,</span>
+</span><span id="main-305"><a href="#main-305"><span class="linenos">305</span></a>        <span class="n">default</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">phen</span><span class="o">.</span><span class="n">DEFAULT_PHEN_PATH</span><span class="o">.</span><span class="n">resolve</span><span class="p">()),</span>
+</span><span id="main-306"><a href="#main-306"><span class="linenos">306</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;(Optional) Local phenotype workspace directory (default is ./workspace/phen).&quot;</span><span class="p">,</span>
+</span><span id="main-307"><a href="#main-307"><span class="linenos">307</span></a>    <span class="p">)</span>
+</span><span id="main-308"><a href="#main-308"><span class="linenos">308</span></a>    <span class="n">phen_diff_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
+</span><span id="main-309"><a href="#main-309"><span class="linenos">309</span></a>        <span class="s2">&quot;-v&quot;</span><span class="p">,</span>
+</span><span id="main-310"><a href="#main-310"><span class="linenos">310</span></a>        <span class="s2">&quot;--version&quot;</span><span class="p">,</span>
+</span><span id="main-311"><a href="#main-311"><span class="linenos">311</span></a>        <span class="n">default</span><span class="o">=</span><span class="s2">&quot;latest&quot;</span><span class="p">,</span>
+</span><span id="main-312"><a href="#main-312"><span class="linenos">312</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Phenotype version to compare with an old version, defaults to the HEAD of the workspace directory&quot;</span><span class="p">,</span>
+</span><span id="main-313"><a href="#main-313"><span class="linenos">313</span></a>    <span class="p">)</span>
+</span><span id="main-314"><a href="#main-314"><span class="linenos">314</span></a>    <span class="n">phen_diff_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
+</span><span id="main-315"><a href="#main-315"><span class="linenos">315</span></a>        <span class="s2">&quot;-od&quot;</span><span class="p">,</span>
+</span><span id="main-316"><a href="#main-316"><span class="linenos">316</span></a>        <span class="s2">&quot;--old-phen-dir&quot;</span><span class="p">,</span>
+</span><span id="main-317"><a href="#main-317"><span class="linenos">317</span></a>        <span class="nb">type</span><span class="o">=</span><span class="nb">str</span><span class="p">,</span>
+</span><span id="main-318"><a href="#main-318"><span class="linenos">318</span></a>        <span class="n">default</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">phen</span><span class="o">.</span><span class="n">DEFAULT_PHEN_PATH</span><span class="o">.</span><span class="n">resolve</span><span class="p">()),</span>
+</span><span id="main-319"><a href="#main-319"><span class="linenos">319</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Directory for the old phenotype version, defaults to workspace directory&quot;</span><span class="p">,</span>
+</span><span id="main-320"><a href="#main-320"><span class="linenos">320</span></a>    <span class="p">)</span>
+</span><span id="main-321"><a href="#main-321"><span class="linenos">321</span></a>    <span class="n">phen_diff_parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
+</span><span id="main-322"><a href="#main-322"><span class="linenos">322</span></a>        <span class="s2">&quot;-ov&quot;</span><span class="p">,</span>
+</span><span id="main-323"><a href="#main-323"><span class="linenos">323</span></a>        <span class="s2">&quot;--old-version&quot;</span><span class="p">,</span>
+</span><span id="main-324"><a href="#main-324"><span class="linenos">324</span></a>        <span class="n">required</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+</span><span id="main-325"><a href="#main-325"><span class="linenos">325</span></a>        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Old phenotype version to compare with the changed version&quot;</span><span class="p">,</span>
+</span><span id="main-326"><a href="#main-326"><span class="linenos">326</span></a>    <span class="p">)</span>
+</span><span id="main-327"><a href="#main-327"><span class="linenos">327</span></a>    <span class="n">phen_diff_parser</span><span class="o">.</span><span class="n">set_defaults</span><span class="p">(</span><span class="n">func</span><span class="o">=</span><span class="n">_phen_diff</span><span class="p">)</span>
+</span><span id="main-328"><a href="#main-328"><span class="linenos">328</span></a>
+</span><span id="main-329"><a href="#main-329"><span class="linenos">329</span></a>    <span class="c1"># Parse arguments</span>
+</span><span id="main-330"><a href="#main-330"><span class="linenos">330</span></a>    <span class="n">args</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">parse_args</span><span class="p">()</span>
+</span><span id="main-331"><a href="#main-331"><span class="linenos">331</span></a>
+</span><span id="main-332"><a href="#main-332"><span class="linenos">332</span></a>    <span class="c1"># setup logging</span>
+</span><span id="main-333"><a href="#main-333"><span class="linenos">333</span></a>    <span class="k">if</span> <span class="n">args</span><span class="o">.</span><span class="n">debug</span><span class="p">:</span>
+</span><span id="main-334"><a href="#main-334"><span class="linenos">334</span></a>        <span class="n">lc</span><span class="o">.</span><span class="n">set_log_level</span><span class="p">(</span><span class="n">logging</span><span class="o">.</span><span class="n">DEBUG</span><span class="p">)</span>
+</span><span id="main-335"><a href="#main-335"><span class="linenos">335</span></a>
+</span><span id="main-336"><a href="#main-336"><span class="linenos">336</span></a>    <span class="c1"># Call the function associated with the command</span>
+</span><span id="main-337"><a href="#main-337"><span class="linenos">337</span></a>    <span class="n">args</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
 </span></pre></div>
 
 
diff --git a/docs/api/acmc/omop.html b/docs/api/acmc/omop.html
index 405e4777729e6b6956ce89e4684c14fff18388b6..adb10a9357eb6c14fb00bd3f064879a7a7481a92 100644
--- a/docs/api/acmc/omop.html
+++ b/docs/api/acmc/omop.html
@@ -26,18 +26,10 @@
             <input type="search" placeholder="Search..." role="searchbox" aria-label="search"
                    pattern=".+" required>
 
-            <h2>Contents</h2>
-            <ul>
-  <li><a href="#omop-module">omop module</a></li>
-</ul>
-
 
 
             <h2>API Documentation</h2>
                 <ul class="memberlist">
-            <li>
-                    <a class="variable" href="#logger">logger</a>
-            </li>
             <li>
                     <a class="variable" href="#VOCAB_PATH">VOCAB_PATH</a>
             </li>
@@ -105,7 +97,7 @@
                     <h1 class="modulename">
 <a href="./../acmc.html">acmc</a><wbr>.omop    </h1>
 
-                        <div class="docstring"><h1 id="omop-module">omop module</h1>
+                        <div class="docstring"><p>omop.py module</p>
 
 <p>This module provides functionality to manage OMOP vocabularies.</p>
 </div>
@@ -115,8 +107,8 @@
                         <label class="view-source-button" for="mod-omop-view-source"><span>View Source</span></label>
 
                         <div class="pdoc-code codehilite"><pre><span></span><span id="L-1"><a href="#L-1"><span class="linenos">  1</span></a><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-2"><a href="#L-2"><span class="linenos">  2</span></a><span class="sd">omop module</span>
-</span><span id="L-3"><a href="#L-3"><span class="linenos">  3</span></a><span class="sd">================</span>
+</span><span id="L-2"><a href="#L-2"><span class="linenos">  2</span></a><span class="sd">omop.py module</span>
+</span><span id="L-3"><a href="#L-3"><span class="linenos">  3</span></a>
 </span><span id="L-4"><a href="#L-4"><span class="linenos">  4</span></a><span class="sd">This module provides functionality to manage OMOP vocabularies.</span>
 </span><span id="L-5"><a href="#L-5"><span class="linenos">  5</span></a><span class="sd">&quot;&quot;&quot;</span>
 </span><span id="L-6"><a href="#L-6"><span class="linenos">  6</span></a>
@@ -130,410 +122,412 @@
 </span><span id="L-14"><a href="#L-14"><span class="linenos"> 14</span></a><span class="kn">import</span><span class="w"> </span><span class="nn">json</span>
 </span><span id="L-15"><a href="#L-15"><span class="linenos"> 15</span></a><span class="kn">import</span><span class="w"> </span><span class="nn">yaml</span>
 </span><span id="L-16"><a href="#L-16"><span class="linenos"> 16</span></a><span class="kn">from</span><span class="w"> </span><span class="nn">pathlib</span><span class="w"> </span><span class="kn">import</span> <span class="n">Path</span>
-</span><span id="L-17"><a href="#L-17"><span class="linenos"> 17</span></a>
-</span><span id="L-18"><a href="#L-18"><span class="linenos"> 18</span></a><span class="kn">from</span><span class="w"> </span><span class="nn">acmc</span><span class="w"> </span><span class="kn">import</span> <span class="n">util</span><span class="p">,</span> <span class="n">logging_config</span>
-</span><span id="L-19"><a href="#L-19"><span class="linenos"> 19</span></a>
-</span><span id="L-20"><a href="#L-20"><span class="linenos"> 20</span></a><span class="c1"># setup logging</span>
-</span><span id="L-21"><a href="#L-21"><span class="linenos"> 21</span></a><span class="n">logger</span> <span class="o">=</span> <span class="n">logging_config</span><span class="o">.</span><span class="n">setup_logger</span><span class="p">()</span>
-</span><span id="L-22"><a href="#L-22"><span class="linenos"> 22</span></a>
-</span><span id="L-23"><a href="#L-23"><span class="linenos"> 23</span></a><span class="c1"># constants</span>
-</span><span id="L-24"><a href="#L-24"><span class="linenos"> 24</span></a><span class="n">VOCAB_PATH</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="s2">&quot;./vocab/omop&quot;</span><span class="p">)</span>
+</span><span id="L-17"><a href="#L-17"><span class="linenos"> 17</span></a><span class="kn">from</span><span class="w"> </span><span class="nn">acmc</span><span class="w"> </span><span class="kn">import</span> <span class="n">util</span><span class="p">,</span> <span class="n">logging_config</span>
+</span><span id="L-18"><a href="#L-18"><span class="linenos"> 18</span></a>
+</span><span id="L-19"><a href="#L-19"><span class="linenos"> 19</span></a><span class="c1"># setup logging</span>
+</span><span id="L-20"><a href="#L-20"><span class="linenos"> 20</span></a><span class="n">_logger</span> <span class="o">=</span> <span class="n">logging_config</span><span class="o">.</span><span class="n">setup_logger</span><span class="p">()</span>
+</span><span id="L-21"><a href="#L-21"><span class="linenos"> 21</span></a>
+</span><span id="L-22"><a href="#L-22"><span class="linenos"> 22</span></a><span class="n">VOCAB_PATH</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="s2">&quot;./vocab/omop&quot;</span><span class="p">)</span>
+</span><span id="L-23"><a href="#L-23"><span class="linenos"> 23</span></a><span class="sd">&quot;&quot;&quot;Default OMOP vocabulary path&quot;&quot;&quot;</span>
+</span><span id="L-24"><a href="#L-24"><span class="linenos"> 24</span></a>
 </span><span id="L-25"><a href="#L-25"><span class="linenos"> 25</span></a><span class="n">OMOP_CDM_Version</span> <span class="o">=</span> <span class="s2">&quot;54&quot;</span>
-</span><span id="L-26"><a href="#L-26"><span class="linenos"> 26</span></a><span class="n">OMOP_DB_FILENAME</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;omop_</span><span class="si">{</span><span class="n">OMOP_CDM_Version</span><span class="si">}</span><span class="s2">.sqlite&quot;</span>
-</span><span id="L-27"><a href="#L-27"><span class="linenos"> 27</span></a><span class="n">DB_PATH</span> <span class="o">=</span> <span class="n">VOCAB_PATH</span> <span class="o">/</span> <span class="n">OMOP_DB_FILENAME</span>
-</span><span id="L-28"><a href="#L-28"><span class="linenos"> 28</span></a><span class="n">VERSION_FILE</span> <span class="o">=</span> <span class="s2">&quot;omop_version.yml&quot;</span>
-</span><span id="L-29"><a href="#L-29"><span class="linenos"> 29</span></a><span class="n">VERSION_PATH</span> <span class="o">=</span> <span class="n">VOCAB_PATH</span> <span class="o">/</span> <span class="n">VERSION_FILE</span>
-</span><span id="L-30"><a href="#L-30"><span class="linenos"> 30</span></a><span class="n">EXPORT_FILE</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;omop_</span><span class="si">{</span><span class="n">OMOP_CDM_Version</span><span class="si">}</span><span class="s2">_export.sqlite&quot;</span>
-</span><span id="L-31"><a href="#L-31"><span class="linenos"> 31</span></a>
-</span><span id="L-32"><a href="#L-32"><span class="linenos"> 32</span></a><span class="n">vocabularies</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-33"><a href="#L-33"><span class="linenos"> 33</span></a>    <span class="s2">&quot;source&quot;</span><span class="p">:</span> <span class="s2">&quot;OHDSI Athena&quot;</span><span class="p">,</span>
-</span><span id="L-34"><a href="#L-34"><span class="linenos"> 34</span></a>    <span class="s2">&quot;url&quot;</span><span class="p">:</span> <span class="s2">&quot;https://athena.ohdsi.org/vocabulary/list&quot;</span><span class="p">,</span>
-</span><span id="L-35"><a href="#L-35"><span class="linenos"> 35</span></a>    <span class="s2">&quot;cdm_version&quot;</span><span class="p">:</span> <span class="n">OMOP_CDM_Version</span><span class="p">,</span>
-</span><span id="L-36"><a href="#L-36"><span class="linenos"> 36</span></a>    <span class="s2">&quot;version&quot;</span><span class="p">:</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
-</span><span id="L-37"><a href="#L-37"><span class="linenos"> 37</span></a>    <span class="s2">&quot;vocabularies&quot;</span><span class="p">:</span> <span class="p">[</span>
-</span><span id="L-38"><a href="#L-38"><span class="linenos"> 38</span></a>        <span class="p">{</span><span class="s2">&quot;id&quot;</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> <span class="s2">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;SNOMED&quot;</span><span class="p">},</span>  <span class="c1"># No license required</span>
-</span><span id="L-39"><a href="#L-39"><span class="linenos"> 39</span></a>        <span class="p">{</span><span class="s2">&quot;id&quot;</span><span class="p">:</span> <span class="mi">2</span><span class="p">,</span> <span class="s2">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;ICD9CM&quot;</span><span class="p">},</span>  <span class="c1"># No license required</span>
-</span><span id="L-40"><a href="#L-40"><span class="linenos"> 40</span></a>        <span class="p">{</span><span class="s2">&quot;id&quot;</span><span class="p">:</span> <span class="mi">17</span><span class="p">,</span> <span class="s2">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;Readv2&quot;</span><span class="p">},</span>  <span class="c1"># No license required</span>
-</span><span id="L-41"><a href="#L-41"><span class="linenos"> 41</span></a>        <span class="p">{</span><span class="s2">&quot;id&quot;</span><span class="p">:</span> <span class="mi">21</span><span class="p">,</span> <span class="s2">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;ATC&quot;</span><span class="p">},</span>  <span class="c1"># No license required</span>
-</span><span id="L-42"><a href="#L-42"><span class="linenos"> 42</span></a>        <span class="p">{</span><span class="s2">&quot;id&quot;</span><span class="p">:</span> <span class="mi">55</span><span class="p">,</span> <span class="s2">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;OPCS4&quot;</span><span class="p">},</span>  <span class="c1"># No license required</span>
-</span><span id="L-43"><a href="#L-43"><span class="linenos"> 43</span></a>        <span class="p">{</span><span class="s2">&quot;id&quot;</span><span class="p">:</span> <span class="mi">57</span><span class="p">,</span> <span class="s2">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;HES Specialty&quot;</span><span class="p">},</span>  <span class="c1"># No license required</span>
-</span><span id="L-44"><a href="#L-44"><span class="linenos"> 44</span></a>        <span class="p">{</span><span class="s2">&quot;id&quot;</span><span class="p">:</span> <span class="mi">70</span><span class="p">,</span> <span class="s2">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;ICD10CM&quot;</span><span class="p">},</span>  <span class="c1"># No license required</span>
-</span><span id="L-45"><a href="#L-45"><span class="linenos"> 45</span></a>        <span class="p">{</span><span class="s2">&quot;id&quot;</span><span class="p">:</span> <span class="mi">75</span><span class="p">,</span> <span class="s2">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;dm+d&quot;</span><span class="p">},</span>  <span class="c1"># No license required</span>
-</span><span id="L-46"><a href="#L-46"><span class="linenos"> 46</span></a>        <span class="p">{</span><span class="s2">&quot;id&quot;</span><span class="p">:</span> <span class="mi">144</span><span class="p">,</span> <span class="s2">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;UK Biobank&quot;</span><span class="p">},</span>  <span class="c1"># No license required</span>
-</span><span id="L-47"><a href="#L-47"><span class="linenos"> 47</span></a>        <span class="p">{</span><span class="s2">&quot;id&quot;</span><span class="p">:</span> <span class="mi">154</span><span class="p">,</span> <span class="s2">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;NHS Ethnic Category&quot;</span><span class="p">},</span>  <span class="c1"># No license required</span>
-</span><span id="L-48"><a href="#L-48"><span class="linenos"> 48</span></a>        <span class="p">{</span><span class="s2">&quot;id&quot;</span><span class="p">:</span> <span class="mi">155</span><span class="p">,</span> <span class="s2">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;NHS Place of Service&quot;</span><span class="p">},</span>  <span class="c1"># No license required</span>
-</span><span id="L-49"><a href="#L-49"><span class="linenos"> 49</span></a>    <span class="p">],</span>
-</span><span id="L-50"><a href="#L-50"><span class="linenos"> 50</span></a>    <span class="s2">&quot;tables&quot;</span><span class="p">:</span> <span class="p">[],</span>
-</span><span id="L-51"><a href="#L-51"><span class="linenos"> 51</span></a><span class="p">}</span>
-</span><span id="L-52"><a href="#L-52"><span class="linenos"> 52</span></a>
-</span><span id="L-53"><a href="#L-53"><span class="linenos"> 53</span></a><span class="n">omop_vocab_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-54"><a href="#L-54"><span class="linenos"> 54</span></a>    <span class="s2">&quot;read2&quot;</span><span class="p">:</span> <span class="s2">&quot;Read&quot;</span><span class="p">,</span>
-</span><span id="L-55"><a href="#L-55"><span class="linenos"> 55</span></a>    <span class="s2">&quot;read3&quot;</span><span class="p">:</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-56"><a href="#L-56"><span class="linenos"> 56</span></a>    <span class="s2">&quot;icd10&quot;</span><span class="p">:</span> <span class="s2">&quot;ICD10CM&quot;</span><span class="p">,</span>
-</span><span id="L-57"><a href="#L-57"><span class="linenos"> 57</span></a>    <span class="s2">&quot;snomed&quot;</span><span class="p">:</span> <span class="s2">&quot;SNOMED&quot;</span><span class="p">,</span>
-</span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</span></a>    <span class="s2">&quot;opcs4&quot;</span><span class="p">:</span> <span class="s2">&quot;OPCS4&quot;</span><span class="p">,</span>
-</span><span id="L-59"><a href="#L-59"><span class="linenos"> 59</span></a>    <span class="s2">&quot;atc&quot;</span><span class="p">:</span> <span class="s2">&quot;ATC&quot;</span><span class="p">,</span>
-</span><span id="L-60"><a href="#L-60"><span class="linenos"> 60</span></a>    <span class="s2">&quot;med&quot;</span><span class="p">:</span> <span class="kc">None</span><span class="p">,</span>
-</span><span id="L-61"><a href="#L-61"><span class="linenos"> 61</span></a>    <span class="s2">&quot;cprd&quot;</span><span class="p">:</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-26"><a href="#L-26"><span class="linenos"> 26</span></a><span class="sd">&quot;&quot;&quot;Supported OMOP CDM version number&quot;&quot;&quot;</span>
+</span><span id="L-27"><a href="#L-27"><span class="linenos"> 27</span></a>
+</span><span id="L-28"><a href="#L-28"><span class="linenos"> 28</span></a><span class="n">OMOP_DB_FILENAME</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;omop_</span><span class="si">{</span><span class="n">OMOP_CDM_Version</span><span class="si">}</span><span class="s2">.sqlite&quot;</span>
+</span><span id="L-29"><a href="#L-29"><span class="linenos"> 29</span></a><span class="sd">&quot;&quot;&quot;Default OMOP sqllite database filename&quot;&quot;&quot;</span>
+</span><span id="L-30"><a href="#L-30"><span class="linenos"> 30</span></a>
+</span><span id="L-31"><a href="#L-31"><span class="linenos"> 31</span></a><span class="n">DB_PATH</span> <span class="o">=</span> <span class="n">VOCAB_PATH</span> <span class="o">/</span> <span class="n">OMOP_DB_FILENAME</span>
+</span><span id="L-32"><a href="#L-32"><span class="linenos"> 32</span></a><span class="sd">&quot;&quot;&quot;Default OMOP sqllite database path&quot;&quot;&quot;</span>
+</span><span id="L-33"><a href="#L-33"><span class="linenos"> 33</span></a>
+</span><span id="L-34"><a href="#L-34"><span class="linenos"> 34</span></a><span class="n">VERSION_FILE</span> <span class="o">=</span> <span class="s2">&quot;omop_version.yml&quot;</span>
+</span><span id="L-35"><a href="#L-35"><span class="linenos"> 35</span></a><span class="sd">&quot;&quot;&quot;Default OMOP version file&quot;&quot;&quot;</span>
+</span><span id="L-36"><a href="#L-36"><span class="linenos"> 36</span></a>
+</span><span id="L-37"><a href="#L-37"><span class="linenos"> 37</span></a><span class="n">VERSION_PATH</span> <span class="o">=</span> <span class="n">VOCAB_PATH</span> <span class="o">/</span> <span class="n">VERSION_FILE</span>
+</span><span id="L-38"><a href="#L-38"><span class="linenos"> 38</span></a><span class="sd">&quot;&quot;&quot;Default OMOP version path&quot;&quot;&quot;</span>
+</span><span id="L-39"><a href="#L-39"><span class="linenos"> 39</span></a>
+</span><span id="L-40"><a href="#L-40"><span class="linenos"> 40</span></a><span class="n">EXPORT_FILE</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;omop_</span><span class="si">{</span><span class="n">OMOP_CDM_Version</span><span class="si">}</span><span class="s2">_export.sqlite&quot;</span>
+</span><span id="L-41"><a href="#L-41"><span class="linenos"> 41</span></a><span class="sd">&quot;&quot;&quot;Default OMOP export database filename&quot;&quot;&quot;</span>
+</span><span id="L-42"><a href="#L-42"><span class="linenos"> 42</span></a>
+</span><span id="L-43"><a href="#L-43"><span class="linenos"> 43</span></a><span class="n">vocabularies</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-44"><a href="#L-44"><span class="linenos"> 44</span></a>    <span class="s2">&quot;source&quot;</span><span class="p">:</span> <span class="s2">&quot;OHDSI Athena&quot;</span><span class="p">,</span>
+</span><span id="L-45"><a href="#L-45"><span class="linenos"> 45</span></a>    <span class="s2">&quot;url&quot;</span><span class="p">:</span> <span class="s2">&quot;https://athena.ohdsi.org/vocabulary/list&quot;</span><span class="p">,</span>
+</span><span id="L-46"><a href="#L-46"><span class="linenos"> 46</span></a>    <span class="s2">&quot;cdm_version&quot;</span><span class="p">:</span> <span class="n">OMOP_CDM_Version</span><span class="p">,</span>
+</span><span id="L-47"><a href="#L-47"><span class="linenos"> 47</span></a>    <span class="s2">&quot;version&quot;</span><span class="p">:</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
+</span><span id="L-48"><a href="#L-48"><span class="linenos"> 48</span></a>    <span class="s2">&quot;vocabularies&quot;</span><span class="p">:</span> <span class="p">[</span>
+</span><span id="L-49"><a href="#L-49"><span class="linenos"> 49</span></a>        <span class="p">{</span><span class="s2">&quot;id&quot;</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> <span class="s2">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;SNOMED&quot;</span><span class="p">},</span>  <span class="c1"># No license required</span>
+</span><span id="L-50"><a href="#L-50"><span class="linenos"> 50</span></a>        <span class="p">{</span><span class="s2">&quot;id&quot;</span><span class="p">:</span> <span class="mi">2</span><span class="p">,</span> <span class="s2">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;ICD9CM&quot;</span><span class="p">},</span>  <span class="c1"># No license required</span>
+</span><span id="L-51"><a href="#L-51"><span class="linenos"> 51</span></a>        <span class="p">{</span><span class="s2">&quot;id&quot;</span><span class="p">:</span> <span class="mi">17</span><span class="p">,</span> <span class="s2">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;Readv2&quot;</span><span class="p">},</span>  <span class="c1"># No license required</span>
+</span><span id="L-52"><a href="#L-52"><span class="linenos"> 52</span></a>        <span class="p">{</span><span class="s2">&quot;id&quot;</span><span class="p">:</span> <span class="mi">21</span><span class="p">,</span> <span class="s2">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;ATC&quot;</span><span class="p">},</span>  <span class="c1"># No license required</span>
+</span><span id="L-53"><a href="#L-53"><span class="linenos"> 53</span></a>        <span class="p">{</span><span class="s2">&quot;id&quot;</span><span class="p">:</span> <span class="mi">55</span><span class="p">,</span> <span class="s2">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;OPCS4&quot;</span><span class="p">},</span>  <span class="c1"># No license required</span>
+</span><span id="L-54"><a href="#L-54"><span class="linenos"> 54</span></a>        <span class="p">{</span><span class="s2">&quot;id&quot;</span><span class="p">:</span> <span class="mi">57</span><span class="p">,</span> <span class="s2">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;HES Specialty&quot;</span><span class="p">},</span>  <span class="c1"># No license required</span>
+</span><span id="L-55"><a href="#L-55"><span class="linenos"> 55</span></a>        <span class="p">{</span><span class="s2">&quot;id&quot;</span><span class="p">:</span> <span class="mi">70</span><span class="p">,</span> <span class="s2">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;ICD10CM&quot;</span><span class="p">},</span>  <span class="c1"># No license required</span>
+</span><span id="L-56"><a href="#L-56"><span class="linenos"> 56</span></a>        <span class="p">{</span><span class="s2">&quot;id&quot;</span><span class="p">:</span> <span class="mi">75</span><span class="p">,</span> <span class="s2">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;dm+d&quot;</span><span class="p">},</span>  <span class="c1"># No license required</span>
+</span><span id="L-57"><a href="#L-57"><span class="linenos"> 57</span></a>        <span class="p">{</span><span class="s2">&quot;id&quot;</span><span class="p">:</span> <span class="mi">144</span><span class="p">,</span> <span class="s2">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;UK Biobank&quot;</span><span class="p">},</span>  <span class="c1"># No license required</span>
+</span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</span></a>        <span class="p">{</span><span class="s2">&quot;id&quot;</span><span class="p">:</span> <span class="mi">154</span><span class="p">,</span> <span class="s2">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;NHS Ethnic Category&quot;</span><span class="p">},</span>  <span class="c1"># No license required</span>
+</span><span id="L-59"><a href="#L-59"><span class="linenos"> 59</span></a>        <span class="p">{</span><span class="s2">&quot;id&quot;</span><span class="p">:</span> <span class="mi">155</span><span class="p">,</span> <span class="s2">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;NHS Place of Service&quot;</span><span class="p">},</span>  <span class="c1"># No license required</span>
+</span><span id="L-60"><a href="#L-60"><span class="linenos"> 60</span></a>    <span class="p">],</span>
+</span><span id="L-61"><a href="#L-61"><span class="linenos"> 61</span></a>    <span class="s2">&quot;tables&quot;</span><span class="p">:</span> <span class="p">[],</span>
 </span><span id="L-62"><a href="#L-62"><span class="linenos"> 62</span></a><span class="p">}</span>
-</span><span id="L-63"><a href="#L-63"><span class="linenos"> 63</span></a>
+</span><span id="L-63"><a href="#L-63"><span class="linenos"> 63</span></a><span class="sd">&quot;&quot;&quot;Required OMOP vocabularies definition&quot;&quot;&quot;</span>
 </span><span id="L-64"><a href="#L-64"><span class="linenos"> 64</span></a>
-</span><span id="L-65"><a href="#L-65"><span class="linenos"> 65</span></a><span class="k">def</span><span class="w"> </span><span class="nf">install</span><span class="p">(</span><span class="n">omop_zip_file</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">version</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
-</span><span id="L-66"><a href="#L-66"><span class="linenos"> 66</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;&quot;Installs the OMOP release csv files in a file-based sql database</span>
-</span><span id="L-67"><a href="#L-67"><span class="linenos"> 67</span></a>
-</span><span id="L-68"><a href="#L-68"><span class="linenos"> 68</span></a><span class="sd">    Args:</span>
-</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a><span class="sd">        omop_zip_file (str): vocabularies zip file distributed by OHDSI Athena</span>
-</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a><span class="sd">        version (str): version of the vocabularies distributed by OHDSI Athena</span>
-</span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</span></a>
-</span><span id="L-72"><a href="#L-72"><span class="linenos"> 72</span></a><span class="sd">    Raises:</span>
-</span><span id="L-73"><a href="#L-73"><span class="linenos"> 73</span></a><span class="sd">        ValueError: if the zip file does not exist</span>
-</span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</span></a><span class="sd">        ValueError: if the file is not a zip file</span>
-</span><span id="L-75"><a href="#L-75"><span class="linenos"> 75</span></a><span class="sd">        Exception: if error reading omop csv files</span>
-</span><span id="L-76"><a href="#L-76"><span class="linenos"> 76</span></a><span class="sd">    &quot;&quot;&quot;</span>
-</span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Installing OMOP from zip file: </span><span class="si">{</span><span class="n">omop_zip_file</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-78"><a href="#L-78"><span class="linenos"> 78</span></a>    <span class="n">omop_zip_path</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="n">omop_zip_file</span><span class="p">)</span>
-</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a>
-</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a>    <span class="c1"># Check if the file exists and is a ZIP file</span>
-</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">omop_zip_path</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
-</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a>        <span class="n">msg</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">omop_zip_path</span><span class="si">}</span><span class="s2"> does not exist.&quot;</span>
-</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
-</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a>        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
-</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a>    
-</span><span id="L-86"><a href="#L-86"><span class="linenos"> 86</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">zipfile</span><span class="o">.</span><span class="n">is_zipfile</span><span class="p">(</span><span class="n">omop_zip_path</span><span class="p">):</span>
-</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a>        <span class="n">msg</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;Error: </span><span class="si">{</span><span class="n">omop_zip_path</span><span class="si">}</span><span class="s2"> is not a valid ZIP file.&quot;</span>
-</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
-</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a>        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
-</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a>
-</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a>    <span class="c1"># check codes directory exists and if not create it</span>
-</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">VOCAB_PATH</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
-</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a>        <span class="n">VOCAB_PATH</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">parents</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;OMOP directory &#39;</span><span class="si">{</span><span class="n">VOCAB_PATH</span><span class="si">}</span><span class="s2">&#39; created.&quot;</span><span class="p">)</span>
-</span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</span></a>    <span class="k">else</span><span class="p">:</span>
-</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a>        <span class="c1"># removing existing OMOP files</span>
-</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a>        <span class="n">csv_files</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">VOCAB_PATH</span><span class="o">.</span><span class="n">glob</span><span class="p">(</span><span class="s2">&quot;*.csv&quot;</span><span class="p">))</span>
-</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a>        <span class="k">for</span> <span class="n">file</span> <span class="ow">in</span> <span class="n">csv_files</span><span class="p">:</span>
-</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a>            <span class="n">file</span><span class="o">.</span><span class="n">unlink</span><span class="p">()</span>
-</span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a>            <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Deleted OMOP csv file: </span><span class="si">{</span><span class="n">file</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-101"><a href="#L-101"><span class="linenos">101</span></a>
-</span><span id="L-102"><a href="#L-102"><span class="linenos">102</span></a>    <span class="c1"># Extract ZIP contents</span>
-</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a>    <span class="k">with</span> <span class="n">zipfile</span><span class="o">.</span><span class="n">ZipFile</span><span class="p">(</span><span class="n">omop_zip_path</span><span class="p">,</span> <span class="s2">&quot;r&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">zip_ref</span><span class="p">:</span>
-</span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a>        <span class="n">zip_ref</span><span class="o">.</span><span class="n">extractall</span><span class="p">(</span><span class="n">VOCAB_PATH</span><span class="p">)</span>
-</span><span id="L-105"><a href="#L-105"><span class="linenos">105</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Extracted OMOP zip file </span><span class="si">{</span><span class="n">omop_zip_path</span><span class="si">}</span><span class="s2"> to </span><span class="si">{</span><span class="n">VOCAB_PATH</span><span class="si">}</span><span class="s2">/&quot;</span><span class="p">)</span>
-</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a>
-</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a>    <span class="c1"># connect to database, if it does not exist it will be created</span>
-</span><span id="L-108"><a href="#L-108"><span class="linenos">108</span></a>    <span class="n">conn</span> <span class="o">=</span> <span class="n">sqlite3</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="n">DB_PATH</span><span class="p">)</span>
-</span><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a>
-</span><span id="L-110"><a href="#L-110"><span class="linenos">110</span></a>    <span class="c1"># Iterate through files in the folder</span>
-</span><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a>    <span class="n">csv_files</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">VOCAB_PATH</span><span class="o">.</span><span class="n">glob</span><span class="p">(</span><span class="s2">&quot;*.csv&quot;</span><span class="p">))</span>
-</span><span id="L-112"><a href="#L-112"><span class="linenos">112</span></a>    <span class="n">total_tables_count</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">csv_files</span><span class="p">)</span>
-</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a>    <span class="n">table_count</span> <span class="o">=</span> <span class="mi">1</span>
-</span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a>    <span class="k">for</span> <span class="n">filename</span> <span class="ow">in</span> <span class="n">csv_files</span><span class="p">:</span>
-</span><span id="L-115"><a href="#L-115"><span class="linenos">115</span></a>        <span class="k">try</span><span class="p">:</span>
-</span><span id="L-116"><a href="#L-116"><span class="linenos">116</span></a>            <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span>
-</span><span id="L-117"><a href="#L-117"><span class="linenos">117</span></a>                <span class="sa">f</span><span class="s2">&quot;Processing </span><span class="si">{</span><span class="n">table_count</span><span class="si">}</span><span class="s2"> of </span><span class="si">{</span><span class="n">total_tables_count</span><span class="si">}</span><span class="s2"> tables: </span><span class="si">{</span><span class="n">filename</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-118"><a href="#L-118"><span class="linenos">118</span></a>            <span class="p">)</span>
-</span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a>            <span class="c1"># read the CSV file with the specified delimiter</span>
-</span><span id="L-120"><a href="#L-120"><span class="linenos">120</span></a>            <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_csv</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="n">delimiter</span><span class="o">=</span><span class="s2">&quot;</span><span class="se">\t</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">low_memory</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="L-121"><a href="#L-121"><span class="linenos">121</span></a>
-</span><span id="L-122"><a href="#L-122"><span class="linenos">122</span></a>            <span class="c1"># export Table to sqlite db</span>
-</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a>            <span class="n">df</span><span class="o">.</span><span class="n">to_sql</span><span class="p">(</span><span class="n">filename</span><span class="o">.</span><span class="n">stem</span><span class="p">,</span> <span class="n">conn</span><span class="p">,</span> <span class="n">if_exists</span><span class="o">=</span><span class="s2">&quot;replace&quot;</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a>
-</span><span id="L-125"><a href="#L-125"><span class="linenos">125</span></a>            <span class="c1"># add to the metadata</span>
-</span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a>            <span class="nb">list</span><span class="p">(</span><span class="n">vocabularies</span><span class="p">[</span><span class="s2">&quot;tables&quot;</span><span class="p">])</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">filename</span><span class="o">.</span><span class="n">stem</span><span class="p">)</span>
-</span><span id="L-127"><a href="#L-127"><span class="linenos">127</span></a>            <span class="n">table_count</span> <span class="o">=</span> <span class="n">table_count</span> <span class="o">+</span> <span class="mi">1</span>
-</span><span id="L-128"><a href="#L-128"><span class="linenos">128</span></a>        <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
-</span><span id="L-129"><a href="#L-129"><span class="linenos">129</span></a>            <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Error reading file </span><span class="si">{</span><span class="n">filename</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a>
-</span><span id="L-131"><a href="#L-131"><span class="linenos">131</span></a>    <span class="n">conn</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
-</span><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a>
-</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a>    <span class="c1"># write version file</span>
-</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a>    <span class="n">write_version_file</span><span class="p">(</span><span class="n">version</span><span class="p">)</span>
-</span><span id="L-135"><a href="#L-135"><span class="linenos">135</span></a>
-</span><span id="L-136"><a href="#L-136"><span class="linenos">136</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;OMOP installation completed&quot;</span><span class="p">)</span>
+</span><span id="L-65"><a href="#L-65"><span class="linenos"> 65</span></a><span class="n">omop_vocab_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-66"><a href="#L-66"><span class="linenos"> 66</span></a>    <span class="s2">&quot;read2&quot;</span><span class="p">:</span> <span class="s2">&quot;Read&quot;</span><span class="p">,</span>
+</span><span id="L-67"><a href="#L-67"><span class="linenos"> 67</span></a>    <span class="s2">&quot;read3&quot;</span><span class="p">:</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-68"><a href="#L-68"><span class="linenos"> 68</span></a>    <span class="s2">&quot;icd10&quot;</span><span class="p">:</span> <span class="s2">&quot;ICD10CM&quot;</span><span class="p">,</span>
+</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a>    <span class="s2">&quot;snomed&quot;</span><span class="p">:</span> <span class="s2">&quot;SNOMED&quot;</span><span class="p">,</span>
+</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a>    <span class="s2">&quot;opcs4&quot;</span><span class="p">:</span> <span class="s2">&quot;OPCS4&quot;</span><span class="p">,</span>
+</span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</span></a>    <span class="s2">&quot;atc&quot;</span><span class="p">:</span> <span class="s2">&quot;ATC&quot;</span><span class="p">,</span>
+</span><span id="L-72"><a href="#L-72"><span class="linenos"> 72</span></a>    <span class="s2">&quot;med&quot;</span><span class="p">:</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-73"><a href="#L-73"><span class="linenos"> 73</span></a>    <span class="s2">&quot;cprd&quot;</span><span class="p">:</span> <span class="kc">None</span><span class="p">,</span>
+</span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</span></a><span class="p">}</span>
+</span><span id="L-75"><a href="#L-75"><span class="linenos"> 75</span></a><span class="sd">&quot;&quot;&quot;Type mappings from acmc medical coding types to OMOP vocabulary types&quot;&quot;&quot;</span>
+</span><span id="L-76"><a href="#L-76"><span class="linenos"> 76</span></a>
+</span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a>
+</span><span id="L-78"><a href="#L-78"><span class="linenos"> 78</span></a><span class="k">def</span><span class="w"> </span><span class="nf">install</span><span class="p">(</span><span class="n">omop_zip_file</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">version</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
+</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot; &quot;Installs the OMOP release csv files in a file-based sql database</span>
+</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a>
+</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a><span class="sd">    Args:</span>
+</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a><span class="sd">        omop_zip_file (str): vocabularies zip file distributed by OHDSI Athena</span>
+</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a><span class="sd">        version (str): version of the vocabularies distributed by OHDSI Athena</span>
+</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a>
+</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a><span class="sd">    Raises:</span>
+</span><span id="L-86"><a href="#L-86"><span class="linenos"> 86</span></a><span class="sd">        ValueError: if the zip file does not exist</span>
+</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a><span class="sd">        ValueError: if the file is not a zip file</span>
+</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a><span class="sd">        Exception: if error reading omop csv files</span>
+</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a><span class="sd">    &quot;&quot;&quot;</span>
+</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Installing OMOP from zip file: </span><span class="si">{</span><span class="n">omop_zip_file</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a>    <span class="n">omop_zip_path</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="n">omop_zip_file</span><span class="p">)</span>
+</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a>
+</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a>    <span class="c1"># Check if the file exists and is a ZIP file</span>
+</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">omop_zip_path</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
+</span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</span></a>        <span class="n">msg</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">omop_zip_path</span><span class="si">}</span><span class="s2"> does not exist.&quot;</span>
+</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a>        <span class="n">_logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a>        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a>
+</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">zipfile</span><span class="o">.</span><span class="n">is_zipfile</span><span class="p">(</span><span class="n">omop_zip_path</span><span class="p">):</span>
+</span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a>        <span class="n">msg</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;Error: </span><span class="si">{</span><span class="n">omop_zip_path</span><span class="si">}</span><span class="s2"> is not a valid ZIP file.&quot;</span>
+</span><span id="L-101"><a href="#L-101"><span class="linenos">101</span></a>        <span class="n">_logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+</span><span id="L-102"><a href="#L-102"><span class="linenos">102</span></a>        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a>
+</span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a>    <span class="c1"># check codes directory exists and if not create it</span>
+</span><span id="L-105"><a href="#L-105"><span class="linenos">105</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">VOCAB_PATH</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
+</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a>        <span class="n">VOCAB_PATH</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">parents</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a>        <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;OMOP directory &#39;</span><span class="si">{</span><span class="n">VOCAB_PATH</span><span class="si">}</span><span class="s2">&#39; created.&quot;</span><span class="p">)</span>
+</span><span id="L-108"><a href="#L-108"><span class="linenos">108</span></a>    <span class="k">else</span><span class="p">:</span>
+</span><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a>        <span class="c1"># removing existing OMOP files</span>
+</span><span id="L-110"><a href="#L-110"><span class="linenos">110</span></a>        <span class="n">csv_files</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">VOCAB_PATH</span><span class="o">.</span><span class="n">glob</span><span class="p">(</span><span class="s2">&quot;*.csv&quot;</span><span class="p">))</span>
+</span><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a>        <span class="k">for</span> <span class="n">file</span> <span class="ow">in</span> <span class="n">csv_files</span><span class="p">:</span>
+</span><span id="L-112"><a href="#L-112"><span class="linenos">112</span></a>            <span class="n">file</span><span class="o">.</span><span class="n">unlink</span><span class="p">()</span>
+</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a>            <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Deleted OMOP csv file: </span><span class="si">{</span><span class="n">file</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a>
+</span><span id="L-115"><a href="#L-115"><span class="linenos">115</span></a>    <span class="c1"># Extract ZIP contents</span>
+</span><span id="L-116"><a href="#L-116"><span class="linenos">116</span></a>    <span class="k">with</span> <span class="n">zipfile</span><span class="o">.</span><span class="n">ZipFile</span><span class="p">(</span><span class="n">omop_zip_path</span><span class="p">,</span> <span class="s2">&quot;r&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">zip_ref</span><span class="p">:</span>
+</span><span id="L-117"><a href="#L-117"><span class="linenos">117</span></a>        <span class="n">zip_ref</span><span class="o">.</span><span class="n">extractall</span><span class="p">(</span><span class="n">VOCAB_PATH</span><span class="p">)</span>
+</span><span id="L-118"><a href="#L-118"><span class="linenos">118</span></a>        <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Extracted OMOP zip file </span><span class="si">{</span><span class="n">omop_zip_path</span><span class="si">}</span><span class="s2"> to </span><span class="si">{</span><span class="n">VOCAB_PATH</span><span class="si">}</span><span class="s2">/&quot;</span><span class="p">)</span>
+</span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a>
+</span><span id="L-120"><a href="#L-120"><span class="linenos">120</span></a>    <span class="c1"># connect to database, if it does not exist it will be created</span>
+</span><span id="L-121"><a href="#L-121"><span class="linenos">121</span></a>    <span class="n">conn</span> <span class="o">=</span> <span class="n">sqlite3</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="n">DB_PATH</span><span class="p">)</span>
+</span><span id="L-122"><a href="#L-122"><span class="linenos">122</span></a>
+</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a>    <span class="c1"># Iterate through files in the folder</span>
+</span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a>    <span class="n">csv_files</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">VOCAB_PATH</span><span class="o">.</span><span class="n">glob</span><span class="p">(</span><span class="s2">&quot;*.csv&quot;</span><span class="p">))</span>
+</span><span id="L-125"><a href="#L-125"><span class="linenos">125</span></a>    <span class="n">total_tables_count</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">csv_files</span><span class="p">)</span>
+</span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a>    <span class="n">table_count</span> <span class="o">=</span> <span class="mi">1</span>
+</span><span id="L-127"><a href="#L-127"><span class="linenos">127</span></a>    <span class="k">for</span> <span class="n">filename</span> <span class="ow">in</span> <span class="n">csv_files</span><span class="p">:</span>
+</span><span id="L-128"><a href="#L-128"><span class="linenos">128</span></a>        <span class="k">try</span><span class="p">:</span>
+</span><span id="L-129"><a href="#L-129"><span class="linenos">129</span></a>            <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span>
+</span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a>                <span class="sa">f</span><span class="s2">&quot;Processing </span><span class="si">{</span><span class="n">table_count</span><span class="si">}</span><span class="s2"> of </span><span class="si">{</span><span class="n">total_tables_count</span><span class="si">}</span><span class="s2"> tables: </span><span class="si">{</span><span class="n">filename</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-131"><a href="#L-131"><span class="linenos">131</span></a>            <span class="p">)</span>
+</span><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a>            <span class="c1"># read the CSV file with the specified delimiter</span>
+</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a>            <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_csv</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="n">delimiter</span><span class="o">=</span><span class="s2">&quot;</span><span class="se">\t</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">low_memory</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a>
+</span><span id="L-135"><a href="#L-135"><span class="linenos">135</span></a>            <span class="c1"># export Table to sqlite db</span>
+</span><span id="L-136"><a href="#L-136"><span class="linenos">136</span></a>            <span class="n">df</span><span class="o">.</span><span class="n">to_sql</span><span class="p">(</span><span class="n">filename</span><span class="o">.</span><span class="n">stem</span><span class="p">,</span> <span class="n">conn</span><span class="p">,</span> <span class="n">if_exists</span><span class="o">=</span><span class="s2">&quot;replace&quot;</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
 </span><span id="L-137"><a href="#L-137"><span class="linenos">137</span></a>
-</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a>
-</span><span id="L-139"><a href="#L-139"><span class="linenos">139</span></a><span class="k">def</span><span class="w"> </span><span class="nf">write_version_file</span><span class="p">(</span><span class="n">version</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
-</span><span id="L-140"><a href="#L-140"><span class="linenos">140</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Writes the OMOP vocaburaries and version to a file</span>
-</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a>
-</span><span id="L-142"><a href="#L-142"><span class="linenos">142</span></a><span class="sd">    Args:</span>
-</span><span id="L-143"><a href="#L-143"><span class="linenos">143</span></a><span class="sd">        version (str): version of the vocabularies distributed by OHDSI Athena</span>
-</span><span id="L-144"><a href="#L-144"><span class="linenos">144</span></a><span class="sd">    &quot;&quot;&quot;</span>
-</span><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a>    <span class="n">vocabularies</span><span class="p">[</span><span class="s2">&quot;version&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">version</span>
-</span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a>    <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">VERSION_PATH</span><span class="p">,</span> <span class="s2">&quot;w&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
-</span><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a>        <span class="n">yaml</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span>
-</span><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a>            <span class="n">vocabularies</span><span class="p">,</span>
-</span><span id="L-149"><a href="#L-149"><span class="linenos">149</span></a>            <span class="n">file</span><span class="p">,</span>
-</span><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a>            <span class="n">Dumper</span><span class="o">=</span><span class="n">util</span><span class="o">.</span><span class="n">QuotedDumper</span><span class="p">,</span>
-</span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a>            <span class="n">default_flow_style</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-</span><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a>            <span class="n">sort_keys</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-</span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a>            <span class="n">default_style</span><span class="o">=</span><span class="s1">&#39;&quot;&#39;</span><span class="p">,</span>
-</span><span id="L-154"><a href="#L-154"><span class="linenos">154</span></a>        <span class="p">)</span>
-</span><span id="L-155"><a href="#L-155"><span class="linenos">155</span></a>
-</span><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a>
-</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a><span class="k">def</span><span class="w"> </span><span class="nf">clear</span><span class="p">(</span><span class="n">db_path</span><span class="p">:</span> <span class="n">Path</span><span class="p">):</span>
-</span><span id="L-158"><a href="#L-158"><span class="linenos">158</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Clears the OMOP sql database</span>
-</span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a>
-</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a><span class="sd">    Args:</span>
-</span><span id="L-161"><a href="#L-161"><span class="linenos">161</span></a><span class="sd">        db_path (Path): the path to the omop sqllite database</span>
-</span><span id="L-162"><a href="#L-162"><span class="linenos">162</span></a>
-</span><span id="L-163"><a href="#L-163"><span class="linenos">163</span></a><span class="sd">    Raises:</span>
-</span><span id="L-164"><a href="#L-164"><span class="linenos">164</span></a><span class="sd">        FileNotFoundError: if the omop sqllite database does not exist</span>
-</span><span id="L-165"><a href="#L-165"><span class="linenos">165</span></a><span class="sd">    &quot;&quot;&quot;</span>
-</span><span id="L-166"><a href="#L-166"><span class="linenos">166</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Clearing OMOP data from database&quot;</span><span class="p">)</span>
-</span><span id="L-167"><a href="#L-167"><span class="linenos">167</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">db_path</span><span class="o">.</span><span class="n">is_file</span><span class="p">():</span>
-</span><span id="L-168"><a href="#L-168"><span class="linenos">168</span></a>        <span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Error: OMOP DB file &#39;</span><span class="si">{</span><span class="n">db_path</span><span class="si">}</span><span class="s2">&#39; does not exist.&quot;</span><span class="p">)</span>
-</span><span id="L-169"><a href="#L-169"><span class="linenos">169</span></a>    <span class="n">conn</span> <span class="o">=</span> <span class="n">sqlite3</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="n">db_path</span><span class="p">)</span>
-</span><span id="L-170"><a href="#L-170"><span class="linenos">170</span></a>    <span class="n">cur</span> <span class="o">=</span> <span class="n">conn</span><span class="o">.</span><span class="n">cursor</span><span class="p">()</span>
-</span><span id="L-171"><a href="#L-171"><span class="linenos">171</span></a>    <span class="n">cur</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">&quot;SELECT name FROM sqlite_master WHERE type=&#39;table&#39;;&quot;</span><span class="p">)</span>
+</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a>            <span class="c1"># add to the metadata</span>
+</span><span id="L-139"><a href="#L-139"><span class="linenos">139</span></a>            <span class="nb">list</span><span class="p">(</span><span class="n">vocabularies</span><span class="p">[</span><span class="s2">&quot;tables&quot;</span><span class="p">])</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">filename</span><span class="o">.</span><span class="n">stem</span><span class="p">)</span>
+</span><span id="L-140"><a href="#L-140"><span class="linenos">140</span></a>            <span class="n">table_count</span> <span class="o">=</span> <span class="n">table_count</span> <span class="o">+</span> <span class="mi">1</span>
+</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a>        <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
+</span><span id="L-142"><a href="#L-142"><span class="linenos">142</span></a>            <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Error reading file </span><span class="si">{</span><span class="n">filename</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-143"><a href="#L-143"><span class="linenos">143</span></a>
+</span><span id="L-144"><a href="#L-144"><span class="linenos">144</span></a>    <span class="n">conn</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+</span><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a>
+</span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a>    <span class="c1"># write version file</span>
+</span><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a>    <span class="n">write_version_file</span><span class="p">(</span><span class="n">version</span><span class="p">)</span>
+</span><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a>
+</span><span id="L-149"><a href="#L-149"><span class="linenos">149</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;OMOP installation completed&quot;</span><span class="p">)</span>
+</span><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a>
+</span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a>
+</span><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a><span class="k">def</span><span class="w"> </span><span class="nf">write_version_file</span><span class="p">(</span><span class="n">version</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
+</span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Writes the OMOP vocaburaries and version to a file</span>
+</span><span id="L-154"><a href="#L-154"><span class="linenos">154</span></a>
+</span><span id="L-155"><a href="#L-155"><span class="linenos">155</span></a><span class="sd">    Args:</span>
+</span><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a><span class="sd">        version (str): version of the vocabularies distributed by OHDSI Athena</span>
+</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a><span class="sd">    &quot;&quot;&quot;</span>
+</span><span id="L-158"><a href="#L-158"><span class="linenos">158</span></a>    <span class="n">vocabularies</span><span class="p">[</span><span class="s2">&quot;version&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">version</span>
+</span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a>    <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">VERSION_PATH</span><span class="p">,</span> <span class="s2">&quot;w&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
+</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a>        <span class="n">yaml</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span>
+</span><span id="L-161"><a href="#L-161"><span class="linenos">161</span></a>            <span class="n">vocabularies</span><span class="p">,</span>
+</span><span id="L-162"><a href="#L-162"><span class="linenos">162</span></a>            <span class="n">file</span><span class="p">,</span>
+</span><span id="L-163"><a href="#L-163"><span class="linenos">163</span></a>            <span class="n">Dumper</span><span class="o">=</span><span class="n">util</span><span class="o">.</span><span class="n">QuotedDumper</span><span class="p">,</span>
+</span><span id="L-164"><a href="#L-164"><span class="linenos">164</span></a>            <span class="n">default_flow_style</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="L-165"><a href="#L-165"><span class="linenos">165</span></a>            <span class="n">sort_keys</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="L-166"><a href="#L-166"><span class="linenos">166</span></a>            <span class="n">default_style</span><span class="o">=</span><span class="s1">&#39;&quot;&#39;</span><span class="p">,</span>
+</span><span id="L-167"><a href="#L-167"><span class="linenos">167</span></a>        <span class="p">)</span>
+</span><span id="L-168"><a href="#L-168"><span class="linenos">168</span></a>
+</span><span id="L-169"><a href="#L-169"><span class="linenos">169</span></a>
+</span><span id="L-170"><a href="#L-170"><span class="linenos">170</span></a><span class="k">def</span><span class="w"> </span><span class="nf">clear</span><span class="p">(</span><span class="n">db_path</span><span class="p">:</span> <span class="n">Path</span><span class="p">):</span>
+</span><span id="L-171"><a href="#L-171"><span class="linenos">171</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Clears the OMOP sql database</span>
 </span><span id="L-172"><a href="#L-172"><span class="linenos">172</span></a>
-</span><span id="L-173"><a href="#L-173"><span class="linenos">173</span></a>    <span class="c1"># Fetch and print table names</span>
-</span><span id="L-174"><a href="#L-174"><span class="linenos">174</span></a>    <span class="n">tables</span> <span class="o">=</span> <span class="n">cur</span><span class="o">.</span><span class="n">fetchall</span><span class="p">()</span>
-</span><span id="L-175"><a href="#L-175"><span class="linenos">175</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">&quot;Tables in database:&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">table</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="n">tables</span><span class="p">])</span>
-</span><span id="L-176"><a href="#L-176"><span class="linenos">176</span></a>
-</span><span id="L-177"><a href="#L-177"><span class="linenos">177</span></a>    <span class="c1"># cur.execute(&quot;DROP TABLE CONCEPT_SET;&quot;)</span>
-</span><span id="L-178"><a href="#L-178"><span class="linenos">178</span></a>    <span class="c1"># cur.execute(&quot;DROP TABLE CONCEPT_SET_ITEM;&quot;)</span>
-</span><span id="L-179"><a href="#L-179"><span class="linenos">179</span></a>
-</span><span id="L-180"><a href="#L-180"><span class="linenos">180</span></a>    <span class="n">conn</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
-</span><span id="L-181"><a href="#L-181"><span class="linenos">181</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;OMOP database cleared&quot;</span><span class="p">)</span>
-</span><span id="L-182"><a href="#L-182"><span class="linenos">182</span></a>
-</span><span id="L-183"><a href="#L-183"><span class="linenos">183</span></a>
-</span><span id="L-184"><a href="#L-184"><span class="linenos">184</span></a><span class="k">def</span><span class="w"> </span><span class="nf">delete</span><span class="p">(</span><span class="n">db_path</span><span class="p">:</span> <span class="n">Path</span><span class="p">):</span>
-</span><span id="L-185"><a href="#L-185"><span class="linenos">185</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Deletes the OMOP sql database</span>
-</span><span id="L-186"><a href="#L-186"><span class="linenos">186</span></a>
-</span><span id="L-187"><a href="#L-187"><span class="linenos">187</span></a><span class="sd">    Args:</span>
-</span><span id="L-188"><a href="#L-188"><span class="linenos">188</span></a><span class="sd">        db_path (Path): the path to the omop sqllite database</span>
+</span><span id="L-173"><a href="#L-173"><span class="linenos">173</span></a><span class="sd">    Args:</span>
+</span><span id="L-174"><a href="#L-174"><span class="linenos">174</span></a><span class="sd">        db_path (Path): the path to the omop sqllite database</span>
+</span><span id="L-175"><a href="#L-175"><span class="linenos">175</span></a>
+</span><span id="L-176"><a href="#L-176"><span class="linenos">176</span></a><span class="sd">    Raises:</span>
+</span><span id="L-177"><a href="#L-177"><span class="linenos">177</span></a><span class="sd">        FileNotFoundError: if the omop sqllite database does not exist</span>
+</span><span id="L-178"><a href="#L-178"><span class="linenos">178</span></a><span class="sd">    &quot;&quot;&quot;</span>
+</span><span id="L-179"><a href="#L-179"><span class="linenos">179</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Clearing OMOP data from database&quot;</span><span class="p">)</span>
+</span><span id="L-180"><a href="#L-180"><span class="linenos">180</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">db_path</span><span class="o">.</span><span class="n">is_file</span><span class="p">():</span>
+</span><span id="L-181"><a href="#L-181"><span class="linenos">181</span></a>        <span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Error: OMOP DB file &#39;</span><span class="si">{</span><span class="n">db_path</span><span class="si">}</span><span class="s2">&#39; does not exist.&quot;</span><span class="p">)</span>
+</span><span id="L-182"><a href="#L-182"><span class="linenos">182</span></a>    <span class="n">conn</span> <span class="o">=</span> <span class="n">sqlite3</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="n">db_path</span><span class="p">)</span>
+</span><span id="L-183"><a href="#L-183"><span class="linenos">183</span></a>    <span class="n">cur</span> <span class="o">=</span> <span class="n">conn</span><span class="o">.</span><span class="n">cursor</span><span class="p">()</span>
+</span><span id="L-184"><a href="#L-184"><span class="linenos">184</span></a>    <span class="n">cur</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">&quot;SELECT name FROM sqlite_master WHERE type=&#39;table&#39;;&quot;</span><span class="p">)</span>
+</span><span id="L-185"><a href="#L-185"><span class="linenos">185</span></a>
+</span><span id="L-186"><a href="#L-186"><span class="linenos">186</span></a>    <span class="c1"># Fetch and print table names</span>
+</span><span id="L-187"><a href="#L-187"><span class="linenos">187</span></a>    <span class="n">tables</span> <span class="o">=</span> <span class="n">cur</span><span class="o">.</span><span class="n">fetchall</span><span class="p">()</span>
+</span><span id="L-188"><a href="#L-188"><span class="linenos">188</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">&quot;Tables in database:&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">table</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="n">tables</span><span class="p">])</span>
 </span><span id="L-189"><a href="#L-189"><span class="linenos">189</span></a>
-</span><span id="L-190"><a href="#L-190"><span class="linenos">190</span></a><span class="sd">    Raises:</span>
-</span><span id="L-191"><a href="#L-191"><span class="linenos">191</span></a><span class="sd">        FileNotFoundError: if the omop sqllite database does not exist</span>
-</span><span id="L-192"><a href="#L-192"><span class="linenos">192</span></a><span class="sd">    &quot;&quot;&quot;</span>
-</span><span id="L-193"><a href="#L-193"><span class="linenos">193</span></a>    
-</span><span id="L-194"><a href="#L-194"><span class="linenos">194</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Deleting OMOP database&quot;</span><span class="p">)</span>
-</span><span id="L-195"><a href="#L-195"><span class="linenos">195</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">db_path</span><span class="o">.</span><span class="n">is_file</span><span class="p">():</span>
-</span><span id="L-196"><a href="#L-196"><span class="linenos">196</span></a>        <span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Error: OMOP DB file &#39;</span><span class="si">{</span><span class="n">db_path</span><span class="si">}</span><span class="s2">&#39; does not exist.&quot;</span><span class="p">)</span>
-</span><span id="L-197"><a href="#L-197"><span class="linenos">197</span></a>
-</span><span id="L-198"><a href="#L-198"><span class="linenos">198</span></a>    <span class="n">db_path</span><span class="o">.</span><span class="n">unlink</span><span class="p">()</span>
-</span><span id="L-199"><a href="#L-199"><span class="linenos">199</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;OMOP database deleted&quot;</span><span class="p">)</span>
-</span><span id="L-200"><a href="#L-200"><span class="linenos">200</span></a>
-</span><span id="L-201"><a href="#L-201"><span class="linenos">201</span></a>
-</span><span id="L-202"><a href="#L-202"><span class="linenos">202</span></a><span class="k">def</span><span class="w"> </span><span class="nf">table_exists</span><span class="p">(</span><span class="n">cursor</span><span class="p">:</span> <span class="n">sqlite3</span><span class="o">.</span><span class="n">Cursor</span><span class="p">,</span> <span class="n">table_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="L-203"><a href="#L-203"><span class="linenos">203</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Query to check if the table exists</span>
-</span><span id="L-204"><a href="#L-204"><span class="linenos">204</span></a>
-</span><span id="L-205"><a href="#L-205"><span class="linenos">205</span></a><span class="sd">    Args:</span>
-</span><span id="L-206"><a href="#L-206"><span class="linenos">206</span></a><span class="sd">        cursor (sqlite3.Cursor): a sqllite database cursor</span>
-</span><span id="L-207"><a href="#L-207"><span class="linenos">207</span></a><span class="sd">        table_name (str): the table name to check</span>
-</span><span id="L-208"><a href="#L-208"><span class="linenos">208</span></a>
-</span><span id="L-209"><a href="#L-209"><span class="linenos">209</span></a><span class="sd">    Returns:</span>
-</span><span id="L-210"><a href="#L-210"><span class="linenos">210</span></a><span class="sd">        bool: true if table exists</span>
-</span><span id="L-211"><a href="#L-211"><span class="linenos">211</span></a><span class="sd">    &quot;&quot;&quot;</span>    
-</span><span id="L-212"><a href="#L-212"><span class="linenos">212</span></a>        
-</span><span id="L-213"><a href="#L-213"><span class="linenos">213</span></a>    <span class="n">cursor</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span>
-</span><span id="L-214"><a href="#L-214"><span class="linenos">214</span></a><span class="w">        </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-215"><a href="#L-215"><span class="linenos">215</span></a><span class="sd">		SELECT name</span>
-</span><span id="L-216"><a href="#L-216"><span class="linenos">216</span></a><span class="sd">		FROM sqlite_master</span>
-</span><span id="L-217"><a href="#L-217"><span class="linenos">217</span></a><span class="sd">		WHERE type=&#39;table&#39; AND name=?</span>
-</span><span id="L-218"><a href="#L-218"><span class="linenos">218</span></a><span class="sd">		&quot;&quot;&quot;</span><span class="p">,</span>
-</span><span id="L-219"><a href="#L-219"><span class="linenos">219</span></a>        <span class="p">(</span><span class="n">table_name</span><span class="p">,),</span>
-</span><span id="L-220"><a href="#L-220"><span class="linenos">220</span></a>    <span class="p">)</span>
+</span><span id="L-190"><a href="#L-190"><span class="linenos">190</span></a>    <span class="c1"># cur.execute(&quot;DROP TABLE CONCEPT_SET;&quot;)</span>
+</span><span id="L-191"><a href="#L-191"><span class="linenos">191</span></a>    <span class="c1"># cur.execute(&quot;DROP TABLE CONCEPT_SET_ITEM;&quot;)</span>
+</span><span id="L-192"><a href="#L-192"><span class="linenos">192</span></a>
+</span><span id="L-193"><a href="#L-193"><span class="linenos">193</span></a>    <span class="n">conn</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+</span><span id="L-194"><a href="#L-194"><span class="linenos">194</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;OMOP database cleared&quot;</span><span class="p">)</span>
+</span><span id="L-195"><a href="#L-195"><span class="linenos">195</span></a>
+</span><span id="L-196"><a href="#L-196"><span class="linenos">196</span></a>
+</span><span id="L-197"><a href="#L-197"><span class="linenos">197</span></a><span class="k">def</span><span class="w"> </span><span class="nf">delete</span><span class="p">(</span><span class="n">db_path</span><span class="p">:</span> <span class="n">Path</span><span class="p">):</span>
+</span><span id="L-198"><a href="#L-198"><span class="linenos">198</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Deletes the OMOP sql database</span>
+</span><span id="L-199"><a href="#L-199"><span class="linenos">199</span></a>
+</span><span id="L-200"><a href="#L-200"><span class="linenos">200</span></a><span class="sd">    Args:</span>
+</span><span id="L-201"><a href="#L-201"><span class="linenos">201</span></a><span class="sd">        db_path (Path): the path to the omop sqllite database</span>
+</span><span id="L-202"><a href="#L-202"><span class="linenos">202</span></a>
+</span><span id="L-203"><a href="#L-203"><span class="linenos">203</span></a><span class="sd">    Raises:</span>
+</span><span id="L-204"><a href="#L-204"><span class="linenos">204</span></a><span class="sd">        FileNotFoundError: if the omop sqllite database does not exist</span>
+</span><span id="L-205"><a href="#L-205"><span class="linenos">205</span></a><span class="sd">    &quot;&quot;&quot;</span>
+</span><span id="L-206"><a href="#L-206"><span class="linenos">206</span></a>
+</span><span id="L-207"><a href="#L-207"><span class="linenos">207</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Deleting OMOP database&quot;</span><span class="p">)</span>
+</span><span id="L-208"><a href="#L-208"><span class="linenos">208</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">db_path</span><span class="o">.</span><span class="n">is_file</span><span class="p">():</span>
+</span><span id="L-209"><a href="#L-209"><span class="linenos">209</span></a>        <span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Error: OMOP DB file &#39;</span><span class="si">{</span><span class="n">db_path</span><span class="si">}</span><span class="s2">&#39; does not exist.&quot;</span><span class="p">)</span>
+</span><span id="L-210"><a href="#L-210"><span class="linenos">210</span></a>
+</span><span id="L-211"><a href="#L-211"><span class="linenos">211</span></a>    <span class="n">db_path</span><span class="o">.</span><span class="n">unlink</span><span class="p">()</span>
+</span><span id="L-212"><a href="#L-212"><span class="linenos">212</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;OMOP database deleted&quot;</span><span class="p">)</span>
+</span><span id="L-213"><a href="#L-213"><span class="linenos">213</span></a>
+</span><span id="L-214"><a href="#L-214"><span class="linenos">214</span></a>
+</span><span id="L-215"><a href="#L-215"><span class="linenos">215</span></a><span class="k">def</span><span class="w"> </span><span class="nf">table_exists</span><span class="p">(</span><span class="n">cursor</span><span class="p">:</span> <span class="n">sqlite3</span><span class="o">.</span><span class="n">Cursor</span><span class="p">,</span> <span class="n">table_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="L-216"><a href="#L-216"><span class="linenos">216</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Query to check if the table exists</span>
+</span><span id="L-217"><a href="#L-217"><span class="linenos">217</span></a>
+</span><span id="L-218"><a href="#L-218"><span class="linenos">218</span></a><span class="sd">    Args:</span>
+</span><span id="L-219"><a href="#L-219"><span class="linenos">219</span></a><span class="sd">        cursor (sqlite3.Cursor): a sqllite database cursor</span>
+</span><span id="L-220"><a href="#L-220"><span class="linenos">220</span></a><span class="sd">        table_name (str): the table name to check</span>
 </span><span id="L-221"><a href="#L-221"><span class="linenos">221</span></a>
-</span><span id="L-222"><a href="#L-222"><span class="linenos">222</span></a>    <span class="c1"># Fetch the result</span>
-</span><span id="L-223"><a href="#L-223"><span class="linenos">223</span></a>    <span class="n">result</span> <span class="o">=</span> <span class="n">cursor</span><span class="o">.</span><span class="n">fetchone</span><span class="p">()</span>
-</span><span id="L-224"><a href="#L-224"><span class="linenos">224</span></a>
-</span><span id="L-225"><a href="#L-225"><span class="linenos">225</span></a>    <span class="k">return</span> <span class="n">result</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span>
-</span><span id="L-226"><a href="#L-226"><span class="linenos">226</span></a>
-</span><span id="L-227"><a href="#L-227"><span class="linenos">227</span></a>
-</span><span id="L-228"><a href="#L-228"><span class="linenos">228</span></a><span class="k">def</span><span class="w"> </span><span class="nf">vocab_exists</span><span class="p">(</span><span class="n">cursor</span><span class="p">:</span> <span class="n">sqlite3</span><span class="o">.</span><span class="n">Cursor</span><span class="p">,</span> <span class="n">vocab_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="L-229"><a href="#L-229"><span class="linenos">229</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Query to check if the vocabulary exists</span>
-</span><span id="L-230"><a href="#L-230"><span class="linenos">230</span></a>
-</span><span id="L-231"><a href="#L-231"><span class="linenos">231</span></a><span class="sd">    Args:</span>
-</span><span id="L-232"><a href="#L-232"><span class="linenos">232</span></a><span class="sd">        cursor (sqlite3.Cursor): a sqllite database cursor</span>
-</span><span id="L-233"><a href="#L-233"><span class="linenos">233</span></a><span class="sd">        vocab_id (str): the vocabulary id to check</span>
+</span><span id="L-222"><a href="#L-222"><span class="linenos">222</span></a><span class="sd">    Returns:</span>
+</span><span id="L-223"><a href="#L-223"><span class="linenos">223</span></a><span class="sd">        bool: true if table exists</span>
+</span><span id="L-224"><a href="#L-224"><span class="linenos">224</span></a><span class="sd">    &quot;&quot;&quot;</span>
+</span><span id="L-225"><a href="#L-225"><span class="linenos">225</span></a>
+</span><span id="L-226"><a href="#L-226"><span class="linenos">226</span></a>    <span class="n">cursor</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span>
+</span><span id="L-227"><a href="#L-227"><span class="linenos">227</span></a><span class="w">        </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-228"><a href="#L-228"><span class="linenos">228</span></a><span class="sd">		SELECT name</span>
+</span><span id="L-229"><a href="#L-229"><span class="linenos">229</span></a><span class="sd">		FROM sqlite_master</span>
+</span><span id="L-230"><a href="#L-230"><span class="linenos">230</span></a><span class="sd">		WHERE type=&#39;table&#39; AND name=?</span>
+</span><span id="L-231"><a href="#L-231"><span class="linenos">231</span></a><span class="sd">		&quot;&quot;&quot;</span><span class="p">,</span>
+</span><span id="L-232"><a href="#L-232"><span class="linenos">232</span></a>        <span class="p">(</span><span class="n">table_name</span><span class="p">,),</span>
+</span><span id="L-233"><a href="#L-233"><span class="linenos">233</span></a>    <span class="p">)</span>
 </span><span id="L-234"><a href="#L-234"><span class="linenos">234</span></a>
-</span><span id="L-235"><a href="#L-235"><span class="linenos">235</span></a><span class="sd">    Returns:</span>
-</span><span id="L-236"><a href="#L-236"><span class="linenos">236</span></a><span class="sd">        bool: true if vocabulary id exists</span>
-</span><span id="L-237"><a href="#L-237"><span class="linenos">237</span></a><span class="sd">    &quot;&quot;&quot;</span>    
-</span><span id="L-238"><a href="#L-238"><span class="linenos">238</span></a>    
-</span><span id="L-239"><a href="#L-239"><span class="linenos">239</span></a>    <span class="n">cursor</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span>
-</span><span id="L-240"><a href="#L-240"><span class="linenos">240</span></a><span class="w">        </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-241"><a href="#L-241"><span class="linenos">241</span></a><span class="sd">		SELECT vocabulary_id </span>
-</span><span id="L-242"><a href="#L-242"><span class="linenos">242</span></a><span class="sd">		FROM VOCABULARY</span>
-</span><span id="L-243"><a href="#L-243"><span class="linenos">243</span></a><span class="sd">		WHERE vocabulary_id=?</span>
-</span><span id="L-244"><a href="#L-244"><span class="linenos">244</span></a><span class="sd">		&quot;&quot;&quot;</span><span class="p">,</span>
-</span><span id="L-245"><a href="#L-245"><span class="linenos">245</span></a>        <span class="p">(</span><span class="n">vocab_id</span><span class="p">,),</span>
-</span><span id="L-246"><a href="#L-246"><span class="linenos">246</span></a>    <span class="p">)</span>
+</span><span id="L-235"><a href="#L-235"><span class="linenos">235</span></a>    <span class="c1"># Fetch the result</span>
+</span><span id="L-236"><a href="#L-236"><span class="linenos">236</span></a>    <span class="n">result</span> <span class="o">=</span> <span class="n">cursor</span><span class="o">.</span><span class="n">fetchone</span><span class="p">()</span>
+</span><span id="L-237"><a href="#L-237"><span class="linenos">237</span></a>
+</span><span id="L-238"><a href="#L-238"><span class="linenos">238</span></a>    <span class="k">return</span> <span class="n">result</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span>
+</span><span id="L-239"><a href="#L-239"><span class="linenos">239</span></a>
+</span><span id="L-240"><a href="#L-240"><span class="linenos">240</span></a>
+</span><span id="L-241"><a href="#L-241"><span class="linenos">241</span></a><span class="k">def</span><span class="w"> </span><span class="nf">vocab_exists</span><span class="p">(</span><span class="n">cursor</span><span class="p">:</span> <span class="n">sqlite3</span><span class="o">.</span><span class="n">Cursor</span><span class="p">,</span> <span class="n">vocab_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="L-242"><a href="#L-242"><span class="linenos">242</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Query to check if the vocabulary exists</span>
+</span><span id="L-243"><a href="#L-243"><span class="linenos">243</span></a>
+</span><span id="L-244"><a href="#L-244"><span class="linenos">244</span></a><span class="sd">    Args:</span>
+</span><span id="L-245"><a href="#L-245"><span class="linenos">245</span></a><span class="sd">        cursor (sqlite3.Cursor): a sqllite database cursor</span>
+</span><span id="L-246"><a href="#L-246"><span class="linenos">246</span></a><span class="sd">        vocab_id (str): the vocabulary id to check</span>
 </span><span id="L-247"><a href="#L-247"><span class="linenos">247</span></a>
-</span><span id="L-248"><a href="#L-248"><span class="linenos">248</span></a>    <span class="c1"># Fetch the result</span>
-</span><span id="L-249"><a href="#L-249"><span class="linenos">249</span></a>    <span class="n">result</span> <span class="o">=</span> <span class="n">cursor</span><span class="o">.</span><span class="n">fetchone</span><span class="p">()</span>
-</span><span id="L-250"><a href="#L-250"><span class="linenos">250</span></a>
-</span><span id="L-251"><a href="#L-251"><span class="linenos">251</span></a>    <span class="k">return</span> <span class="n">result</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span>
-</span><span id="L-252"><a href="#L-252"><span class="linenos">252</span></a>
-</span><span id="L-253"><a href="#L-253"><span class="linenos">253</span></a>
-</span><span id="L-254"><a href="#L-254"><span class="linenos">254</span></a><span class="k">def</span><span class="w"> </span><span class="nf">concept_set_exist</span><span class="p">(</span><span class="n">cursor</span><span class="p">:</span> <span class="n">sqlite3</span><span class="o">.</span><span class="n">Cursor</span><span class="p">,</span> <span class="n">concept_set_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="L-255"><a href="#L-255"><span class="linenos">255</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Query to check if the concept set exists</span>
-</span><span id="L-256"><a href="#L-256"><span class="linenos">256</span></a>
-</span><span id="L-257"><a href="#L-257"><span class="linenos">257</span></a><span class="sd">    Args:</span>
-</span><span id="L-258"><a href="#L-258"><span class="linenos">258</span></a><span class="sd">        cursor (sqlite3.Cursor): a sqllite database cursor</span>
-</span><span id="L-259"><a href="#L-259"><span class="linenos">259</span></a><span class="sd">        concept_set_name (str): the concept set name to check</span>
+</span><span id="L-248"><a href="#L-248"><span class="linenos">248</span></a><span class="sd">    Returns:</span>
+</span><span id="L-249"><a href="#L-249"><span class="linenos">249</span></a><span class="sd">        bool: true if vocabulary id exists</span>
+</span><span id="L-250"><a href="#L-250"><span class="linenos">250</span></a><span class="sd">    &quot;&quot;&quot;</span>
+</span><span id="L-251"><a href="#L-251"><span class="linenos">251</span></a>
+</span><span id="L-252"><a href="#L-252"><span class="linenos">252</span></a>    <span class="n">cursor</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span>
+</span><span id="L-253"><a href="#L-253"><span class="linenos">253</span></a><span class="w">        </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-254"><a href="#L-254"><span class="linenos">254</span></a><span class="sd">		SELECT vocabulary_id </span>
+</span><span id="L-255"><a href="#L-255"><span class="linenos">255</span></a><span class="sd">		FROM VOCABULARY</span>
+</span><span id="L-256"><a href="#L-256"><span class="linenos">256</span></a><span class="sd">		WHERE vocabulary_id=?</span>
+</span><span id="L-257"><a href="#L-257"><span class="linenos">257</span></a><span class="sd">		&quot;&quot;&quot;</span><span class="p">,</span>
+</span><span id="L-258"><a href="#L-258"><span class="linenos">258</span></a>        <span class="p">(</span><span class="n">vocab_id</span><span class="p">,),</span>
+</span><span id="L-259"><a href="#L-259"><span class="linenos">259</span></a>    <span class="p">)</span>
 </span><span id="L-260"><a href="#L-260"><span class="linenos">260</span></a>
-</span><span id="L-261"><a href="#L-261"><span class="linenos">261</span></a><span class="sd">    Returns:</span>
-</span><span id="L-262"><a href="#L-262"><span class="linenos">262</span></a><span class="sd">        bool: true if concept set exists</span>
-</span><span id="L-263"><a href="#L-263"><span class="linenos">263</span></a><span class="sd">    &quot;&quot;&quot;</span>
-</span><span id="L-264"><a href="#L-264"><span class="linenos">264</span></a>    
-</span><span id="L-265"><a href="#L-265"><span class="linenos">265</span></a>    <span class="n">query</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;SELECT EXISTS (SELECT 1 FROM CONCEPT_SET WHERE concept_set_name = ?)&quot;</span>
-</span><span id="L-266"><a href="#L-266"><span class="linenos">266</span></a>    <span class="n">cursor</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">query</span><span class="p">,</span> <span class="p">(</span><span class="n">concept_set_name</span><span class="p">,))</span>
-</span><span id="L-267"><a href="#L-267"><span class="linenos">267</span></a>
-</span><span id="L-268"><a href="#L-268"><span class="linenos">268</span></a>    <span class="c1"># 1 if exists, 0 otherwise</span>
-</span><span id="L-269"><a href="#L-269"><span class="linenos">269</span></a>    <span class="k">return</span> <span class="n">cursor</span><span class="o">.</span><span class="n">fetchone</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="mi">1</span>
-</span><span id="L-270"><a href="#L-270"><span class="linenos">270</span></a>
-</span><span id="L-271"><a href="#L-271"><span class="linenos">271</span></a>
-</span><span id="L-272"><a href="#L-272"><span class="linenos">272</span></a><span class="k">def</span><span class="w"> </span><span class="nf">export</span><span class="p">(</span><span class="n">map_path</span><span class="p">:</span> <span class="n">Path</span><span class="p">,</span> <span class="n">export_path</span><span class="p">:</span> <span class="n">Path</span><span class="p">,</span> <span class="n">version</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">omop_metadata</span><span class="p">:</span> <span class="nb">dict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Path</span><span class="p">:</span>
-</span><span id="L-273"><a href="#L-273"><span class="linenos">273</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Export concept sets to omop database in csv format</span>
-</span><span id="L-274"><a href="#L-274"><span class="linenos">274</span></a>
-</span><span id="L-275"><a href="#L-275"><span class="linenos">275</span></a><span class="sd">    Args:</span>
-</span><span id="L-276"><a href="#L-276"><span class="linenos">276</span></a><span class="sd">        map_path (Path): path to the acmc map directory containing concept sets in csv format</span>
-</span><span id="L-277"><a href="#L-277"><span class="linenos">277</span></a><span class="sd">        export_path (Path): path to the directory where the omop database csv files are to be written</span>
-</span><span id="L-278"><a href="#L-278"><span class="linenos">278</span></a><span class="sd">        version (str): phenotype version for omop vocabulary version</span>
-</span><span id="L-279"><a href="#L-279"><span class="linenos">279</span></a><span class="sd">        omop_metadata (dict): phenotype omop metadata for omop vocabulary metadata </span>
-</span><span id="L-280"><a href="#L-280"><span class="linenos">280</span></a><span class="sd">                </span>
-</span><span id="L-281"><a href="#L-281"><span class="linenos">281</span></a><span class="sd">    Returns:</span>
-</span><span id="L-282"><a href="#L-282"><span class="linenos">282</span></a><span class="sd">        Path: path to the exported sqllite database</span>
-</span><span id="L-283"><a href="#L-283"><span class="linenos">283</span></a><span class="sd">    &quot;&quot;&quot;</span>
-</span><span id="L-284"><a href="#L-284"><span class="linenos">284</span></a>    
-</span><span id="L-285"><a href="#L-285"><span class="linenos">285</span></a>    
-</span><span id="L-286"><a href="#L-286"><span class="linenos">286</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;exporting with metadata </span><span class="si">{</span><span class="n">omop_metadata</span><span class="si">}</span><span class="s2"> at version </span><span class="si">{</span><span class="n">version</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-287"><a href="#L-287"><span class="linenos">287</span></a>
-</span><span id="L-288"><a href="#L-288"><span class="linenos">288</span></a>    <span class="c1"># copy the baseline omop database</span>
-</span><span id="L-289"><a href="#L-289"><span class="linenos">289</span></a>    <span class="n">export_db_path</span> <span class="o">=</span> <span class="n">export_path</span> <span class="o">/</span> <span class="n">EXPORT_FILE</span>
-</span><span id="L-290"><a href="#L-290"><span class="linenos">290</span></a>    <span class="n">shutil</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="n">DB_PATH</span><span class="p">,</span> <span class="n">export_db_path</span><span class="p">)</span>
-</span><span id="L-291"><a href="#L-291"><span class="linenos">291</span></a>
-</span><span id="L-292"><a href="#L-292"><span class="linenos">292</span></a>    <span class="c1"># connect to db</span>
-</span><span id="L-293"><a href="#L-293"><span class="linenos">293</span></a>    <span class="n">conn</span> <span class="o">=</span> <span class="n">sqlite3</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="n">export_db_path</span><span class="p">)</span>
-</span><span id="L-294"><a href="#L-294"><span class="linenos">294</span></a>    <span class="n">cur</span> <span class="o">=</span> <span class="n">conn</span><span class="o">.</span><span class="n">cursor</span><span class="p">()</span>
+</span><span id="L-261"><a href="#L-261"><span class="linenos">261</span></a>    <span class="c1"># Fetch the result</span>
+</span><span id="L-262"><a href="#L-262"><span class="linenos">262</span></a>    <span class="n">result</span> <span class="o">=</span> <span class="n">cursor</span><span class="o">.</span><span class="n">fetchone</span><span class="p">()</span>
+</span><span id="L-263"><a href="#L-263"><span class="linenos">263</span></a>
+</span><span id="L-264"><a href="#L-264"><span class="linenos">264</span></a>    <span class="k">return</span> <span class="n">result</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span>
+</span><span id="L-265"><a href="#L-265"><span class="linenos">265</span></a>
+</span><span id="L-266"><a href="#L-266"><span class="linenos">266</span></a>
+</span><span id="L-267"><a href="#L-267"><span class="linenos">267</span></a><span class="k">def</span><span class="w"> </span><span class="nf">concept_set_exist</span><span class="p">(</span><span class="n">cursor</span><span class="p">:</span> <span class="n">sqlite3</span><span class="o">.</span><span class="n">Cursor</span><span class="p">,</span> <span class="n">concept_set_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="L-268"><a href="#L-268"><span class="linenos">268</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Query to check if the concept set exists</span>
+</span><span id="L-269"><a href="#L-269"><span class="linenos">269</span></a>
+</span><span id="L-270"><a href="#L-270"><span class="linenos">270</span></a><span class="sd">    Args:</span>
+</span><span id="L-271"><a href="#L-271"><span class="linenos">271</span></a><span class="sd">        cursor (sqlite3.Cursor): a sqllite database cursor</span>
+</span><span id="L-272"><a href="#L-272"><span class="linenos">272</span></a><span class="sd">        concept_set_name (str): the concept set name to check</span>
+</span><span id="L-273"><a href="#L-273"><span class="linenos">273</span></a>
+</span><span id="L-274"><a href="#L-274"><span class="linenos">274</span></a><span class="sd">    Returns:</span>
+</span><span id="L-275"><a href="#L-275"><span class="linenos">275</span></a><span class="sd">        bool: true if concept set exists</span>
+</span><span id="L-276"><a href="#L-276"><span class="linenos">276</span></a><span class="sd">    &quot;&quot;&quot;</span>
+</span><span id="L-277"><a href="#L-277"><span class="linenos">277</span></a>
+</span><span id="L-278"><a href="#L-278"><span class="linenos">278</span></a>    <span class="n">query</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;SELECT EXISTS (SELECT 1 FROM CONCEPT_SET WHERE concept_set_name = ?)&quot;</span>
+</span><span id="L-279"><a href="#L-279"><span class="linenos">279</span></a>    <span class="n">cursor</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">query</span><span class="p">,</span> <span class="p">(</span><span class="n">concept_set_name</span><span class="p">,))</span>
+</span><span id="L-280"><a href="#L-280"><span class="linenos">280</span></a>
+</span><span id="L-281"><a href="#L-281"><span class="linenos">281</span></a>    <span class="c1"># 1 if exists, 0 otherwise</span>
+</span><span id="L-282"><a href="#L-282"><span class="linenos">282</span></a>    <span class="k">return</span> <span class="n">cursor</span><span class="o">.</span><span class="n">fetchone</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="mi">1</span>
+</span><span id="L-283"><a href="#L-283"><span class="linenos">283</span></a>
+</span><span id="L-284"><a href="#L-284"><span class="linenos">284</span></a>
+</span><span id="L-285"><a href="#L-285"><span class="linenos">285</span></a><span class="k">def</span><span class="w"> </span><span class="nf">export</span><span class="p">(</span>
+</span><span id="L-286"><a href="#L-286"><span class="linenos">286</span></a>    <span class="n">map_path</span><span class="p">:</span> <span class="n">Path</span><span class="p">,</span> <span class="n">export_path</span><span class="p">:</span> <span class="n">Path</span><span class="p">,</span> <span class="n">version</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">omop_metadata</span><span class="p">:</span> <span class="nb">dict</span>
+</span><span id="L-287"><a href="#L-287"><span class="linenos">287</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Path</span><span class="p">:</span>
+</span><span id="L-288"><a href="#L-288"><span class="linenos">288</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Export concept sets to omop database in csv format</span>
+</span><span id="L-289"><a href="#L-289"><span class="linenos">289</span></a>
+</span><span id="L-290"><a href="#L-290"><span class="linenos">290</span></a><span class="sd">    Args:</span>
+</span><span id="L-291"><a href="#L-291"><span class="linenos">291</span></a><span class="sd">        map_path (Path): path to the acmc map directory containing concept sets in csv format</span>
+</span><span id="L-292"><a href="#L-292"><span class="linenos">292</span></a><span class="sd">        export_path (Path): path to the directory where the omop database csv files are to be written</span>
+</span><span id="L-293"><a href="#L-293"><span class="linenos">293</span></a><span class="sd">        version (str): phenotype version for omop vocabulary version</span>
+</span><span id="L-294"><a href="#L-294"><span class="linenos">294</span></a><span class="sd">        omop_metadata (dict): phenotype omop metadata for omop vocabulary metadata</span>
 </span><span id="L-295"><a href="#L-295"><span class="linenos">295</span></a>
-</span><span id="L-296"><a href="#L-296"><span class="linenos">296</span></a>    <span class="c1"># Create VOCABULARY</span>
-</span><span id="L-297"><a href="#L-297"><span class="linenos">297</span></a>    <span class="n">df_test</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">(</span>
-</span><span id="L-298"><a href="#L-298"><span class="linenos">298</span></a>        <span class="p">[</span>
-</span><span id="L-299"><a href="#L-299"><span class="linenos">299</span></a>            <span class="p">{</span>
-</span><span id="L-300"><a href="#L-300"><span class="linenos">300</span></a>                <span class="s2">&quot;vocabulary_id&quot;</span><span class="p">:</span> <span class="n">omop_metadata</span><span class="p">[</span><span class="s2">&quot;vocabulary_id&quot;</span><span class="p">],</span>
-</span><span id="L-301"><a href="#L-301"><span class="linenos">301</span></a>                <span class="s2">&quot;vocabulary_name&quot;</span><span class="p">:</span> <span class="n">omop_metadata</span><span class="p">[</span><span class="s2">&quot;vocabulary_name&quot;</span><span class="p">],</span>
-</span><span id="L-302"><a href="#L-302"><span class="linenos">302</span></a>                <span class="s2">&quot;vocabulary_reference&quot;</span><span class="p">:</span> <span class="n">omop_metadata</span><span class="p">[</span><span class="s2">&quot;vocabulary_reference&quot;</span><span class="p">],</span>
-</span><span id="L-303"><a href="#L-303"><span class="linenos">303</span></a>                <span class="s2">&quot;vocabulary_version&quot;</span><span class="p">:</span> <span class="n">version</span><span class="p">,</span>
-</span><span id="L-304"><a href="#L-304"><span class="linenos">304</span></a>                <span class="c1"># &quot;vocabulary_concept_id&quot;: 0,</span>
-</span><span id="L-305"><a href="#L-305"><span class="linenos">305</span></a>            <span class="p">}</span>
-</span><span id="L-306"><a href="#L-306"><span class="linenos">306</span></a>        <span class="p">]</span>
-</span><span id="L-307"><a href="#L-307"><span class="linenos">307</span></a>    <span class="p">)</span>
-</span><span id="L-308"><a href="#L-308"><span class="linenos">308</span></a>    <span class="n">df_test</span><span class="o">.</span><span class="n">to_sql</span><span class="p">(</span><span class="s2">&quot;VOCABULARY&quot;</span><span class="p">,</span> <span class="n">conn</span><span class="p">,</span> <span class="n">if_exists</span><span class="o">=</span><span class="s2">&quot;append&quot;</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="L-296"><a href="#L-296"><span class="linenos">296</span></a><span class="sd">    Returns:</span>
+</span><span id="L-297"><a href="#L-297"><span class="linenos">297</span></a><span class="sd">        Path: path to the exported sqllite database</span>
+</span><span id="L-298"><a href="#L-298"><span class="linenos">298</span></a><span class="sd">    &quot;&quot;&quot;</span>
+</span><span id="L-299"><a href="#L-299"><span class="linenos">299</span></a>
+</span><span id="L-300"><a href="#L-300"><span class="linenos">300</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;exporting with metadata </span><span class="si">{</span><span class="n">omop_metadata</span><span class="si">}</span><span class="s2"> at version </span><span class="si">{</span><span class="n">version</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-301"><a href="#L-301"><span class="linenos">301</span></a>
+</span><span id="L-302"><a href="#L-302"><span class="linenos">302</span></a>    <span class="c1"># copy the baseline omop database</span>
+</span><span id="L-303"><a href="#L-303"><span class="linenos">303</span></a>    <span class="n">export_db_path</span> <span class="o">=</span> <span class="n">export_path</span> <span class="o">/</span> <span class="n">EXPORT_FILE</span>
+</span><span id="L-304"><a href="#L-304"><span class="linenos">304</span></a>    <span class="n">shutil</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="n">DB_PATH</span><span class="p">,</span> <span class="n">export_db_path</span><span class="p">)</span>
+</span><span id="L-305"><a href="#L-305"><span class="linenos">305</span></a>
+</span><span id="L-306"><a href="#L-306"><span class="linenos">306</span></a>    <span class="c1"># connect to db</span>
+</span><span id="L-307"><a href="#L-307"><span class="linenos">307</span></a>    <span class="n">conn</span> <span class="o">=</span> <span class="n">sqlite3</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="n">export_db_path</span><span class="p">)</span>
+</span><span id="L-308"><a href="#L-308"><span class="linenos">308</span></a>    <span class="n">cur</span> <span class="o">=</span> <span class="n">conn</span><span class="o">.</span><span class="n">cursor</span><span class="p">()</span>
 </span><span id="L-309"><a href="#L-309"><span class="linenos">309</span></a>
-</span><span id="L-310"><a href="#L-310"><span class="linenos">310</span></a>    <span class="c1"># Create CONCEPT_SET</span>
-</span><span id="L-311"><a href="#L-311"><span class="linenos">311</span></a>    <span class="n">cur</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span>
-</span><span id="L-312"><a href="#L-312"><span class="linenos">312</span></a><span class="w">        </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-313"><a href="#L-313"><span class="linenos">313</span></a><span class="sd">	CREATE TABLE CONCEPT_SET (</span>
-</span><span id="L-314"><a href="#L-314"><span class="linenos">314</span></a><span class="sd">		concept_set_id INTEGER PRIMARY KEY AUTOINCREMENT, -- Unique identifier for each concept set</span>
-</span><span id="L-315"><a href="#L-315"><span class="linenos">315</span></a><span class="sd">		atlas_id INTEGER,                                -- Unique identifier generated by ATLAS</span>
-</span><span id="L-316"><a href="#L-316"><span class="linenos">316</span></a><span class="sd">		concept_set_name TEXT,                           -- Optional name for the concept set</span>
-</span><span id="L-317"><a href="#L-317"><span class="linenos">317</span></a><span class="sd">		concept_set_description TEXT,                    -- Optional description for the concept set</span>
-</span><span id="L-318"><a href="#L-318"><span class="linenos">318</span></a><span class="sd">		vocabulary_id TEXT NOT NULL,                     -- Foreign key to VOCABULARY table</span>
-</span><span id="L-319"><a href="#L-319"><span class="linenos">319</span></a><span class="sd">		FOREIGN KEY (vocabulary_id) REFERENCES VOCABULARY(vocabulary_id)</span>
-</span><span id="L-320"><a href="#L-320"><span class="linenos">320</span></a><span class="sd">	);&quot;&quot;&quot;</span>
+</span><span id="L-310"><a href="#L-310"><span class="linenos">310</span></a>    <span class="c1"># Create VOCABULARY</span>
+</span><span id="L-311"><a href="#L-311"><span class="linenos">311</span></a>    <span class="n">df_test</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">(</span>
+</span><span id="L-312"><a href="#L-312"><span class="linenos">312</span></a>        <span class="p">[</span>
+</span><span id="L-313"><a href="#L-313"><span class="linenos">313</span></a>            <span class="p">{</span>
+</span><span id="L-314"><a href="#L-314"><span class="linenos">314</span></a>                <span class="s2">&quot;vocabulary_id&quot;</span><span class="p">:</span> <span class="n">omop_metadata</span><span class="p">[</span><span class="s2">&quot;vocabulary_id&quot;</span><span class="p">],</span>
+</span><span id="L-315"><a href="#L-315"><span class="linenos">315</span></a>                <span class="s2">&quot;vocabulary_name&quot;</span><span class="p">:</span> <span class="n">omop_metadata</span><span class="p">[</span><span class="s2">&quot;vocabulary_name&quot;</span><span class="p">],</span>
+</span><span id="L-316"><a href="#L-316"><span class="linenos">316</span></a>                <span class="s2">&quot;vocabulary_reference&quot;</span><span class="p">:</span> <span class="n">omop_metadata</span><span class="p">[</span><span class="s2">&quot;vocabulary_reference&quot;</span><span class="p">],</span>
+</span><span id="L-317"><a href="#L-317"><span class="linenos">317</span></a>                <span class="s2">&quot;vocabulary_version&quot;</span><span class="p">:</span> <span class="n">version</span><span class="p">,</span>
+</span><span id="L-318"><a href="#L-318"><span class="linenos">318</span></a>                <span class="c1"># &quot;vocabulary_concept_id&quot;: 0,</span>
+</span><span id="L-319"><a href="#L-319"><span class="linenos">319</span></a>            <span class="p">}</span>
+</span><span id="L-320"><a href="#L-320"><span class="linenos">320</span></a>        <span class="p">]</span>
 </span><span id="L-321"><a href="#L-321"><span class="linenos">321</span></a>    <span class="p">)</span>
-</span><span id="L-322"><a href="#L-322"><span class="linenos">322</span></a>
-</span><span id="L-323"><a href="#L-323"><span class="linenos">323</span></a>    <span class="c1"># Create CONCEPT_SET_ITEM</span>
-</span><span id="L-324"><a href="#L-324"><span class="linenos">324</span></a>    <span class="n">cur</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span>
-</span><span id="L-325"><a href="#L-325"><span class="linenos">325</span></a><span class="w">        </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-326"><a href="#L-326"><span class="linenos">326</span></a><span class="sd">	CREATE TABLE CONCEPT_SET_ITEM (</span>
-</span><span id="L-327"><a href="#L-327"><span class="linenos">327</span></a><span class="sd">		concept_set_item_id INTEGER PRIMARY KEY AUTOINCREMENT, -- Unique identifier for each mapping</span>
-</span><span id="L-328"><a href="#L-328"><span class="linenos">328</span></a><span class="sd">		concept_set_id INTEGER NOT NULL,                      -- Foreign key to CONCEPT_SET table</span>
-</span><span id="L-329"><a href="#L-329"><span class="linenos">329</span></a><span class="sd">		concept_id INTEGER NOT NULL,                          -- Foreign key to CONCEPT table</span>
-</span><span id="L-330"><a href="#L-330"><span class="linenos">330</span></a><span class="sd">		FOREIGN KEY (concept_set_id) REFERENCES CONCEPT_SET(concept_set_id),</span>
-</span><span id="L-331"><a href="#L-331"><span class="linenos">331</span></a><span class="sd">		FOREIGN KEY (concept_id) REFERENCES CONCEPT(concept_id)</span>
-</span><span id="L-332"><a href="#L-332"><span class="linenos">332</span></a><span class="sd">	);&quot;&quot;&quot;</span>
-</span><span id="L-333"><a href="#L-333"><span class="linenos">333</span></a>    <span class="p">)</span>
-</span><span id="L-334"><a href="#L-334"><span class="linenos">334</span></a>
-</span><span id="L-335"><a href="#L-335"><span class="linenos">335</span></a>    <span class="c1"># read map files</span>
-</span><span id="L-336"><a href="#L-336"><span class="linenos">336</span></a>    <span class="n">map_files</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">map_path</span><span class="o">.</span><span class="n">glob</span><span class="p">(</span><span class="s2">&quot;*.csv&quot;</span><span class="p">))</span>
-</span><span id="L-337"><a href="#L-337"><span class="linenos">337</span></a>    <span class="n">total</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">map_files</span><span class="p">)</span>
-</span><span id="L-338"><a href="#L-338"><span class="linenos">338</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Exporting </span><span class="si">{</span><span class="n">total</span><span class="si">}</span><span class="s2"> map files&quot;</span><span class="p">)</span>
-</span><span id="L-339"><a href="#L-339"><span class="linenos">339</span></a>    <span class="k">for</span> <span class="n">index</span><span class="p">,</span> <span class="n">map_file</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">map_files</span><span class="p">):</span>
-</span><span id="L-340"><a href="#L-340"><span class="linenos">340</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Processing </span><span class="si">{</span><span class="n">index</span><span class="o">+</span><span class="mi">1</span><span class="si">}</span><span class="s2"> of </span><span class="si">{</span><span class="n">total</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">map_file</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-341"><a href="#L-341"><span class="linenos">341</span></a>        <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_csv</span><span class="p">(</span><span class="n">map_file</span><span class="p">)</span>
-</span><span id="L-342"><a href="#L-342"><span class="linenos">342</span></a>
-</span><span id="L-343"><a href="#L-343"><span class="linenos">343</span></a>        <span class="k">for</span> <span class="n">concept_set_name</span><span class="p">,</span> <span class="n">grp</span> <span class="ow">in</span> <span class="n">df</span><span class="o">.</span><span class="n">groupby</span><span class="p">(</span><span class="s2">&quot;CONCEPT_SET&quot;</span><span class="p">):</span>
-</span><span id="L-344"><a href="#L-344"><span class="linenos">344</span></a>            <span class="c1"># create Concept_Set</span>
-</span><span id="L-345"><a href="#L-345"><span class="linenos">345</span></a>            <span class="k">if</span> <span class="ow">not</span> <span class="n">concept_set_exist</span><span class="p">(</span><span class="n">cur</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">concept_set_name</span><span class="p">)):</span>
-</span><span id="L-346"><a href="#L-346"><span class="linenos">346</span></a>                <span class="n">cur</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span>
-</span><span id="L-347"><a href="#L-347"><span class="linenos">347</span></a>                    <span class="sa">f</span><span class="s2">&quot;INSERT INTO CONCEPT_SET (concept_set_name, vocabulary_id) VALUES (&#39;</span><span class="si">{</span><span class="n">concept_set_name</span><span class="si">}</span><span class="s2">&#39;, &#39;</span><span class="si">{</span><span class="n">omop_metadata</span><span class="p">[</span><span class="s1">&#39;vocabulary_id&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">&#39;);&quot;</span>
-</span><span id="L-348"><a href="#L-348"><span class="linenos">348</span></a>                <span class="p">)</span>
-</span><span id="L-349"><a href="#L-349"><span class="linenos">349</span></a>            <span class="k">else</span><span class="p">:</span>
-</span><span id="L-350"><a href="#L-350"><span class="linenos">350</span></a>                <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Concept_set </span><span class="si">{</span><span class="n">concept_set_name</span><span class="si">}</span><span class="s2"> already exists&quot;</span><span class="p">)</span>
-</span><span id="L-351"><a href="#L-351"><span class="linenos">351</span></a>                <span class="c1"># TODO: ask to remove old concept_set?</span>
-</span><span id="L-352"><a href="#L-352"><span class="linenos">352</span></a>
-</span><span id="L-353"><a href="#L-353"><span class="linenos">353</span></a>            <span class="c1"># get Concept_set_Id</span>
-</span><span id="L-354"><a href="#L-354"><span class="linenos">354</span></a>            <span class="n">query</span> <span class="o">=</span> <span class="s2">&quot;SELECT concept_set_id FROM CONCEPT_SET WHERE concept_set_name = ? AND vocabulary_id = ?;&quot;</span>
-</span><span id="L-355"><a href="#L-355"><span class="linenos">355</span></a>            <span class="n">target_code_type</span> <span class="o">=</span> <span class="n">map_file</span><span class="o">.</span><span class="n">stem</span>
-</span><span id="L-356"><a href="#L-356"><span class="linenos">356</span></a>            <span class="n">cur</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span>
-</span><span id="L-357"><a href="#L-357"><span class="linenos">357</span></a>                <span class="n">query</span><span class="p">,</span>
-</span><span id="L-358"><a href="#L-358"><span class="linenos">358</span></a>                <span class="p">(</span>
-</span><span id="L-359"><a href="#L-359"><span class="linenos">359</span></a>                    <span class="n">concept_set_name</span><span class="p">,</span>
-</span><span id="L-360"><a href="#L-360"><span class="linenos">360</span></a>                    <span class="n">omop_metadata</span><span class="p">[</span><span class="s2">&quot;vocabulary_id&quot;</span><span class="p">],</span>
-</span><span id="L-361"><a href="#L-361"><span class="linenos">361</span></a>                <span class="p">),</span>
-</span><span id="L-362"><a href="#L-362"><span class="linenos">362</span></a>            <span class="p">)</span>
-</span><span id="L-363"><a href="#L-363"><span class="linenos">363</span></a>            <span class="c1"># FAILS HERE WITH NONE REUR</span>
-</span><span id="L-364"><a href="#L-364"><span class="linenos">364</span></a>            <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;target code type </span><span class="si">{</span><span class="n">target_code_type</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-365"><a href="#L-365"><span class="linenos">365</span></a>            <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;omop code type </span><span class="si">{</span><span class="n">omop_vocab_types</span><span class="p">[</span><span class="n">target_code_type</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-366"><a href="#L-366"><span class="linenos">366</span></a>            <span class="n">concept_set_id</span> <span class="o">=</span> <span class="n">cur</span><span class="o">.</span><span class="n">fetchone</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span>
-</span><span id="L-367"><a href="#L-367"><span class="linenos">367</span></a>            <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;concept set id </span><span class="si">{</span><span class="n">concept_set_id</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-368"><a href="#L-368"><span class="linenos">368</span></a>
-</span><span id="L-369"><a href="#L-369"><span class="linenos">369</span></a>            <span class="c1"># get corresponing Concept_id (OMOP) for each Concept_code (e.g. SNOMED)</span>
-</span><span id="L-370"><a href="#L-370"><span class="linenos">370</span></a>            <span class="n">concept_codes</span> <span class="o">=</span> <span class="s2">&quot;&#39;&quot;</span> <span class="o">+</span> <span class="s2">&quot;&#39;, &#39;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">grp</span><span class="p">[</span><span class="s2">&quot;CONCEPT&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">astype</span><span class="p">(</span><span class="nb">str</span><span class="p">)))</span> <span class="o">+</span> <span class="s2">&quot;&#39;&quot;</span>
-</span><span id="L-371"><a href="#L-371"><span class="linenos">371</span></a>            <span class="n">query</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;SELECT concept_id FROM CONCEPT WHERE vocabulary_id = ? AND concept_code IN (</span><span class="si">{</span><span class="n">concept_codes</span><span class="si">}</span><span class="s2">);&quot;</span>
-</span><span id="L-372"><a href="#L-372"><span class="linenos">372</span></a>            <span class="n">cur</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">query</span><span class="p">,</span> <span class="p">(</span><span class="n">omop_vocab_types</span><span class="p">[</span><span class="n">target_code_type</span><span class="p">],))</span>
-</span><span id="L-373"><a href="#L-373"><span class="linenos">373</span></a>            <span class="n">df_out</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">(</span><span class="n">cur</span><span class="o">.</span><span class="n">fetchall</span><span class="p">(),</span> <span class="n">columns</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;concept_id&quot;</span><span class="p">])</span>
-</span><span id="L-374"><a href="#L-374"><span class="linenos">374</span></a>
-</span><span id="L-375"><a href="#L-375"><span class="linenos">375</span></a>            <span class="k">if</span> <span class="ow">not</span> <span class="nb">len</span><span class="p">(</span><span class="n">grp</span><span class="p">)</span> <span class="o">==</span> <span class="nb">len</span><span class="p">(</span><span class="n">df_out</span><span class="p">):</span>
-</span><span id="L-376"><a href="#L-376"><span class="linenos">376</span></a>                <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span>
-</span><span id="L-377"><a href="#L-377"><span class="linenos">377</span></a>                    <span class="sa">f</span><span class="s2">&quot;ERROR: Some </span><span class="si">{</span><span class="n">omop_vocab_types</span><span class="p">[</span><span class="n">target_code_type</span><span class="p">]</span><span class="si">}</span><span class="s2"> Codes do not exist in OMOP Database&quot;</span>
-</span><span id="L-378"><a href="#L-378"><span class="linenos">378</span></a>                <span class="p">)</span>
-</span><span id="L-379"><a href="#L-379"><span class="linenos">379</span></a>
-</span><span id="L-380"><a href="#L-380"><span class="linenos">380</span></a>            <span class="c1"># Create Concept_set_item</span>
-</span><span id="L-381"><a href="#L-381"><span class="linenos">381</span></a>            <span class="n">df_out</span><span class="p">[</span><span class="s2">&quot;concept_set_id&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">concept_set_id</span>
-</span><span id="L-382"><a href="#L-382"><span class="linenos">382</span></a>            <span class="n">df_out</span><span class="o">.</span><span class="n">to_sql</span><span class="p">(</span><span class="s2">&quot;CONCEPT_SET_ITEM&quot;</span><span class="p">,</span> <span class="n">conn</span><span class="p">,</span> <span class="n">if_exists</span><span class="o">=</span><span class="s2">&quot;append&quot;</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="L-383"><a href="#L-383"><span class="linenos">383</span></a>
-</span><span id="L-384"><a href="#L-384"><span class="linenos">384</span></a>    <span class="c1"># Output all tables to CSV</span>
-</span><span id="L-385"><a href="#L-385"><span class="linenos">385</span></a>    <span class="c1"># Get the list of all tables</span>
-</span><span id="L-386"><a href="#L-386"><span class="linenos">386</span></a>    <span class="n">cur</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">&quot;SELECT name FROM sqlite_master WHERE type=&#39;table&#39;;&quot;</span><span class="p">)</span>
-</span><span id="L-387"><a href="#L-387"><span class="linenos">387</span></a>    <span class="n">tables</span> <span class="o">=</span> <span class="n">cur</span><span class="o">.</span><span class="n">fetchall</span><span class="p">()</span>  <span class="c1"># List of tables</span>
+</span><span id="L-322"><a href="#L-322"><span class="linenos">322</span></a>    <span class="n">df_test</span><span class="o">.</span><span class="n">to_sql</span><span class="p">(</span><span class="s2">&quot;VOCABULARY&quot;</span><span class="p">,</span> <span class="n">conn</span><span class="p">,</span> <span class="n">if_exists</span><span class="o">=</span><span class="s2">&quot;append&quot;</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="L-323"><a href="#L-323"><span class="linenos">323</span></a>
+</span><span id="L-324"><a href="#L-324"><span class="linenos">324</span></a>    <span class="c1"># Create CONCEPT_SET</span>
+</span><span id="L-325"><a href="#L-325"><span class="linenos">325</span></a>    <span class="n">cur</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span>
+</span><span id="L-326"><a href="#L-326"><span class="linenos">326</span></a><span class="w">        </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-327"><a href="#L-327"><span class="linenos">327</span></a><span class="sd">	CREATE TABLE CONCEPT_SET (</span>
+</span><span id="L-328"><a href="#L-328"><span class="linenos">328</span></a><span class="sd">		concept_set_id INTEGER PRIMARY KEY AUTOINCREMENT, -- Unique identifier for each concept set</span>
+</span><span id="L-329"><a href="#L-329"><span class="linenos">329</span></a><span class="sd">		atlas_id INTEGER,                                -- Unique identifier generated by ATLAS</span>
+</span><span id="L-330"><a href="#L-330"><span class="linenos">330</span></a><span class="sd">		concept_set_name TEXT,                           -- Optional name for the concept set</span>
+</span><span id="L-331"><a href="#L-331"><span class="linenos">331</span></a><span class="sd">		concept_set_description TEXT,                    -- Optional description for the concept set</span>
+</span><span id="L-332"><a href="#L-332"><span class="linenos">332</span></a><span class="sd">		vocabulary_id TEXT NOT NULL,                     -- Foreign key to VOCABULARY table</span>
+</span><span id="L-333"><a href="#L-333"><span class="linenos">333</span></a><span class="sd">		FOREIGN KEY (vocabulary_id) REFERENCES VOCABULARY(vocabulary_id)</span>
+</span><span id="L-334"><a href="#L-334"><span class="linenos">334</span></a><span class="sd">	);&quot;&quot;&quot;</span>
+</span><span id="L-335"><a href="#L-335"><span class="linenos">335</span></a>    <span class="p">)</span>
+</span><span id="L-336"><a href="#L-336"><span class="linenos">336</span></a>
+</span><span id="L-337"><a href="#L-337"><span class="linenos">337</span></a>    <span class="c1"># Create CONCEPT_SET_ITEM</span>
+</span><span id="L-338"><a href="#L-338"><span class="linenos">338</span></a>    <span class="n">cur</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span>
+</span><span id="L-339"><a href="#L-339"><span class="linenos">339</span></a><span class="w">        </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-340"><a href="#L-340"><span class="linenos">340</span></a><span class="sd">	CREATE TABLE CONCEPT_SET_ITEM (</span>
+</span><span id="L-341"><a href="#L-341"><span class="linenos">341</span></a><span class="sd">		concept_set_item_id INTEGER PRIMARY KEY AUTOINCREMENT, -- Unique identifier for each mapping</span>
+</span><span id="L-342"><a href="#L-342"><span class="linenos">342</span></a><span class="sd">		concept_set_id INTEGER NOT NULL,                      -- Foreign key to CONCEPT_SET table</span>
+</span><span id="L-343"><a href="#L-343"><span class="linenos">343</span></a><span class="sd">		concept_id INTEGER NOT NULL,                          -- Foreign key to CONCEPT table</span>
+</span><span id="L-344"><a href="#L-344"><span class="linenos">344</span></a><span class="sd">		FOREIGN KEY (concept_set_id) REFERENCES CONCEPT_SET(concept_set_id),</span>
+</span><span id="L-345"><a href="#L-345"><span class="linenos">345</span></a><span class="sd">		FOREIGN KEY (concept_id) REFERENCES CONCEPT(concept_id)</span>
+</span><span id="L-346"><a href="#L-346"><span class="linenos">346</span></a><span class="sd">	);&quot;&quot;&quot;</span>
+</span><span id="L-347"><a href="#L-347"><span class="linenos">347</span></a>    <span class="p">)</span>
+</span><span id="L-348"><a href="#L-348"><span class="linenos">348</span></a>
+</span><span id="L-349"><a href="#L-349"><span class="linenos">349</span></a>    <span class="c1"># read map files</span>
+</span><span id="L-350"><a href="#L-350"><span class="linenos">350</span></a>    <span class="n">map_files</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">map_path</span><span class="o">.</span><span class="n">glob</span><span class="p">(</span><span class="s2">&quot;*.csv&quot;</span><span class="p">))</span>
+</span><span id="L-351"><a href="#L-351"><span class="linenos">351</span></a>    <span class="n">total</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">map_files</span><span class="p">)</span>
+</span><span id="L-352"><a href="#L-352"><span class="linenos">352</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Exporting </span><span class="si">{</span><span class="n">total</span><span class="si">}</span><span class="s2"> map files&quot;</span><span class="p">)</span>
+</span><span id="L-353"><a href="#L-353"><span class="linenos">353</span></a>    <span class="k">for</span> <span class="n">index</span><span class="p">,</span> <span class="n">map_file</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">map_files</span><span class="p">):</span>
+</span><span id="L-354"><a href="#L-354"><span class="linenos">354</span></a>        <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Processing </span><span class="si">{</span><span class="n">index</span><span class="o">+</span><span class="mi">1</span><span class="si">}</span><span class="s2"> of </span><span class="si">{</span><span class="n">total</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">map_file</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-355"><a href="#L-355"><span class="linenos">355</span></a>        <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_csv</span><span class="p">(</span><span class="n">map_file</span><span class="p">)</span>
+</span><span id="L-356"><a href="#L-356"><span class="linenos">356</span></a>
+</span><span id="L-357"><a href="#L-357"><span class="linenos">357</span></a>        <span class="k">for</span> <span class="n">concept_set_name</span><span class="p">,</span> <span class="n">grp</span> <span class="ow">in</span> <span class="n">df</span><span class="o">.</span><span class="n">groupby</span><span class="p">(</span><span class="s2">&quot;CONCEPT_SET&quot;</span><span class="p">):</span>
+</span><span id="L-358"><a href="#L-358"><span class="linenos">358</span></a>            <span class="c1"># create Concept_Set</span>
+</span><span id="L-359"><a href="#L-359"><span class="linenos">359</span></a>            <span class="k">if</span> <span class="ow">not</span> <span class="n">concept_set_exist</span><span class="p">(</span><span class="n">cur</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">concept_set_name</span><span class="p">)):</span>
+</span><span id="L-360"><a href="#L-360"><span class="linenos">360</span></a>                <span class="n">cur</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span>
+</span><span id="L-361"><a href="#L-361"><span class="linenos">361</span></a>                    <span class="sa">f</span><span class="s2">&quot;INSERT INTO CONCEPT_SET (concept_set_name, vocabulary_id) VALUES (&#39;</span><span class="si">{</span><span class="n">concept_set_name</span><span class="si">}</span><span class="s2">&#39;, &#39;</span><span class="si">{</span><span class="n">omop_metadata</span><span class="p">[</span><span class="s1">&#39;vocabulary_id&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">&#39;);&quot;</span>
+</span><span id="L-362"><a href="#L-362"><span class="linenos">362</span></a>                <span class="p">)</span>
+</span><span id="L-363"><a href="#L-363"><span class="linenos">363</span></a>            <span class="k">else</span><span class="p">:</span>
+</span><span id="L-364"><a href="#L-364"><span class="linenos">364</span></a>                <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Concept_set </span><span class="si">{</span><span class="n">concept_set_name</span><span class="si">}</span><span class="s2"> already exists&quot;</span><span class="p">)</span>
+</span><span id="L-365"><a href="#L-365"><span class="linenos">365</span></a>                <span class="c1"># TODO: ask to remove old concept_set?</span>
+</span><span id="L-366"><a href="#L-366"><span class="linenos">366</span></a>
+</span><span id="L-367"><a href="#L-367"><span class="linenos">367</span></a>            <span class="c1"># get Concept_set_Id</span>
+</span><span id="L-368"><a href="#L-368"><span class="linenos">368</span></a>            <span class="n">query</span> <span class="o">=</span> <span class="s2">&quot;SELECT concept_set_id FROM CONCEPT_SET WHERE concept_set_name = ? AND vocabulary_id = ?;&quot;</span>
+</span><span id="L-369"><a href="#L-369"><span class="linenos">369</span></a>            <span class="n">target_code_type</span> <span class="o">=</span> <span class="n">map_file</span><span class="o">.</span><span class="n">stem</span>
+</span><span id="L-370"><a href="#L-370"><span class="linenos">370</span></a>            <span class="n">cur</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span>
+</span><span id="L-371"><a href="#L-371"><span class="linenos">371</span></a>                <span class="n">query</span><span class="p">,</span>
+</span><span id="L-372"><a href="#L-372"><span class="linenos">372</span></a>                <span class="p">(</span>
+</span><span id="L-373"><a href="#L-373"><span class="linenos">373</span></a>                    <span class="n">concept_set_name</span><span class="p">,</span>
+</span><span id="L-374"><a href="#L-374"><span class="linenos">374</span></a>                    <span class="n">omop_metadata</span><span class="p">[</span><span class="s2">&quot;vocabulary_id&quot;</span><span class="p">],</span>
+</span><span id="L-375"><a href="#L-375"><span class="linenos">375</span></a>                <span class="p">),</span>
+</span><span id="L-376"><a href="#L-376"><span class="linenos">376</span></a>            <span class="p">)</span>
+</span><span id="L-377"><a href="#L-377"><span class="linenos">377</span></a>            <span class="c1"># FAILS HERE WITH NONE REUR</span>
+</span><span id="L-378"><a href="#L-378"><span class="linenos">378</span></a>            <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;target code type </span><span class="si">{</span><span class="n">target_code_type</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-379"><a href="#L-379"><span class="linenos">379</span></a>            <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;omop code type </span><span class="si">{</span><span class="n">omop_vocab_types</span><span class="p">[</span><span class="n">target_code_type</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-380"><a href="#L-380"><span class="linenos">380</span></a>            <span class="n">concept_set_id</span> <span class="o">=</span> <span class="n">cur</span><span class="o">.</span><span class="n">fetchone</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span>
+</span><span id="L-381"><a href="#L-381"><span class="linenos">381</span></a>            <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;concept set id </span><span class="si">{</span><span class="n">concept_set_id</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-382"><a href="#L-382"><span class="linenos">382</span></a>
+</span><span id="L-383"><a href="#L-383"><span class="linenos">383</span></a>            <span class="c1"># get corresponing Concept_id (OMOP) for each Concept_code (e.g. SNOMED)</span>
+</span><span id="L-384"><a href="#L-384"><span class="linenos">384</span></a>            <span class="n">concept_codes</span> <span class="o">=</span> <span class="s2">&quot;&#39;&quot;</span> <span class="o">+</span> <span class="s2">&quot;&#39;, &#39;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">grp</span><span class="p">[</span><span class="s2">&quot;CONCEPT&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">astype</span><span class="p">(</span><span class="nb">str</span><span class="p">)))</span> <span class="o">+</span> <span class="s2">&quot;&#39;&quot;</span>
+</span><span id="L-385"><a href="#L-385"><span class="linenos">385</span></a>            <span class="n">query</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;SELECT concept_id FROM CONCEPT WHERE vocabulary_id = ? AND concept_code IN (</span><span class="si">{</span><span class="n">concept_codes</span><span class="si">}</span><span class="s2">);&quot;</span>
+</span><span id="L-386"><a href="#L-386"><span class="linenos">386</span></a>            <span class="n">cur</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">query</span><span class="p">,</span> <span class="p">(</span><span class="n">omop_vocab_types</span><span class="p">[</span><span class="n">target_code_type</span><span class="p">],))</span>
+</span><span id="L-387"><a href="#L-387"><span class="linenos">387</span></a>            <span class="n">df_out</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">(</span><span class="n">cur</span><span class="o">.</span><span class="n">fetchall</span><span class="p">(),</span> <span class="n">columns</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;concept_id&quot;</span><span class="p">])</span>
 </span><span id="L-388"><a href="#L-388"><span class="linenos">388</span></a>
-</span><span id="L-389"><a href="#L-389"><span class="linenos">389</span></a>    <span class="c1"># Export each table to a separate CSV file</span>
-</span><span id="L-390"><a href="#L-390"><span class="linenos">390</span></a>    <span class="k">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="n">tables</span><span class="p">:</span>
-</span><span id="L-391"><a href="#L-391"><span class="linenos">391</span></a>        <span class="n">table_name</span> <span class="o">=</span> <span class="n">table</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
-</span><span id="L-392"><a href="#L-392"><span class="linenos">392</span></a>        <span class="c1"># ignore SQLite&#39;s internal system table</span>
-</span><span id="L-393"><a href="#L-393"><span class="linenos">393</span></a>        <span class="k">if</span> <span class="n">table_name</span> <span class="o">!=</span> <span class="s2">&quot;sqlite_sequence&quot;</span><span class="p">:</span>
-</span><span id="L-394"><a href="#L-394"><span class="linenos">394</span></a>            <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_sql_query</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;SELECT * FROM </span><span class="si">{</span><span class="n">table_name</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">conn</span><span class="p">)</span>
-</span><span id="L-395"><a href="#L-395"><span class="linenos">395</span></a>            <span class="n">output_file</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">table_name</span><span class="si">}</span><span class="s2">.csv&quot;</span>
-</span><span id="L-396"><a href="#L-396"><span class="linenos">396</span></a>            <span class="n">output_path</span> <span class="o">=</span> <span class="n">export_path</span> <span class="o">/</span> <span class="n">output_file</span>
-</span><span id="L-397"><a href="#L-397"><span class="linenos">397</span></a>            <span class="n">df</span><span class="o">.</span><span class="n">to_csv</span><span class="p">(</span><span class="n">output_path</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>  <span class="c1"># Save as CSV</span>
-</span><span id="L-398"><a href="#L-398"><span class="linenos">398</span></a>            <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Exported </span><span class="si">{</span><span class="n">table_name</span><span class="si">}</span><span class="s2"> to </span><span class="si">{</span><span class="n">table_name</span><span class="si">}</span><span class="s2">.csv&quot;</span><span class="p">)</span>
-</span><span id="L-399"><a href="#L-399"><span class="linenos">399</span></a>
-</span><span id="L-400"><a href="#L-400"><span class="linenos">400</span></a>    <span class="n">conn</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
-</span><span id="L-401"><a href="#L-401"><span class="linenos">401</span></a>
-</span><span id="L-402"><a href="#L-402"><span class="linenos">402</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Created export db successfully&quot;</span><span class="p">)</span>
-</span><span id="L-403"><a href="#L-403"><span class="linenos">403</span></a>
-</span><span id="L-404"><a href="#L-404"><span class="linenos">404</span></a>    <span class="k">return</span> <span class="n">export_db_path</span>
+</span><span id="L-389"><a href="#L-389"><span class="linenos">389</span></a>            <span class="k">if</span> <span class="ow">not</span> <span class="nb">len</span><span class="p">(</span><span class="n">grp</span><span class="p">)</span> <span class="o">==</span> <span class="nb">len</span><span class="p">(</span><span class="n">df_out</span><span class="p">):</span>
+</span><span id="L-390"><a href="#L-390"><span class="linenos">390</span></a>                <span class="n">_logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span>
+</span><span id="L-391"><a href="#L-391"><span class="linenos">391</span></a>                    <span class="sa">f</span><span class="s2">&quot;ERROR: Some </span><span class="si">{</span><span class="n">omop_vocab_types</span><span class="p">[</span><span class="n">target_code_type</span><span class="p">]</span><span class="si">}</span><span class="s2"> Codes do not exist in OMOP Database&quot;</span>
+</span><span id="L-392"><a href="#L-392"><span class="linenos">392</span></a>                <span class="p">)</span>
+</span><span id="L-393"><a href="#L-393"><span class="linenos">393</span></a>
+</span><span id="L-394"><a href="#L-394"><span class="linenos">394</span></a>            <span class="c1"># Create Concept_set_item</span>
+</span><span id="L-395"><a href="#L-395"><span class="linenos">395</span></a>            <span class="n">df_out</span><span class="p">[</span><span class="s2">&quot;concept_set_id&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">concept_set_id</span>
+</span><span id="L-396"><a href="#L-396"><span class="linenos">396</span></a>            <span class="n">df_out</span><span class="o">.</span><span class="n">to_sql</span><span class="p">(</span><span class="s2">&quot;CONCEPT_SET_ITEM&quot;</span><span class="p">,</span> <span class="n">conn</span><span class="p">,</span> <span class="n">if_exists</span><span class="o">=</span><span class="s2">&quot;append&quot;</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="L-397"><a href="#L-397"><span class="linenos">397</span></a>
+</span><span id="L-398"><a href="#L-398"><span class="linenos">398</span></a>    <span class="c1"># Output all tables to CSV</span>
+</span><span id="L-399"><a href="#L-399"><span class="linenos">399</span></a>    <span class="c1"># Get the list of all tables</span>
+</span><span id="L-400"><a href="#L-400"><span class="linenos">400</span></a>    <span class="n">cur</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">&quot;SELECT name FROM sqlite_master WHERE type=&#39;table&#39;;&quot;</span><span class="p">)</span>
+</span><span id="L-401"><a href="#L-401"><span class="linenos">401</span></a>    <span class="n">tables</span> <span class="o">=</span> <span class="n">cur</span><span class="o">.</span><span class="n">fetchall</span><span class="p">()</span>  <span class="c1"># List of tables</span>
+</span><span id="L-402"><a href="#L-402"><span class="linenos">402</span></a>
+</span><span id="L-403"><a href="#L-403"><span class="linenos">403</span></a>    <span class="c1"># Export each table to a separate CSV file</span>
+</span><span id="L-404"><a href="#L-404"><span class="linenos">404</span></a>    <span class="k">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="n">tables</span><span class="p">:</span>
+</span><span id="L-405"><a href="#L-405"><span class="linenos">405</span></a>        <span class="n">table_name</span> <span class="o">=</span> <span class="n">table</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+</span><span id="L-406"><a href="#L-406"><span class="linenos">406</span></a>        <span class="c1"># ignore SQLite&#39;s internal system table</span>
+</span><span id="L-407"><a href="#L-407"><span class="linenos">407</span></a>        <span class="k">if</span> <span class="n">table_name</span> <span class="o">!=</span> <span class="s2">&quot;sqlite_sequence&quot;</span><span class="p">:</span>
+</span><span id="L-408"><a href="#L-408"><span class="linenos">408</span></a>            <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_sql_query</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;SELECT * FROM </span><span class="si">{</span><span class="n">table_name</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">conn</span><span class="p">)</span>
+</span><span id="L-409"><a href="#L-409"><span class="linenos">409</span></a>            <span class="n">output_file</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">table_name</span><span class="si">}</span><span class="s2">.csv&quot;</span>
+</span><span id="L-410"><a href="#L-410"><span class="linenos">410</span></a>            <span class="n">output_path</span> <span class="o">=</span> <span class="n">export_path</span> <span class="o">/</span> <span class="n">output_file</span>
+</span><span id="L-411"><a href="#L-411"><span class="linenos">411</span></a>            <span class="n">df</span><span class="o">.</span><span class="n">to_csv</span><span class="p">(</span><span class="n">output_path</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>  <span class="c1"># Save as CSV</span>
+</span><span id="L-412"><a href="#L-412"><span class="linenos">412</span></a>            <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Exported </span><span class="si">{</span><span class="n">table_name</span><span class="si">}</span><span class="s2"> to </span><span class="si">{</span><span class="n">table_name</span><span class="si">}</span><span class="s2">.csv&quot;</span><span class="p">)</span>
+</span><span id="L-413"><a href="#L-413"><span class="linenos">413</span></a>
+</span><span id="L-414"><a href="#L-414"><span class="linenos">414</span></a>    <span class="n">conn</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+</span><span id="L-415"><a href="#L-415"><span class="linenos">415</span></a>
+</span><span id="L-416"><a href="#L-416"><span class="linenos">416</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Created export db successfully&quot;</span><span class="p">)</span>
+</span><span id="L-417"><a href="#L-417"><span class="linenos">417</span></a>
+</span><span id="L-418"><a href="#L-418"><span class="linenos">418</span></a>    <span class="k">return</span> <span class="n">export_db_path</span>
 </span></pre></div>
 
 
             </section>
-                <section id="logger">
-                    <div class="attr variable">
-            <span class="name">logger</span>        =
-<span class="default_value">&lt;Logger acmc_logger (INFO)&gt;</span>
-
-        
-    </div>
-    <a class="headerlink" href="#logger"></a>
-    
-    
-
-                </section>
                 <section id="VOCAB_PATH">
                     <div class="attr variable">
             <span class="name">VOCAB_PATH</span>        =
@@ -543,7 +537,9 @@
     </div>
     <a class="headerlink" href="#VOCAB_PATH"></a>
     
-    
+            <div class="docstring"><p>Default OMOP vocabulary path</p>
+</div>
+
 
                 </section>
                 <section id="OMOP_CDM_Version">
@@ -555,7 +551,9 @@
     </div>
     <a class="headerlink" href="#OMOP_CDM_Version"></a>
     
-    
+            <div class="docstring"><p>Supported OMOP CDM version number</p>
+</div>
+
 
                 </section>
                 <section id="OMOP_DB_FILENAME">
@@ -567,7 +565,9 @@
     </div>
     <a class="headerlink" href="#OMOP_DB_FILENAME"></a>
     
-    
+            <div class="docstring"><p>Default OMOP sqllite database filename</p>
+</div>
+
 
                 </section>
                 <section id="DB_PATH">
@@ -579,7 +579,9 @@
     </div>
     <a class="headerlink" href="#DB_PATH"></a>
     
-    
+            <div class="docstring"><p>Default OMOP sqllite database path</p>
+</div>
+
 
                 </section>
                 <section id="VERSION_FILE">
@@ -591,7 +593,9 @@
     </div>
     <a class="headerlink" href="#VERSION_FILE"></a>
     
-    
+            <div class="docstring"><p>Default OMOP version file</p>
+</div>
+
 
                 </section>
                 <section id="VERSION_PATH">
@@ -603,7 +607,9 @@
     </div>
     <a class="headerlink" href="#VERSION_PATH"></a>
     
-    
+            <div class="docstring"><p>Default OMOP version path</p>
+</div>
+
 
                 </section>
                 <section id="EXPORT_FILE">
@@ -615,7 +621,9 @@
     </div>
     <a class="headerlink" href="#EXPORT_FILE"></a>
     
-    
+            <div class="docstring"><p>Default OMOP export database filename</p>
+</div>
+
 
                 </section>
                 <section id="vocabularies">
@@ -628,7 +636,9 @@
     </div>
     <a class="headerlink" href="#vocabularies"></a>
     
-    
+            <div class="docstring"><p>Required OMOP vocabularies definition</p>
+</div>
+
 
                 </section>
                 <section id="omop_vocab_types">
@@ -641,7 +651,9 @@
     </div>
     <a class="headerlink" href="#omop_vocab_types"></a>
     
-    
+            <div class="docstring"><p>Type mappings from acmc medical coding types to OMOP vocabulary types</p>
+</div>
+
 
                 </section>
                 <section id="install">
@@ -655,78 +667,78 @@
 
     </div>
     <a class="headerlink" href="#install"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="install-66"><a href="#install-66"><span class="linenos"> 66</span></a><span class="k">def</span><span class="w"> </span><span class="nf">install</span><span class="p">(</span><span class="n">omop_zip_file</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">version</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
-</span><span id="install-67"><a href="#install-67"><span class="linenos"> 67</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;&quot;Installs the OMOP release csv files in a file-based sql database</span>
-</span><span id="install-68"><a href="#install-68"><span class="linenos"> 68</span></a>
-</span><span id="install-69"><a href="#install-69"><span class="linenos"> 69</span></a><span class="sd">    Args:</span>
-</span><span id="install-70"><a href="#install-70"><span class="linenos"> 70</span></a><span class="sd">        omop_zip_file (str): vocabularies zip file distributed by OHDSI Athena</span>
-</span><span id="install-71"><a href="#install-71"><span class="linenos"> 71</span></a><span class="sd">        version (str): version of the vocabularies distributed by OHDSI Athena</span>
-</span><span id="install-72"><a href="#install-72"><span class="linenos"> 72</span></a>
-</span><span id="install-73"><a href="#install-73"><span class="linenos"> 73</span></a><span class="sd">    Raises:</span>
-</span><span id="install-74"><a href="#install-74"><span class="linenos"> 74</span></a><span class="sd">        ValueError: if the zip file does not exist</span>
-</span><span id="install-75"><a href="#install-75"><span class="linenos"> 75</span></a><span class="sd">        ValueError: if the file is not a zip file</span>
-</span><span id="install-76"><a href="#install-76"><span class="linenos"> 76</span></a><span class="sd">        Exception: if error reading omop csv files</span>
-</span><span id="install-77"><a href="#install-77"><span class="linenos"> 77</span></a><span class="sd">    &quot;&quot;&quot;</span>
-</span><span id="install-78"><a href="#install-78"><span class="linenos"> 78</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Installing OMOP from zip file: </span><span class="si">{</span><span class="n">omop_zip_file</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="install-79"><a href="#install-79"><span class="linenos"> 79</span></a>    <span class="n">omop_zip_path</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="n">omop_zip_file</span><span class="p">)</span>
-</span><span id="install-80"><a href="#install-80"><span class="linenos"> 80</span></a>
-</span><span id="install-81"><a href="#install-81"><span class="linenos"> 81</span></a>    <span class="c1"># Check if the file exists and is a ZIP file</span>
-</span><span id="install-82"><a href="#install-82"><span class="linenos"> 82</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">omop_zip_path</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
-</span><span id="install-83"><a href="#install-83"><span class="linenos"> 83</span></a>        <span class="n">msg</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">omop_zip_path</span><span class="si">}</span><span class="s2"> does not exist.&quot;</span>
-</span><span id="install-84"><a href="#install-84"><span class="linenos"> 84</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
-</span><span id="install-85"><a href="#install-85"><span class="linenos"> 85</span></a>        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
-</span><span id="install-86"><a href="#install-86"><span class="linenos"> 86</span></a>    
-</span><span id="install-87"><a href="#install-87"><span class="linenos"> 87</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">zipfile</span><span class="o">.</span><span class="n">is_zipfile</span><span class="p">(</span><span class="n">omop_zip_path</span><span class="p">):</span>
-</span><span id="install-88"><a href="#install-88"><span class="linenos"> 88</span></a>        <span class="n">msg</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;Error: </span><span class="si">{</span><span class="n">omop_zip_path</span><span class="si">}</span><span class="s2"> is not a valid ZIP file.&quot;</span>
-</span><span id="install-89"><a href="#install-89"><span class="linenos"> 89</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
-</span><span id="install-90"><a href="#install-90"><span class="linenos"> 90</span></a>        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
-</span><span id="install-91"><a href="#install-91"><span class="linenos"> 91</span></a>
-</span><span id="install-92"><a href="#install-92"><span class="linenos"> 92</span></a>    <span class="c1"># check codes directory exists and if not create it</span>
-</span><span id="install-93"><a href="#install-93"><span class="linenos"> 93</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">VOCAB_PATH</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
-</span><span id="install-94"><a href="#install-94"><span class="linenos"> 94</span></a>        <span class="n">VOCAB_PATH</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">parents</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="install-95"><a href="#install-95"><span class="linenos"> 95</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;OMOP directory &#39;</span><span class="si">{</span><span class="n">VOCAB_PATH</span><span class="si">}</span><span class="s2">&#39; created.&quot;</span><span class="p">)</span>
-</span><span id="install-96"><a href="#install-96"><span class="linenos"> 96</span></a>    <span class="k">else</span><span class="p">:</span>
-</span><span id="install-97"><a href="#install-97"><span class="linenos"> 97</span></a>        <span class="c1"># removing existing OMOP files</span>
-</span><span id="install-98"><a href="#install-98"><span class="linenos"> 98</span></a>        <span class="n">csv_files</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">VOCAB_PATH</span><span class="o">.</span><span class="n">glob</span><span class="p">(</span><span class="s2">&quot;*.csv&quot;</span><span class="p">))</span>
-</span><span id="install-99"><a href="#install-99"><span class="linenos"> 99</span></a>        <span class="k">for</span> <span class="n">file</span> <span class="ow">in</span> <span class="n">csv_files</span><span class="p">:</span>
-</span><span id="install-100"><a href="#install-100"><span class="linenos">100</span></a>            <span class="n">file</span><span class="o">.</span><span class="n">unlink</span><span class="p">()</span>
-</span><span id="install-101"><a href="#install-101"><span class="linenos">101</span></a>            <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Deleted OMOP csv file: </span><span class="si">{</span><span class="n">file</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="install-102"><a href="#install-102"><span class="linenos">102</span></a>
-</span><span id="install-103"><a href="#install-103"><span class="linenos">103</span></a>    <span class="c1"># Extract ZIP contents</span>
-</span><span id="install-104"><a href="#install-104"><span class="linenos">104</span></a>    <span class="k">with</span> <span class="n">zipfile</span><span class="o">.</span><span class="n">ZipFile</span><span class="p">(</span><span class="n">omop_zip_path</span><span class="p">,</span> <span class="s2">&quot;r&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">zip_ref</span><span class="p">:</span>
-</span><span id="install-105"><a href="#install-105"><span class="linenos">105</span></a>        <span class="n">zip_ref</span><span class="o">.</span><span class="n">extractall</span><span class="p">(</span><span class="n">VOCAB_PATH</span><span class="p">)</span>
-</span><span id="install-106"><a href="#install-106"><span class="linenos">106</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Extracted OMOP zip file </span><span class="si">{</span><span class="n">omop_zip_path</span><span class="si">}</span><span class="s2"> to </span><span class="si">{</span><span class="n">VOCAB_PATH</span><span class="si">}</span><span class="s2">/&quot;</span><span class="p">)</span>
-</span><span id="install-107"><a href="#install-107"><span class="linenos">107</span></a>
-</span><span id="install-108"><a href="#install-108"><span class="linenos">108</span></a>    <span class="c1"># connect to database, if it does not exist it will be created</span>
-</span><span id="install-109"><a href="#install-109"><span class="linenos">109</span></a>    <span class="n">conn</span> <span class="o">=</span> <span class="n">sqlite3</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="n">DB_PATH</span><span class="p">)</span>
-</span><span id="install-110"><a href="#install-110"><span class="linenos">110</span></a>
-</span><span id="install-111"><a href="#install-111"><span class="linenos">111</span></a>    <span class="c1"># Iterate through files in the folder</span>
-</span><span id="install-112"><a href="#install-112"><span class="linenos">112</span></a>    <span class="n">csv_files</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">VOCAB_PATH</span><span class="o">.</span><span class="n">glob</span><span class="p">(</span><span class="s2">&quot;*.csv&quot;</span><span class="p">))</span>
-</span><span id="install-113"><a href="#install-113"><span class="linenos">113</span></a>    <span class="n">total_tables_count</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">csv_files</span><span class="p">)</span>
-</span><span id="install-114"><a href="#install-114"><span class="linenos">114</span></a>    <span class="n">table_count</span> <span class="o">=</span> <span class="mi">1</span>
-</span><span id="install-115"><a href="#install-115"><span class="linenos">115</span></a>    <span class="k">for</span> <span class="n">filename</span> <span class="ow">in</span> <span class="n">csv_files</span><span class="p">:</span>
-</span><span id="install-116"><a href="#install-116"><span class="linenos">116</span></a>        <span class="k">try</span><span class="p">:</span>
-</span><span id="install-117"><a href="#install-117"><span class="linenos">117</span></a>            <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span>
-</span><span id="install-118"><a href="#install-118"><span class="linenos">118</span></a>                <span class="sa">f</span><span class="s2">&quot;Processing </span><span class="si">{</span><span class="n">table_count</span><span class="si">}</span><span class="s2"> of </span><span class="si">{</span><span class="n">total_tables_count</span><span class="si">}</span><span class="s2"> tables: </span><span class="si">{</span><span class="n">filename</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="install-119"><a href="#install-119"><span class="linenos">119</span></a>            <span class="p">)</span>
-</span><span id="install-120"><a href="#install-120"><span class="linenos">120</span></a>            <span class="c1"># read the CSV file with the specified delimiter</span>
-</span><span id="install-121"><a href="#install-121"><span class="linenos">121</span></a>            <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_csv</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="n">delimiter</span><span class="o">=</span><span class="s2">&quot;</span><span class="se">\t</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">low_memory</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="install-122"><a href="#install-122"><span class="linenos">122</span></a>
-</span><span id="install-123"><a href="#install-123"><span class="linenos">123</span></a>            <span class="c1"># export Table to sqlite db</span>
-</span><span id="install-124"><a href="#install-124"><span class="linenos">124</span></a>            <span class="n">df</span><span class="o">.</span><span class="n">to_sql</span><span class="p">(</span><span class="n">filename</span><span class="o">.</span><span class="n">stem</span><span class="p">,</span> <span class="n">conn</span><span class="p">,</span> <span class="n">if_exists</span><span class="o">=</span><span class="s2">&quot;replace&quot;</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="install-125"><a href="#install-125"><span class="linenos">125</span></a>
-</span><span id="install-126"><a href="#install-126"><span class="linenos">126</span></a>            <span class="c1"># add to the metadata</span>
-</span><span id="install-127"><a href="#install-127"><span class="linenos">127</span></a>            <span class="nb">list</span><span class="p">(</span><span class="n">vocabularies</span><span class="p">[</span><span class="s2">&quot;tables&quot;</span><span class="p">])</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">filename</span><span class="o">.</span><span class="n">stem</span><span class="p">)</span>
-</span><span id="install-128"><a href="#install-128"><span class="linenos">128</span></a>            <span class="n">table_count</span> <span class="o">=</span> <span class="n">table_count</span> <span class="o">+</span> <span class="mi">1</span>
-</span><span id="install-129"><a href="#install-129"><span class="linenos">129</span></a>        <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
-</span><span id="install-130"><a href="#install-130"><span class="linenos">130</span></a>            <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Error reading file </span><span class="si">{</span><span class="n">filename</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="install-131"><a href="#install-131"><span class="linenos">131</span></a>
-</span><span id="install-132"><a href="#install-132"><span class="linenos">132</span></a>    <span class="n">conn</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
-</span><span id="install-133"><a href="#install-133"><span class="linenos">133</span></a>
-</span><span id="install-134"><a href="#install-134"><span class="linenos">134</span></a>    <span class="c1"># write version file</span>
-</span><span id="install-135"><a href="#install-135"><span class="linenos">135</span></a>    <span class="n">write_version_file</span><span class="p">(</span><span class="n">version</span><span class="p">)</span>
-</span><span id="install-136"><a href="#install-136"><span class="linenos">136</span></a>
-</span><span id="install-137"><a href="#install-137"><span class="linenos">137</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;OMOP installation completed&quot;</span><span class="p">)</span>
+            <div class="pdoc-code codehilite"><pre><span></span><span id="install-79"><a href="#install-79"><span class="linenos"> 79</span></a><span class="k">def</span><span class="w"> </span><span class="nf">install</span><span class="p">(</span><span class="n">omop_zip_file</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">version</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
+</span><span id="install-80"><a href="#install-80"><span class="linenos"> 80</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot; &quot;Installs the OMOP release csv files in a file-based sql database</span>
+</span><span id="install-81"><a href="#install-81"><span class="linenos"> 81</span></a>
+</span><span id="install-82"><a href="#install-82"><span class="linenos"> 82</span></a><span class="sd">    Args:</span>
+</span><span id="install-83"><a href="#install-83"><span class="linenos"> 83</span></a><span class="sd">        omop_zip_file (str): vocabularies zip file distributed by OHDSI Athena</span>
+</span><span id="install-84"><a href="#install-84"><span class="linenos"> 84</span></a><span class="sd">        version (str): version of the vocabularies distributed by OHDSI Athena</span>
+</span><span id="install-85"><a href="#install-85"><span class="linenos"> 85</span></a>
+</span><span id="install-86"><a href="#install-86"><span class="linenos"> 86</span></a><span class="sd">    Raises:</span>
+</span><span id="install-87"><a href="#install-87"><span class="linenos"> 87</span></a><span class="sd">        ValueError: if the zip file does not exist</span>
+</span><span id="install-88"><a href="#install-88"><span class="linenos"> 88</span></a><span class="sd">        ValueError: if the file is not a zip file</span>
+</span><span id="install-89"><a href="#install-89"><span class="linenos"> 89</span></a><span class="sd">        Exception: if error reading omop csv files</span>
+</span><span id="install-90"><a href="#install-90"><span class="linenos"> 90</span></a><span class="sd">    &quot;&quot;&quot;</span>
+</span><span id="install-91"><a href="#install-91"><span class="linenos"> 91</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Installing OMOP from zip file: </span><span class="si">{</span><span class="n">omop_zip_file</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="install-92"><a href="#install-92"><span class="linenos"> 92</span></a>    <span class="n">omop_zip_path</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="n">omop_zip_file</span><span class="p">)</span>
+</span><span id="install-93"><a href="#install-93"><span class="linenos"> 93</span></a>
+</span><span id="install-94"><a href="#install-94"><span class="linenos"> 94</span></a>    <span class="c1"># Check if the file exists and is a ZIP file</span>
+</span><span id="install-95"><a href="#install-95"><span class="linenos"> 95</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">omop_zip_path</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
+</span><span id="install-96"><a href="#install-96"><span class="linenos"> 96</span></a>        <span class="n">msg</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">omop_zip_path</span><span class="si">}</span><span class="s2"> does not exist.&quot;</span>
+</span><span id="install-97"><a href="#install-97"><span class="linenos"> 97</span></a>        <span class="n">_logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+</span><span id="install-98"><a href="#install-98"><span class="linenos"> 98</span></a>        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+</span><span id="install-99"><a href="#install-99"><span class="linenos"> 99</span></a>
+</span><span id="install-100"><a href="#install-100"><span class="linenos">100</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">zipfile</span><span class="o">.</span><span class="n">is_zipfile</span><span class="p">(</span><span class="n">omop_zip_path</span><span class="p">):</span>
+</span><span id="install-101"><a href="#install-101"><span class="linenos">101</span></a>        <span class="n">msg</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;Error: </span><span class="si">{</span><span class="n">omop_zip_path</span><span class="si">}</span><span class="s2"> is not a valid ZIP file.&quot;</span>
+</span><span id="install-102"><a href="#install-102"><span class="linenos">102</span></a>        <span class="n">_logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+</span><span id="install-103"><a href="#install-103"><span class="linenos">103</span></a>        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+</span><span id="install-104"><a href="#install-104"><span class="linenos">104</span></a>
+</span><span id="install-105"><a href="#install-105"><span class="linenos">105</span></a>    <span class="c1"># check codes directory exists and if not create it</span>
+</span><span id="install-106"><a href="#install-106"><span class="linenos">106</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">VOCAB_PATH</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
+</span><span id="install-107"><a href="#install-107"><span class="linenos">107</span></a>        <span class="n">VOCAB_PATH</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">parents</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="install-108"><a href="#install-108"><span class="linenos">108</span></a>        <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;OMOP directory &#39;</span><span class="si">{</span><span class="n">VOCAB_PATH</span><span class="si">}</span><span class="s2">&#39; created.&quot;</span><span class="p">)</span>
+</span><span id="install-109"><a href="#install-109"><span class="linenos">109</span></a>    <span class="k">else</span><span class="p">:</span>
+</span><span id="install-110"><a href="#install-110"><span class="linenos">110</span></a>        <span class="c1"># removing existing OMOP files</span>
+</span><span id="install-111"><a href="#install-111"><span class="linenos">111</span></a>        <span class="n">csv_files</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">VOCAB_PATH</span><span class="o">.</span><span class="n">glob</span><span class="p">(</span><span class="s2">&quot;*.csv&quot;</span><span class="p">))</span>
+</span><span id="install-112"><a href="#install-112"><span class="linenos">112</span></a>        <span class="k">for</span> <span class="n">file</span> <span class="ow">in</span> <span class="n">csv_files</span><span class="p">:</span>
+</span><span id="install-113"><a href="#install-113"><span class="linenos">113</span></a>            <span class="n">file</span><span class="o">.</span><span class="n">unlink</span><span class="p">()</span>
+</span><span id="install-114"><a href="#install-114"><span class="linenos">114</span></a>            <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Deleted OMOP csv file: </span><span class="si">{</span><span class="n">file</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="install-115"><a href="#install-115"><span class="linenos">115</span></a>
+</span><span id="install-116"><a href="#install-116"><span class="linenos">116</span></a>    <span class="c1"># Extract ZIP contents</span>
+</span><span id="install-117"><a href="#install-117"><span class="linenos">117</span></a>    <span class="k">with</span> <span class="n">zipfile</span><span class="o">.</span><span class="n">ZipFile</span><span class="p">(</span><span class="n">omop_zip_path</span><span class="p">,</span> <span class="s2">&quot;r&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">zip_ref</span><span class="p">:</span>
+</span><span id="install-118"><a href="#install-118"><span class="linenos">118</span></a>        <span class="n">zip_ref</span><span class="o">.</span><span class="n">extractall</span><span class="p">(</span><span class="n">VOCAB_PATH</span><span class="p">)</span>
+</span><span id="install-119"><a href="#install-119"><span class="linenos">119</span></a>        <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Extracted OMOP zip file </span><span class="si">{</span><span class="n">omop_zip_path</span><span class="si">}</span><span class="s2"> to </span><span class="si">{</span><span class="n">VOCAB_PATH</span><span class="si">}</span><span class="s2">/&quot;</span><span class="p">)</span>
+</span><span id="install-120"><a href="#install-120"><span class="linenos">120</span></a>
+</span><span id="install-121"><a href="#install-121"><span class="linenos">121</span></a>    <span class="c1"># connect to database, if it does not exist it will be created</span>
+</span><span id="install-122"><a href="#install-122"><span class="linenos">122</span></a>    <span class="n">conn</span> <span class="o">=</span> <span class="n">sqlite3</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="n">DB_PATH</span><span class="p">)</span>
+</span><span id="install-123"><a href="#install-123"><span class="linenos">123</span></a>
+</span><span id="install-124"><a href="#install-124"><span class="linenos">124</span></a>    <span class="c1"># Iterate through files in the folder</span>
+</span><span id="install-125"><a href="#install-125"><span class="linenos">125</span></a>    <span class="n">csv_files</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">VOCAB_PATH</span><span class="o">.</span><span class="n">glob</span><span class="p">(</span><span class="s2">&quot;*.csv&quot;</span><span class="p">))</span>
+</span><span id="install-126"><a href="#install-126"><span class="linenos">126</span></a>    <span class="n">total_tables_count</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">csv_files</span><span class="p">)</span>
+</span><span id="install-127"><a href="#install-127"><span class="linenos">127</span></a>    <span class="n">table_count</span> <span class="o">=</span> <span class="mi">1</span>
+</span><span id="install-128"><a href="#install-128"><span class="linenos">128</span></a>    <span class="k">for</span> <span class="n">filename</span> <span class="ow">in</span> <span class="n">csv_files</span><span class="p">:</span>
+</span><span id="install-129"><a href="#install-129"><span class="linenos">129</span></a>        <span class="k">try</span><span class="p">:</span>
+</span><span id="install-130"><a href="#install-130"><span class="linenos">130</span></a>            <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span>
+</span><span id="install-131"><a href="#install-131"><span class="linenos">131</span></a>                <span class="sa">f</span><span class="s2">&quot;Processing </span><span class="si">{</span><span class="n">table_count</span><span class="si">}</span><span class="s2"> of </span><span class="si">{</span><span class="n">total_tables_count</span><span class="si">}</span><span class="s2"> tables: </span><span class="si">{</span><span class="n">filename</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="install-132"><a href="#install-132"><span class="linenos">132</span></a>            <span class="p">)</span>
+</span><span id="install-133"><a href="#install-133"><span class="linenos">133</span></a>            <span class="c1"># read the CSV file with the specified delimiter</span>
+</span><span id="install-134"><a href="#install-134"><span class="linenos">134</span></a>            <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_csv</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="n">delimiter</span><span class="o">=</span><span class="s2">&quot;</span><span class="se">\t</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">low_memory</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="install-135"><a href="#install-135"><span class="linenos">135</span></a>
+</span><span id="install-136"><a href="#install-136"><span class="linenos">136</span></a>            <span class="c1"># export Table to sqlite db</span>
+</span><span id="install-137"><a href="#install-137"><span class="linenos">137</span></a>            <span class="n">df</span><span class="o">.</span><span class="n">to_sql</span><span class="p">(</span><span class="n">filename</span><span class="o">.</span><span class="n">stem</span><span class="p">,</span> <span class="n">conn</span><span class="p">,</span> <span class="n">if_exists</span><span class="o">=</span><span class="s2">&quot;replace&quot;</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="install-138"><a href="#install-138"><span class="linenos">138</span></a>
+</span><span id="install-139"><a href="#install-139"><span class="linenos">139</span></a>            <span class="c1"># add to the metadata</span>
+</span><span id="install-140"><a href="#install-140"><span class="linenos">140</span></a>            <span class="nb">list</span><span class="p">(</span><span class="n">vocabularies</span><span class="p">[</span><span class="s2">&quot;tables&quot;</span><span class="p">])</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">filename</span><span class="o">.</span><span class="n">stem</span><span class="p">)</span>
+</span><span id="install-141"><a href="#install-141"><span class="linenos">141</span></a>            <span class="n">table_count</span> <span class="o">=</span> <span class="n">table_count</span> <span class="o">+</span> <span class="mi">1</span>
+</span><span id="install-142"><a href="#install-142"><span class="linenos">142</span></a>        <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
+</span><span id="install-143"><a href="#install-143"><span class="linenos">143</span></a>            <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Error reading file </span><span class="si">{</span><span class="n">filename</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="install-144"><a href="#install-144"><span class="linenos">144</span></a>
+</span><span id="install-145"><a href="#install-145"><span class="linenos">145</span></a>    <span class="n">conn</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+</span><span id="install-146"><a href="#install-146"><span class="linenos">146</span></a>
+</span><span id="install-147"><a href="#install-147"><span class="linenos">147</span></a>    <span class="c1"># write version file</span>
+</span><span id="install-148"><a href="#install-148"><span class="linenos">148</span></a>    <span class="n">write_version_file</span><span class="p">(</span><span class="n">version</span><span class="p">)</span>
+</span><span id="install-149"><a href="#install-149"><span class="linenos">149</span></a>
+</span><span id="install-150"><a href="#install-150"><span class="linenos">150</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;OMOP installation completed&quot;</span><span class="p">)</span>
 </span></pre></div>
 
 
@@ -761,22 +773,22 @@
 
     </div>
     <a class="headerlink" href="#write_version_file"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="write_version_file-140"><a href="#write_version_file-140"><span class="linenos">140</span></a><span class="k">def</span><span class="w"> </span><span class="nf">write_version_file</span><span class="p">(</span><span class="n">version</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
-</span><span id="write_version_file-141"><a href="#write_version_file-141"><span class="linenos">141</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Writes the OMOP vocaburaries and version to a file</span>
-</span><span id="write_version_file-142"><a href="#write_version_file-142"><span class="linenos">142</span></a>
-</span><span id="write_version_file-143"><a href="#write_version_file-143"><span class="linenos">143</span></a><span class="sd">    Args:</span>
-</span><span id="write_version_file-144"><a href="#write_version_file-144"><span class="linenos">144</span></a><span class="sd">        version (str): version of the vocabularies distributed by OHDSI Athena</span>
-</span><span id="write_version_file-145"><a href="#write_version_file-145"><span class="linenos">145</span></a><span class="sd">    &quot;&quot;&quot;</span>
-</span><span id="write_version_file-146"><a href="#write_version_file-146"><span class="linenos">146</span></a>    <span class="n">vocabularies</span><span class="p">[</span><span class="s2">&quot;version&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">version</span>
-</span><span id="write_version_file-147"><a href="#write_version_file-147"><span class="linenos">147</span></a>    <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">VERSION_PATH</span><span class="p">,</span> <span class="s2">&quot;w&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
-</span><span id="write_version_file-148"><a href="#write_version_file-148"><span class="linenos">148</span></a>        <span class="n">yaml</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span>
-</span><span id="write_version_file-149"><a href="#write_version_file-149"><span class="linenos">149</span></a>            <span class="n">vocabularies</span><span class="p">,</span>
-</span><span id="write_version_file-150"><a href="#write_version_file-150"><span class="linenos">150</span></a>            <span class="n">file</span><span class="p">,</span>
-</span><span id="write_version_file-151"><a href="#write_version_file-151"><span class="linenos">151</span></a>            <span class="n">Dumper</span><span class="o">=</span><span class="n">util</span><span class="o">.</span><span class="n">QuotedDumper</span><span class="p">,</span>
-</span><span id="write_version_file-152"><a href="#write_version_file-152"><span class="linenos">152</span></a>            <span class="n">default_flow_style</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-</span><span id="write_version_file-153"><a href="#write_version_file-153"><span class="linenos">153</span></a>            <span class="n">sort_keys</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-</span><span id="write_version_file-154"><a href="#write_version_file-154"><span class="linenos">154</span></a>            <span class="n">default_style</span><span class="o">=</span><span class="s1">&#39;&quot;&#39;</span><span class="p">,</span>
-</span><span id="write_version_file-155"><a href="#write_version_file-155"><span class="linenos">155</span></a>        <span class="p">)</span>
+            <div class="pdoc-code codehilite"><pre><span></span><span id="write_version_file-153"><a href="#write_version_file-153"><span class="linenos">153</span></a><span class="k">def</span><span class="w"> </span><span class="nf">write_version_file</span><span class="p">(</span><span class="n">version</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
+</span><span id="write_version_file-154"><a href="#write_version_file-154"><span class="linenos">154</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Writes the OMOP vocaburaries and version to a file</span>
+</span><span id="write_version_file-155"><a href="#write_version_file-155"><span class="linenos">155</span></a>
+</span><span id="write_version_file-156"><a href="#write_version_file-156"><span class="linenos">156</span></a><span class="sd">    Args:</span>
+</span><span id="write_version_file-157"><a href="#write_version_file-157"><span class="linenos">157</span></a><span class="sd">        version (str): version of the vocabularies distributed by OHDSI Athena</span>
+</span><span id="write_version_file-158"><a href="#write_version_file-158"><span class="linenos">158</span></a><span class="sd">    &quot;&quot;&quot;</span>
+</span><span id="write_version_file-159"><a href="#write_version_file-159"><span class="linenos">159</span></a>    <span class="n">vocabularies</span><span class="p">[</span><span class="s2">&quot;version&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">version</span>
+</span><span id="write_version_file-160"><a href="#write_version_file-160"><span class="linenos">160</span></a>    <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">VERSION_PATH</span><span class="p">,</span> <span class="s2">&quot;w&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
+</span><span id="write_version_file-161"><a href="#write_version_file-161"><span class="linenos">161</span></a>        <span class="n">yaml</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span>
+</span><span id="write_version_file-162"><a href="#write_version_file-162"><span class="linenos">162</span></a>            <span class="n">vocabularies</span><span class="p">,</span>
+</span><span id="write_version_file-163"><a href="#write_version_file-163"><span class="linenos">163</span></a>            <span class="n">file</span><span class="p">,</span>
+</span><span id="write_version_file-164"><a href="#write_version_file-164"><span class="linenos">164</span></a>            <span class="n">Dumper</span><span class="o">=</span><span class="n">util</span><span class="o">.</span><span class="n">QuotedDumper</span><span class="p">,</span>
+</span><span id="write_version_file-165"><a href="#write_version_file-165"><span class="linenos">165</span></a>            <span class="n">default_flow_style</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="write_version_file-166"><a href="#write_version_file-166"><span class="linenos">166</span></a>            <span class="n">sort_keys</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="write_version_file-167"><a href="#write_version_file-167"><span class="linenos">167</span></a>            <span class="n">default_style</span><span class="o">=</span><span class="s1">&#39;&quot;&#39;</span><span class="p">,</span>
+</span><span id="write_version_file-168"><a href="#write_version_file-168"><span class="linenos">168</span></a>        <span class="p">)</span>
 </span></pre></div>
 
 
@@ -802,31 +814,31 @@
 
     </div>
     <a class="headerlink" href="#clear"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="clear-158"><a href="#clear-158"><span class="linenos">158</span></a><span class="k">def</span><span class="w"> </span><span class="nf">clear</span><span class="p">(</span><span class="n">db_path</span><span class="p">:</span> <span class="n">Path</span><span class="p">):</span>
-</span><span id="clear-159"><a href="#clear-159"><span class="linenos">159</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Clears the OMOP sql database</span>
-</span><span id="clear-160"><a href="#clear-160"><span class="linenos">160</span></a>
-</span><span id="clear-161"><a href="#clear-161"><span class="linenos">161</span></a><span class="sd">    Args:</span>
-</span><span id="clear-162"><a href="#clear-162"><span class="linenos">162</span></a><span class="sd">        db_path (Path): the path to the omop sqllite database</span>
-</span><span id="clear-163"><a href="#clear-163"><span class="linenos">163</span></a>
-</span><span id="clear-164"><a href="#clear-164"><span class="linenos">164</span></a><span class="sd">    Raises:</span>
-</span><span id="clear-165"><a href="#clear-165"><span class="linenos">165</span></a><span class="sd">        FileNotFoundError: if the omop sqllite database does not exist</span>
-</span><span id="clear-166"><a href="#clear-166"><span class="linenos">166</span></a><span class="sd">    &quot;&quot;&quot;</span>
-</span><span id="clear-167"><a href="#clear-167"><span class="linenos">167</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Clearing OMOP data from database&quot;</span><span class="p">)</span>
-</span><span id="clear-168"><a href="#clear-168"><span class="linenos">168</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">db_path</span><span class="o">.</span><span class="n">is_file</span><span class="p">():</span>
-</span><span id="clear-169"><a href="#clear-169"><span class="linenos">169</span></a>        <span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Error: OMOP DB file &#39;</span><span class="si">{</span><span class="n">db_path</span><span class="si">}</span><span class="s2">&#39; does not exist.&quot;</span><span class="p">)</span>
-</span><span id="clear-170"><a href="#clear-170"><span class="linenos">170</span></a>    <span class="n">conn</span> <span class="o">=</span> <span class="n">sqlite3</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="n">db_path</span><span class="p">)</span>
-</span><span id="clear-171"><a href="#clear-171"><span class="linenos">171</span></a>    <span class="n">cur</span> <span class="o">=</span> <span class="n">conn</span><span class="o">.</span><span class="n">cursor</span><span class="p">()</span>
-</span><span id="clear-172"><a href="#clear-172"><span class="linenos">172</span></a>    <span class="n">cur</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">&quot;SELECT name FROM sqlite_master WHERE type=&#39;table&#39;;&quot;</span><span class="p">)</span>
+            <div class="pdoc-code codehilite"><pre><span></span><span id="clear-171"><a href="#clear-171"><span class="linenos">171</span></a><span class="k">def</span><span class="w"> </span><span class="nf">clear</span><span class="p">(</span><span class="n">db_path</span><span class="p">:</span> <span class="n">Path</span><span class="p">):</span>
+</span><span id="clear-172"><a href="#clear-172"><span class="linenos">172</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Clears the OMOP sql database</span>
 </span><span id="clear-173"><a href="#clear-173"><span class="linenos">173</span></a>
-</span><span id="clear-174"><a href="#clear-174"><span class="linenos">174</span></a>    <span class="c1"># Fetch and print table names</span>
-</span><span id="clear-175"><a href="#clear-175"><span class="linenos">175</span></a>    <span class="n">tables</span> <span class="o">=</span> <span class="n">cur</span><span class="o">.</span><span class="n">fetchall</span><span class="p">()</span>
-</span><span id="clear-176"><a href="#clear-176"><span class="linenos">176</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">&quot;Tables in database:&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">table</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="n">tables</span><span class="p">])</span>
-</span><span id="clear-177"><a href="#clear-177"><span class="linenos">177</span></a>
-</span><span id="clear-178"><a href="#clear-178"><span class="linenos">178</span></a>    <span class="c1"># cur.execute(&quot;DROP TABLE CONCEPT_SET;&quot;)</span>
-</span><span id="clear-179"><a href="#clear-179"><span class="linenos">179</span></a>    <span class="c1"># cur.execute(&quot;DROP TABLE CONCEPT_SET_ITEM;&quot;)</span>
-</span><span id="clear-180"><a href="#clear-180"><span class="linenos">180</span></a>
-</span><span id="clear-181"><a href="#clear-181"><span class="linenos">181</span></a>    <span class="n">conn</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
-</span><span id="clear-182"><a href="#clear-182"><span class="linenos">182</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;OMOP database cleared&quot;</span><span class="p">)</span>
+</span><span id="clear-174"><a href="#clear-174"><span class="linenos">174</span></a><span class="sd">    Args:</span>
+</span><span id="clear-175"><a href="#clear-175"><span class="linenos">175</span></a><span class="sd">        db_path (Path): the path to the omop sqllite database</span>
+</span><span id="clear-176"><a href="#clear-176"><span class="linenos">176</span></a>
+</span><span id="clear-177"><a href="#clear-177"><span class="linenos">177</span></a><span class="sd">    Raises:</span>
+</span><span id="clear-178"><a href="#clear-178"><span class="linenos">178</span></a><span class="sd">        FileNotFoundError: if the omop sqllite database does not exist</span>
+</span><span id="clear-179"><a href="#clear-179"><span class="linenos">179</span></a><span class="sd">    &quot;&quot;&quot;</span>
+</span><span id="clear-180"><a href="#clear-180"><span class="linenos">180</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Clearing OMOP data from database&quot;</span><span class="p">)</span>
+</span><span id="clear-181"><a href="#clear-181"><span class="linenos">181</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">db_path</span><span class="o">.</span><span class="n">is_file</span><span class="p">():</span>
+</span><span id="clear-182"><a href="#clear-182"><span class="linenos">182</span></a>        <span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Error: OMOP DB file &#39;</span><span class="si">{</span><span class="n">db_path</span><span class="si">}</span><span class="s2">&#39; does not exist.&quot;</span><span class="p">)</span>
+</span><span id="clear-183"><a href="#clear-183"><span class="linenos">183</span></a>    <span class="n">conn</span> <span class="o">=</span> <span class="n">sqlite3</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="n">db_path</span><span class="p">)</span>
+</span><span id="clear-184"><a href="#clear-184"><span class="linenos">184</span></a>    <span class="n">cur</span> <span class="o">=</span> <span class="n">conn</span><span class="o">.</span><span class="n">cursor</span><span class="p">()</span>
+</span><span id="clear-185"><a href="#clear-185"><span class="linenos">185</span></a>    <span class="n">cur</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">&quot;SELECT name FROM sqlite_master WHERE type=&#39;table&#39;;&quot;</span><span class="p">)</span>
+</span><span id="clear-186"><a href="#clear-186"><span class="linenos">186</span></a>
+</span><span id="clear-187"><a href="#clear-187"><span class="linenos">187</span></a>    <span class="c1"># Fetch and print table names</span>
+</span><span id="clear-188"><a href="#clear-188"><span class="linenos">188</span></a>    <span class="n">tables</span> <span class="o">=</span> <span class="n">cur</span><span class="o">.</span><span class="n">fetchall</span><span class="p">()</span>
+</span><span id="clear-189"><a href="#clear-189"><span class="linenos">189</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">&quot;Tables in database:&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">table</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="n">tables</span><span class="p">])</span>
+</span><span id="clear-190"><a href="#clear-190"><span class="linenos">190</span></a>
+</span><span id="clear-191"><a href="#clear-191"><span class="linenos">191</span></a>    <span class="c1"># cur.execute(&quot;DROP TABLE CONCEPT_SET;&quot;)</span>
+</span><span id="clear-192"><a href="#clear-192"><span class="linenos">192</span></a>    <span class="c1"># cur.execute(&quot;DROP TABLE CONCEPT_SET_ITEM;&quot;)</span>
+</span><span id="clear-193"><a href="#clear-193"><span class="linenos">193</span></a>
+</span><span id="clear-194"><a href="#clear-194"><span class="linenos">194</span></a>    <span class="n">conn</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+</span><span id="clear-195"><a href="#clear-195"><span class="linenos">195</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;OMOP database cleared&quot;</span><span class="p">)</span>
 </span></pre></div>
 
 
@@ -858,22 +870,22 @@
 
     </div>
     <a class="headerlink" href="#delete"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="delete-185"><a href="#delete-185"><span class="linenos">185</span></a><span class="k">def</span><span class="w"> </span><span class="nf">delete</span><span class="p">(</span><span class="n">db_path</span><span class="p">:</span> <span class="n">Path</span><span class="p">):</span>
-</span><span id="delete-186"><a href="#delete-186"><span class="linenos">186</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Deletes the OMOP sql database</span>
-</span><span id="delete-187"><a href="#delete-187"><span class="linenos">187</span></a>
-</span><span id="delete-188"><a href="#delete-188"><span class="linenos">188</span></a><span class="sd">    Args:</span>
-</span><span id="delete-189"><a href="#delete-189"><span class="linenos">189</span></a><span class="sd">        db_path (Path): the path to the omop sqllite database</span>
-</span><span id="delete-190"><a href="#delete-190"><span class="linenos">190</span></a>
-</span><span id="delete-191"><a href="#delete-191"><span class="linenos">191</span></a><span class="sd">    Raises:</span>
-</span><span id="delete-192"><a href="#delete-192"><span class="linenos">192</span></a><span class="sd">        FileNotFoundError: if the omop sqllite database does not exist</span>
-</span><span id="delete-193"><a href="#delete-193"><span class="linenos">193</span></a><span class="sd">    &quot;&quot;&quot;</span>
-</span><span id="delete-194"><a href="#delete-194"><span class="linenos">194</span></a>    
-</span><span id="delete-195"><a href="#delete-195"><span class="linenos">195</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Deleting OMOP database&quot;</span><span class="p">)</span>
-</span><span id="delete-196"><a href="#delete-196"><span class="linenos">196</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">db_path</span><span class="o">.</span><span class="n">is_file</span><span class="p">():</span>
-</span><span id="delete-197"><a href="#delete-197"><span class="linenos">197</span></a>        <span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Error: OMOP DB file &#39;</span><span class="si">{</span><span class="n">db_path</span><span class="si">}</span><span class="s2">&#39; does not exist.&quot;</span><span class="p">)</span>
-</span><span id="delete-198"><a href="#delete-198"><span class="linenos">198</span></a>
-</span><span id="delete-199"><a href="#delete-199"><span class="linenos">199</span></a>    <span class="n">db_path</span><span class="o">.</span><span class="n">unlink</span><span class="p">()</span>
-</span><span id="delete-200"><a href="#delete-200"><span class="linenos">200</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;OMOP database deleted&quot;</span><span class="p">)</span>
+            <div class="pdoc-code codehilite"><pre><span></span><span id="delete-198"><a href="#delete-198"><span class="linenos">198</span></a><span class="k">def</span><span class="w"> </span><span class="nf">delete</span><span class="p">(</span><span class="n">db_path</span><span class="p">:</span> <span class="n">Path</span><span class="p">):</span>
+</span><span id="delete-199"><a href="#delete-199"><span class="linenos">199</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Deletes the OMOP sql database</span>
+</span><span id="delete-200"><a href="#delete-200"><span class="linenos">200</span></a>
+</span><span id="delete-201"><a href="#delete-201"><span class="linenos">201</span></a><span class="sd">    Args:</span>
+</span><span id="delete-202"><a href="#delete-202"><span class="linenos">202</span></a><span class="sd">        db_path (Path): the path to the omop sqllite database</span>
+</span><span id="delete-203"><a href="#delete-203"><span class="linenos">203</span></a>
+</span><span id="delete-204"><a href="#delete-204"><span class="linenos">204</span></a><span class="sd">    Raises:</span>
+</span><span id="delete-205"><a href="#delete-205"><span class="linenos">205</span></a><span class="sd">        FileNotFoundError: if the omop sqllite database does not exist</span>
+</span><span id="delete-206"><a href="#delete-206"><span class="linenos">206</span></a><span class="sd">    &quot;&quot;&quot;</span>
+</span><span id="delete-207"><a href="#delete-207"><span class="linenos">207</span></a>
+</span><span id="delete-208"><a href="#delete-208"><span class="linenos">208</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Deleting OMOP database&quot;</span><span class="p">)</span>
+</span><span id="delete-209"><a href="#delete-209"><span class="linenos">209</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">db_path</span><span class="o">.</span><span class="n">is_file</span><span class="p">():</span>
+</span><span id="delete-210"><a href="#delete-210"><span class="linenos">210</span></a>        <span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Error: OMOP DB file &#39;</span><span class="si">{</span><span class="n">db_path</span><span class="si">}</span><span class="s2">&#39; does not exist.&quot;</span><span class="p">)</span>
+</span><span id="delete-211"><a href="#delete-211"><span class="linenos">211</span></a>
+</span><span id="delete-212"><a href="#delete-212"><span class="linenos">212</span></a>    <span class="n">db_path</span><span class="o">.</span><span class="n">unlink</span><span class="p">()</span>
+</span><span id="delete-213"><a href="#delete-213"><span class="linenos">213</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;OMOP database deleted&quot;</span><span class="p">)</span>
 </span></pre></div>
 
 
@@ -905,30 +917,30 @@
 
     </div>
     <a class="headerlink" href="#table_exists"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="table_exists-203"><a href="#table_exists-203"><span class="linenos">203</span></a><span class="k">def</span><span class="w"> </span><span class="nf">table_exists</span><span class="p">(</span><span class="n">cursor</span><span class="p">:</span> <span class="n">sqlite3</span><span class="o">.</span><span class="n">Cursor</span><span class="p">,</span> <span class="n">table_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="table_exists-204"><a href="#table_exists-204"><span class="linenos">204</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Query to check if the table exists</span>
-</span><span id="table_exists-205"><a href="#table_exists-205"><span class="linenos">205</span></a>
-</span><span id="table_exists-206"><a href="#table_exists-206"><span class="linenos">206</span></a><span class="sd">    Args:</span>
-</span><span id="table_exists-207"><a href="#table_exists-207"><span class="linenos">207</span></a><span class="sd">        cursor (sqlite3.Cursor): a sqllite database cursor</span>
-</span><span id="table_exists-208"><a href="#table_exists-208"><span class="linenos">208</span></a><span class="sd">        table_name (str): the table name to check</span>
-</span><span id="table_exists-209"><a href="#table_exists-209"><span class="linenos">209</span></a>
-</span><span id="table_exists-210"><a href="#table_exists-210"><span class="linenos">210</span></a><span class="sd">    Returns:</span>
-</span><span id="table_exists-211"><a href="#table_exists-211"><span class="linenos">211</span></a><span class="sd">        bool: true if table exists</span>
-</span><span id="table_exists-212"><a href="#table_exists-212"><span class="linenos">212</span></a><span class="sd">    &quot;&quot;&quot;</span>    
-</span><span id="table_exists-213"><a href="#table_exists-213"><span class="linenos">213</span></a>        
-</span><span id="table_exists-214"><a href="#table_exists-214"><span class="linenos">214</span></a>    <span class="n">cursor</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span>
-</span><span id="table_exists-215"><a href="#table_exists-215"><span class="linenos">215</span></a><span class="w">        </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="table_exists-216"><a href="#table_exists-216"><span class="linenos">216</span></a><span class="sd">		SELECT name</span>
-</span><span id="table_exists-217"><a href="#table_exists-217"><span class="linenos">217</span></a><span class="sd">		FROM sqlite_master</span>
-</span><span id="table_exists-218"><a href="#table_exists-218"><span class="linenos">218</span></a><span class="sd">		WHERE type=&#39;table&#39; AND name=?</span>
-</span><span id="table_exists-219"><a href="#table_exists-219"><span class="linenos">219</span></a><span class="sd">		&quot;&quot;&quot;</span><span class="p">,</span>
-</span><span id="table_exists-220"><a href="#table_exists-220"><span class="linenos">220</span></a>        <span class="p">(</span><span class="n">table_name</span><span class="p">,),</span>
-</span><span id="table_exists-221"><a href="#table_exists-221"><span class="linenos">221</span></a>    <span class="p">)</span>
+            <div class="pdoc-code codehilite"><pre><span></span><span id="table_exists-216"><a href="#table_exists-216"><span class="linenos">216</span></a><span class="k">def</span><span class="w"> </span><span class="nf">table_exists</span><span class="p">(</span><span class="n">cursor</span><span class="p">:</span> <span class="n">sqlite3</span><span class="o">.</span><span class="n">Cursor</span><span class="p">,</span> <span class="n">table_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="table_exists-217"><a href="#table_exists-217"><span class="linenos">217</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Query to check if the table exists</span>
+</span><span id="table_exists-218"><a href="#table_exists-218"><span class="linenos">218</span></a>
+</span><span id="table_exists-219"><a href="#table_exists-219"><span class="linenos">219</span></a><span class="sd">    Args:</span>
+</span><span id="table_exists-220"><a href="#table_exists-220"><span class="linenos">220</span></a><span class="sd">        cursor (sqlite3.Cursor): a sqllite database cursor</span>
+</span><span id="table_exists-221"><a href="#table_exists-221"><span class="linenos">221</span></a><span class="sd">        table_name (str): the table name to check</span>
 </span><span id="table_exists-222"><a href="#table_exists-222"><span class="linenos">222</span></a>
-</span><span id="table_exists-223"><a href="#table_exists-223"><span class="linenos">223</span></a>    <span class="c1"># Fetch the result</span>
-</span><span id="table_exists-224"><a href="#table_exists-224"><span class="linenos">224</span></a>    <span class="n">result</span> <span class="o">=</span> <span class="n">cursor</span><span class="o">.</span><span class="n">fetchone</span><span class="p">()</span>
-</span><span id="table_exists-225"><a href="#table_exists-225"><span class="linenos">225</span></a>
-</span><span id="table_exists-226"><a href="#table_exists-226"><span class="linenos">226</span></a>    <span class="k">return</span> <span class="n">result</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span>
+</span><span id="table_exists-223"><a href="#table_exists-223"><span class="linenos">223</span></a><span class="sd">    Returns:</span>
+</span><span id="table_exists-224"><a href="#table_exists-224"><span class="linenos">224</span></a><span class="sd">        bool: true if table exists</span>
+</span><span id="table_exists-225"><a href="#table_exists-225"><span class="linenos">225</span></a><span class="sd">    &quot;&quot;&quot;</span>
+</span><span id="table_exists-226"><a href="#table_exists-226"><span class="linenos">226</span></a>
+</span><span id="table_exists-227"><a href="#table_exists-227"><span class="linenos">227</span></a>    <span class="n">cursor</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span>
+</span><span id="table_exists-228"><a href="#table_exists-228"><span class="linenos">228</span></a><span class="w">        </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="table_exists-229"><a href="#table_exists-229"><span class="linenos">229</span></a><span class="sd">		SELECT name</span>
+</span><span id="table_exists-230"><a href="#table_exists-230"><span class="linenos">230</span></a><span class="sd">		FROM sqlite_master</span>
+</span><span id="table_exists-231"><a href="#table_exists-231"><span class="linenos">231</span></a><span class="sd">		WHERE type=&#39;table&#39; AND name=?</span>
+</span><span id="table_exists-232"><a href="#table_exists-232"><span class="linenos">232</span></a><span class="sd">		&quot;&quot;&quot;</span><span class="p">,</span>
+</span><span id="table_exists-233"><a href="#table_exists-233"><span class="linenos">233</span></a>        <span class="p">(</span><span class="n">table_name</span><span class="p">,),</span>
+</span><span id="table_exists-234"><a href="#table_exists-234"><span class="linenos">234</span></a>    <span class="p">)</span>
+</span><span id="table_exists-235"><a href="#table_exists-235"><span class="linenos">235</span></a>
+</span><span id="table_exists-236"><a href="#table_exists-236"><span class="linenos">236</span></a>    <span class="c1"># Fetch the result</span>
+</span><span id="table_exists-237"><a href="#table_exists-237"><span class="linenos">237</span></a>    <span class="n">result</span> <span class="o">=</span> <span class="n">cursor</span><span class="o">.</span><span class="n">fetchone</span><span class="p">()</span>
+</span><span id="table_exists-238"><a href="#table_exists-238"><span class="linenos">238</span></a>
+</span><span id="table_exists-239"><a href="#table_exists-239"><span class="linenos">239</span></a>    <span class="k">return</span> <span class="n">result</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span>
 </span></pre></div>
 
 
@@ -961,30 +973,30 @@
 
     </div>
     <a class="headerlink" href="#vocab_exists"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="vocab_exists-229"><a href="#vocab_exists-229"><span class="linenos">229</span></a><span class="k">def</span><span class="w"> </span><span class="nf">vocab_exists</span><span class="p">(</span><span class="n">cursor</span><span class="p">:</span> <span class="n">sqlite3</span><span class="o">.</span><span class="n">Cursor</span><span class="p">,</span> <span class="n">vocab_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="vocab_exists-230"><a href="#vocab_exists-230"><span class="linenos">230</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Query to check if the vocabulary exists</span>
-</span><span id="vocab_exists-231"><a href="#vocab_exists-231"><span class="linenos">231</span></a>
-</span><span id="vocab_exists-232"><a href="#vocab_exists-232"><span class="linenos">232</span></a><span class="sd">    Args:</span>
-</span><span id="vocab_exists-233"><a href="#vocab_exists-233"><span class="linenos">233</span></a><span class="sd">        cursor (sqlite3.Cursor): a sqllite database cursor</span>
-</span><span id="vocab_exists-234"><a href="#vocab_exists-234"><span class="linenos">234</span></a><span class="sd">        vocab_id (str): the vocabulary id to check</span>
-</span><span id="vocab_exists-235"><a href="#vocab_exists-235"><span class="linenos">235</span></a>
-</span><span id="vocab_exists-236"><a href="#vocab_exists-236"><span class="linenos">236</span></a><span class="sd">    Returns:</span>
-</span><span id="vocab_exists-237"><a href="#vocab_exists-237"><span class="linenos">237</span></a><span class="sd">        bool: true if vocabulary id exists</span>
-</span><span id="vocab_exists-238"><a href="#vocab_exists-238"><span class="linenos">238</span></a><span class="sd">    &quot;&quot;&quot;</span>    
-</span><span id="vocab_exists-239"><a href="#vocab_exists-239"><span class="linenos">239</span></a>    
-</span><span id="vocab_exists-240"><a href="#vocab_exists-240"><span class="linenos">240</span></a>    <span class="n">cursor</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span>
-</span><span id="vocab_exists-241"><a href="#vocab_exists-241"><span class="linenos">241</span></a><span class="w">        </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="vocab_exists-242"><a href="#vocab_exists-242"><span class="linenos">242</span></a><span class="sd">		SELECT vocabulary_id </span>
-</span><span id="vocab_exists-243"><a href="#vocab_exists-243"><span class="linenos">243</span></a><span class="sd">		FROM VOCABULARY</span>
-</span><span id="vocab_exists-244"><a href="#vocab_exists-244"><span class="linenos">244</span></a><span class="sd">		WHERE vocabulary_id=?</span>
-</span><span id="vocab_exists-245"><a href="#vocab_exists-245"><span class="linenos">245</span></a><span class="sd">		&quot;&quot;&quot;</span><span class="p">,</span>
-</span><span id="vocab_exists-246"><a href="#vocab_exists-246"><span class="linenos">246</span></a>        <span class="p">(</span><span class="n">vocab_id</span><span class="p">,),</span>
-</span><span id="vocab_exists-247"><a href="#vocab_exists-247"><span class="linenos">247</span></a>    <span class="p">)</span>
+            <div class="pdoc-code codehilite"><pre><span></span><span id="vocab_exists-242"><a href="#vocab_exists-242"><span class="linenos">242</span></a><span class="k">def</span><span class="w"> </span><span class="nf">vocab_exists</span><span class="p">(</span><span class="n">cursor</span><span class="p">:</span> <span class="n">sqlite3</span><span class="o">.</span><span class="n">Cursor</span><span class="p">,</span> <span class="n">vocab_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="vocab_exists-243"><a href="#vocab_exists-243"><span class="linenos">243</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Query to check if the vocabulary exists</span>
+</span><span id="vocab_exists-244"><a href="#vocab_exists-244"><span class="linenos">244</span></a>
+</span><span id="vocab_exists-245"><a href="#vocab_exists-245"><span class="linenos">245</span></a><span class="sd">    Args:</span>
+</span><span id="vocab_exists-246"><a href="#vocab_exists-246"><span class="linenos">246</span></a><span class="sd">        cursor (sqlite3.Cursor): a sqllite database cursor</span>
+</span><span id="vocab_exists-247"><a href="#vocab_exists-247"><span class="linenos">247</span></a><span class="sd">        vocab_id (str): the vocabulary id to check</span>
 </span><span id="vocab_exists-248"><a href="#vocab_exists-248"><span class="linenos">248</span></a>
-</span><span id="vocab_exists-249"><a href="#vocab_exists-249"><span class="linenos">249</span></a>    <span class="c1"># Fetch the result</span>
-</span><span id="vocab_exists-250"><a href="#vocab_exists-250"><span class="linenos">250</span></a>    <span class="n">result</span> <span class="o">=</span> <span class="n">cursor</span><span class="o">.</span><span class="n">fetchone</span><span class="p">()</span>
-</span><span id="vocab_exists-251"><a href="#vocab_exists-251"><span class="linenos">251</span></a>
-</span><span id="vocab_exists-252"><a href="#vocab_exists-252"><span class="linenos">252</span></a>    <span class="k">return</span> <span class="n">result</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span>
+</span><span id="vocab_exists-249"><a href="#vocab_exists-249"><span class="linenos">249</span></a><span class="sd">    Returns:</span>
+</span><span id="vocab_exists-250"><a href="#vocab_exists-250"><span class="linenos">250</span></a><span class="sd">        bool: true if vocabulary id exists</span>
+</span><span id="vocab_exists-251"><a href="#vocab_exists-251"><span class="linenos">251</span></a><span class="sd">    &quot;&quot;&quot;</span>
+</span><span id="vocab_exists-252"><a href="#vocab_exists-252"><span class="linenos">252</span></a>
+</span><span id="vocab_exists-253"><a href="#vocab_exists-253"><span class="linenos">253</span></a>    <span class="n">cursor</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span>
+</span><span id="vocab_exists-254"><a href="#vocab_exists-254"><span class="linenos">254</span></a><span class="w">        </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="vocab_exists-255"><a href="#vocab_exists-255"><span class="linenos">255</span></a><span class="sd">		SELECT vocabulary_id </span>
+</span><span id="vocab_exists-256"><a href="#vocab_exists-256"><span class="linenos">256</span></a><span class="sd">		FROM VOCABULARY</span>
+</span><span id="vocab_exists-257"><a href="#vocab_exists-257"><span class="linenos">257</span></a><span class="sd">		WHERE vocabulary_id=?</span>
+</span><span id="vocab_exists-258"><a href="#vocab_exists-258"><span class="linenos">258</span></a><span class="sd">		&quot;&quot;&quot;</span><span class="p">,</span>
+</span><span id="vocab_exists-259"><a href="#vocab_exists-259"><span class="linenos">259</span></a>        <span class="p">(</span><span class="n">vocab_id</span><span class="p">,),</span>
+</span><span id="vocab_exists-260"><a href="#vocab_exists-260"><span class="linenos">260</span></a>    <span class="p">)</span>
+</span><span id="vocab_exists-261"><a href="#vocab_exists-261"><span class="linenos">261</span></a>
+</span><span id="vocab_exists-262"><a href="#vocab_exists-262"><span class="linenos">262</span></a>    <span class="c1"># Fetch the result</span>
+</span><span id="vocab_exists-263"><a href="#vocab_exists-263"><span class="linenos">263</span></a>    <span class="n">result</span> <span class="o">=</span> <span class="n">cursor</span><span class="o">.</span><span class="n">fetchone</span><span class="p">()</span>
+</span><span id="vocab_exists-264"><a href="#vocab_exists-264"><span class="linenos">264</span></a>
+</span><span id="vocab_exists-265"><a href="#vocab_exists-265"><span class="linenos">265</span></a>    <span class="k">return</span> <span class="n">result</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span>
 </span></pre></div>
 
 
@@ -1017,22 +1029,22 @@
 
     </div>
     <a class="headerlink" href="#concept_set_exist"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="concept_set_exist-255"><a href="#concept_set_exist-255"><span class="linenos">255</span></a><span class="k">def</span><span class="w"> </span><span class="nf">concept_set_exist</span><span class="p">(</span><span class="n">cursor</span><span class="p">:</span> <span class="n">sqlite3</span><span class="o">.</span><span class="n">Cursor</span><span class="p">,</span> <span class="n">concept_set_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="concept_set_exist-256"><a href="#concept_set_exist-256"><span class="linenos">256</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Query to check if the concept set exists</span>
-</span><span id="concept_set_exist-257"><a href="#concept_set_exist-257"><span class="linenos">257</span></a>
-</span><span id="concept_set_exist-258"><a href="#concept_set_exist-258"><span class="linenos">258</span></a><span class="sd">    Args:</span>
-</span><span id="concept_set_exist-259"><a href="#concept_set_exist-259"><span class="linenos">259</span></a><span class="sd">        cursor (sqlite3.Cursor): a sqllite database cursor</span>
-</span><span id="concept_set_exist-260"><a href="#concept_set_exist-260"><span class="linenos">260</span></a><span class="sd">        concept_set_name (str): the concept set name to check</span>
-</span><span id="concept_set_exist-261"><a href="#concept_set_exist-261"><span class="linenos">261</span></a>
-</span><span id="concept_set_exist-262"><a href="#concept_set_exist-262"><span class="linenos">262</span></a><span class="sd">    Returns:</span>
-</span><span id="concept_set_exist-263"><a href="#concept_set_exist-263"><span class="linenos">263</span></a><span class="sd">        bool: true if concept set exists</span>
-</span><span id="concept_set_exist-264"><a href="#concept_set_exist-264"><span class="linenos">264</span></a><span class="sd">    &quot;&quot;&quot;</span>
-</span><span id="concept_set_exist-265"><a href="#concept_set_exist-265"><span class="linenos">265</span></a>    
-</span><span id="concept_set_exist-266"><a href="#concept_set_exist-266"><span class="linenos">266</span></a>    <span class="n">query</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;SELECT EXISTS (SELECT 1 FROM CONCEPT_SET WHERE concept_set_name = ?)&quot;</span>
-</span><span id="concept_set_exist-267"><a href="#concept_set_exist-267"><span class="linenos">267</span></a>    <span class="n">cursor</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">query</span><span class="p">,</span> <span class="p">(</span><span class="n">concept_set_name</span><span class="p">,))</span>
-</span><span id="concept_set_exist-268"><a href="#concept_set_exist-268"><span class="linenos">268</span></a>
-</span><span id="concept_set_exist-269"><a href="#concept_set_exist-269"><span class="linenos">269</span></a>    <span class="c1"># 1 if exists, 0 otherwise</span>
-</span><span id="concept_set_exist-270"><a href="#concept_set_exist-270"><span class="linenos">270</span></a>    <span class="k">return</span> <span class="n">cursor</span><span class="o">.</span><span class="n">fetchone</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="mi">1</span>
+            <div class="pdoc-code codehilite"><pre><span></span><span id="concept_set_exist-268"><a href="#concept_set_exist-268"><span class="linenos">268</span></a><span class="k">def</span><span class="w"> </span><span class="nf">concept_set_exist</span><span class="p">(</span><span class="n">cursor</span><span class="p">:</span> <span class="n">sqlite3</span><span class="o">.</span><span class="n">Cursor</span><span class="p">,</span> <span class="n">concept_set_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="concept_set_exist-269"><a href="#concept_set_exist-269"><span class="linenos">269</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Query to check if the concept set exists</span>
+</span><span id="concept_set_exist-270"><a href="#concept_set_exist-270"><span class="linenos">270</span></a>
+</span><span id="concept_set_exist-271"><a href="#concept_set_exist-271"><span class="linenos">271</span></a><span class="sd">    Args:</span>
+</span><span id="concept_set_exist-272"><a href="#concept_set_exist-272"><span class="linenos">272</span></a><span class="sd">        cursor (sqlite3.Cursor): a sqllite database cursor</span>
+</span><span id="concept_set_exist-273"><a href="#concept_set_exist-273"><span class="linenos">273</span></a><span class="sd">        concept_set_name (str): the concept set name to check</span>
+</span><span id="concept_set_exist-274"><a href="#concept_set_exist-274"><span class="linenos">274</span></a>
+</span><span id="concept_set_exist-275"><a href="#concept_set_exist-275"><span class="linenos">275</span></a><span class="sd">    Returns:</span>
+</span><span id="concept_set_exist-276"><a href="#concept_set_exist-276"><span class="linenos">276</span></a><span class="sd">        bool: true if concept set exists</span>
+</span><span id="concept_set_exist-277"><a href="#concept_set_exist-277"><span class="linenos">277</span></a><span class="sd">    &quot;&quot;&quot;</span>
+</span><span id="concept_set_exist-278"><a href="#concept_set_exist-278"><span class="linenos">278</span></a>
+</span><span id="concept_set_exist-279"><a href="#concept_set_exist-279"><span class="linenos">279</span></a>    <span class="n">query</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;SELECT EXISTS (SELECT 1 FROM CONCEPT_SET WHERE concept_set_name = ?)&quot;</span>
+</span><span id="concept_set_exist-280"><a href="#concept_set_exist-280"><span class="linenos">280</span></a>    <span class="n">cursor</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">query</span><span class="p">,</span> <span class="p">(</span><span class="n">concept_set_name</span><span class="p">,))</span>
+</span><span id="concept_set_exist-281"><a href="#concept_set_exist-281"><span class="linenos">281</span></a>
+</span><span id="concept_set_exist-282"><a href="#concept_set_exist-282"><span class="linenos">282</span></a>    <span class="c1"># 1 if exists, 0 otherwise</span>
+</span><span id="concept_set_exist-283"><a href="#concept_set_exist-283"><span class="linenos">283</span></a>    <span class="k">return</span> <span class="n">cursor</span><span class="o">.</span><span class="n">fetchone</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="mi">1</span>
 </span></pre></div>
 
 
@@ -1065,139 +1077,140 @@
 
     </div>
     <a class="headerlink" href="#export"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="export-273"><a href="#export-273"><span class="linenos">273</span></a><span class="k">def</span><span class="w"> </span><span class="nf">export</span><span class="p">(</span><span class="n">map_path</span><span class="p">:</span> <span class="n">Path</span><span class="p">,</span> <span class="n">export_path</span><span class="p">:</span> <span class="n">Path</span><span class="p">,</span> <span class="n">version</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">omop_metadata</span><span class="p">:</span> <span class="nb">dict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Path</span><span class="p">:</span>
-</span><span id="export-274"><a href="#export-274"><span class="linenos">274</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Export concept sets to omop database in csv format</span>
-</span><span id="export-275"><a href="#export-275"><span class="linenos">275</span></a>
-</span><span id="export-276"><a href="#export-276"><span class="linenos">276</span></a><span class="sd">    Args:</span>
-</span><span id="export-277"><a href="#export-277"><span class="linenos">277</span></a><span class="sd">        map_path (Path): path to the acmc map directory containing concept sets in csv format</span>
-</span><span id="export-278"><a href="#export-278"><span class="linenos">278</span></a><span class="sd">        export_path (Path): path to the directory where the omop database csv files are to be written</span>
-</span><span id="export-279"><a href="#export-279"><span class="linenos">279</span></a><span class="sd">        version (str): phenotype version for omop vocabulary version</span>
-</span><span id="export-280"><a href="#export-280"><span class="linenos">280</span></a><span class="sd">        omop_metadata (dict): phenotype omop metadata for omop vocabulary metadata </span>
-</span><span id="export-281"><a href="#export-281"><span class="linenos">281</span></a><span class="sd">                </span>
-</span><span id="export-282"><a href="#export-282"><span class="linenos">282</span></a><span class="sd">    Returns:</span>
-</span><span id="export-283"><a href="#export-283"><span class="linenos">283</span></a><span class="sd">        Path: path to the exported sqllite database</span>
-</span><span id="export-284"><a href="#export-284"><span class="linenos">284</span></a><span class="sd">    &quot;&quot;&quot;</span>
-</span><span id="export-285"><a href="#export-285"><span class="linenos">285</span></a>    
-</span><span id="export-286"><a href="#export-286"><span class="linenos">286</span></a>    
-</span><span id="export-287"><a href="#export-287"><span class="linenos">287</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;exporting with metadata </span><span class="si">{</span><span class="n">omop_metadata</span><span class="si">}</span><span class="s2"> at version </span><span class="si">{</span><span class="n">version</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="export-288"><a href="#export-288"><span class="linenos">288</span></a>
-</span><span id="export-289"><a href="#export-289"><span class="linenos">289</span></a>    <span class="c1"># copy the baseline omop database</span>
-</span><span id="export-290"><a href="#export-290"><span class="linenos">290</span></a>    <span class="n">export_db_path</span> <span class="o">=</span> <span class="n">export_path</span> <span class="o">/</span> <span class="n">EXPORT_FILE</span>
-</span><span id="export-291"><a href="#export-291"><span class="linenos">291</span></a>    <span class="n">shutil</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="n">DB_PATH</span><span class="p">,</span> <span class="n">export_db_path</span><span class="p">)</span>
-</span><span id="export-292"><a href="#export-292"><span class="linenos">292</span></a>
-</span><span id="export-293"><a href="#export-293"><span class="linenos">293</span></a>    <span class="c1"># connect to db</span>
-</span><span id="export-294"><a href="#export-294"><span class="linenos">294</span></a>    <span class="n">conn</span> <span class="o">=</span> <span class="n">sqlite3</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="n">export_db_path</span><span class="p">)</span>
-</span><span id="export-295"><a href="#export-295"><span class="linenos">295</span></a>    <span class="n">cur</span> <span class="o">=</span> <span class="n">conn</span><span class="o">.</span><span class="n">cursor</span><span class="p">()</span>
+            <div class="pdoc-code codehilite"><pre><span></span><span id="export-286"><a href="#export-286"><span class="linenos">286</span></a><span class="k">def</span><span class="w"> </span><span class="nf">export</span><span class="p">(</span>
+</span><span id="export-287"><a href="#export-287"><span class="linenos">287</span></a>    <span class="n">map_path</span><span class="p">:</span> <span class="n">Path</span><span class="p">,</span> <span class="n">export_path</span><span class="p">:</span> <span class="n">Path</span><span class="p">,</span> <span class="n">version</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">omop_metadata</span><span class="p">:</span> <span class="nb">dict</span>
+</span><span id="export-288"><a href="#export-288"><span class="linenos">288</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Path</span><span class="p">:</span>
+</span><span id="export-289"><a href="#export-289"><span class="linenos">289</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Export concept sets to omop database in csv format</span>
+</span><span id="export-290"><a href="#export-290"><span class="linenos">290</span></a>
+</span><span id="export-291"><a href="#export-291"><span class="linenos">291</span></a><span class="sd">    Args:</span>
+</span><span id="export-292"><a href="#export-292"><span class="linenos">292</span></a><span class="sd">        map_path (Path): path to the acmc map directory containing concept sets in csv format</span>
+</span><span id="export-293"><a href="#export-293"><span class="linenos">293</span></a><span class="sd">        export_path (Path): path to the directory where the omop database csv files are to be written</span>
+</span><span id="export-294"><a href="#export-294"><span class="linenos">294</span></a><span class="sd">        version (str): phenotype version for omop vocabulary version</span>
+</span><span id="export-295"><a href="#export-295"><span class="linenos">295</span></a><span class="sd">        omop_metadata (dict): phenotype omop metadata for omop vocabulary metadata</span>
 </span><span id="export-296"><a href="#export-296"><span class="linenos">296</span></a>
-</span><span id="export-297"><a href="#export-297"><span class="linenos">297</span></a>    <span class="c1"># Create VOCABULARY</span>
-</span><span id="export-298"><a href="#export-298"><span class="linenos">298</span></a>    <span class="n">df_test</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">(</span>
-</span><span id="export-299"><a href="#export-299"><span class="linenos">299</span></a>        <span class="p">[</span>
-</span><span id="export-300"><a href="#export-300"><span class="linenos">300</span></a>            <span class="p">{</span>
-</span><span id="export-301"><a href="#export-301"><span class="linenos">301</span></a>                <span class="s2">&quot;vocabulary_id&quot;</span><span class="p">:</span> <span class="n">omop_metadata</span><span class="p">[</span><span class="s2">&quot;vocabulary_id&quot;</span><span class="p">],</span>
-</span><span id="export-302"><a href="#export-302"><span class="linenos">302</span></a>                <span class="s2">&quot;vocabulary_name&quot;</span><span class="p">:</span> <span class="n">omop_metadata</span><span class="p">[</span><span class="s2">&quot;vocabulary_name&quot;</span><span class="p">],</span>
-</span><span id="export-303"><a href="#export-303"><span class="linenos">303</span></a>                <span class="s2">&quot;vocabulary_reference&quot;</span><span class="p">:</span> <span class="n">omop_metadata</span><span class="p">[</span><span class="s2">&quot;vocabulary_reference&quot;</span><span class="p">],</span>
-</span><span id="export-304"><a href="#export-304"><span class="linenos">304</span></a>                <span class="s2">&quot;vocabulary_version&quot;</span><span class="p">:</span> <span class="n">version</span><span class="p">,</span>
-</span><span id="export-305"><a href="#export-305"><span class="linenos">305</span></a>                <span class="c1"># &quot;vocabulary_concept_id&quot;: 0,</span>
-</span><span id="export-306"><a href="#export-306"><span class="linenos">306</span></a>            <span class="p">}</span>
-</span><span id="export-307"><a href="#export-307"><span class="linenos">307</span></a>        <span class="p">]</span>
-</span><span id="export-308"><a href="#export-308"><span class="linenos">308</span></a>    <span class="p">)</span>
-</span><span id="export-309"><a href="#export-309"><span class="linenos">309</span></a>    <span class="n">df_test</span><span class="o">.</span><span class="n">to_sql</span><span class="p">(</span><span class="s2">&quot;VOCABULARY&quot;</span><span class="p">,</span> <span class="n">conn</span><span class="p">,</span> <span class="n">if_exists</span><span class="o">=</span><span class="s2">&quot;append&quot;</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="export-297"><a href="#export-297"><span class="linenos">297</span></a><span class="sd">    Returns:</span>
+</span><span id="export-298"><a href="#export-298"><span class="linenos">298</span></a><span class="sd">        Path: path to the exported sqllite database</span>
+</span><span id="export-299"><a href="#export-299"><span class="linenos">299</span></a><span class="sd">    &quot;&quot;&quot;</span>
+</span><span id="export-300"><a href="#export-300"><span class="linenos">300</span></a>
+</span><span id="export-301"><a href="#export-301"><span class="linenos">301</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;exporting with metadata </span><span class="si">{</span><span class="n">omop_metadata</span><span class="si">}</span><span class="s2"> at version </span><span class="si">{</span><span class="n">version</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="export-302"><a href="#export-302"><span class="linenos">302</span></a>
+</span><span id="export-303"><a href="#export-303"><span class="linenos">303</span></a>    <span class="c1"># copy the baseline omop database</span>
+</span><span id="export-304"><a href="#export-304"><span class="linenos">304</span></a>    <span class="n">export_db_path</span> <span class="o">=</span> <span class="n">export_path</span> <span class="o">/</span> <span class="n">EXPORT_FILE</span>
+</span><span id="export-305"><a href="#export-305"><span class="linenos">305</span></a>    <span class="n">shutil</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="n">DB_PATH</span><span class="p">,</span> <span class="n">export_db_path</span><span class="p">)</span>
+</span><span id="export-306"><a href="#export-306"><span class="linenos">306</span></a>
+</span><span id="export-307"><a href="#export-307"><span class="linenos">307</span></a>    <span class="c1"># connect to db</span>
+</span><span id="export-308"><a href="#export-308"><span class="linenos">308</span></a>    <span class="n">conn</span> <span class="o">=</span> <span class="n">sqlite3</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="n">export_db_path</span><span class="p">)</span>
+</span><span id="export-309"><a href="#export-309"><span class="linenos">309</span></a>    <span class="n">cur</span> <span class="o">=</span> <span class="n">conn</span><span class="o">.</span><span class="n">cursor</span><span class="p">()</span>
 </span><span id="export-310"><a href="#export-310"><span class="linenos">310</span></a>
-</span><span id="export-311"><a href="#export-311"><span class="linenos">311</span></a>    <span class="c1"># Create CONCEPT_SET</span>
-</span><span id="export-312"><a href="#export-312"><span class="linenos">312</span></a>    <span class="n">cur</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span>
-</span><span id="export-313"><a href="#export-313"><span class="linenos">313</span></a><span class="w">        </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="export-314"><a href="#export-314"><span class="linenos">314</span></a><span class="sd">	CREATE TABLE CONCEPT_SET (</span>
-</span><span id="export-315"><a href="#export-315"><span class="linenos">315</span></a><span class="sd">		concept_set_id INTEGER PRIMARY KEY AUTOINCREMENT, -- Unique identifier for each concept set</span>
-</span><span id="export-316"><a href="#export-316"><span class="linenos">316</span></a><span class="sd">		atlas_id INTEGER,                                -- Unique identifier generated by ATLAS</span>
-</span><span id="export-317"><a href="#export-317"><span class="linenos">317</span></a><span class="sd">		concept_set_name TEXT,                           -- Optional name for the concept set</span>
-</span><span id="export-318"><a href="#export-318"><span class="linenos">318</span></a><span class="sd">		concept_set_description TEXT,                    -- Optional description for the concept set</span>
-</span><span id="export-319"><a href="#export-319"><span class="linenos">319</span></a><span class="sd">		vocabulary_id TEXT NOT NULL,                     -- Foreign key to VOCABULARY table</span>
-</span><span id="export-320"><a href="#export-320"><span class="linenos">320</span></a><span class="sd">		FOREIGN KEY (vocabulary_id) REFERENCES VOCABULARY(vocabulary_id)</span>
-</span><span id="export-321"><a href="#export-321"><span class="linenos">321</span></a><span class="sd">	);&quot;&quot;&quot;</span>
+</span><span id="export-311"><a href="#export-311"><span class="linenos">311</span></a>    <span class="c1"># Create VOCABULARY</span>
+</span><span id="export-312"><a href="#export-312"><span class="linenos">312</span></a>    <span class="n">df_test</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">(</span>
+</span><span id="export-313"><a href="#export-313"><span class="linenos">313</span></a>        <span class="p">[</span>
+</span><span id="export-314"><a href="#export-314"><span class="linenos">314</span></a>            <span class="p">{</span>
+</span><span id="export-315"><a href="#export-315"><span class="linenos">315</span></a>                <span class="s2">&quot;vocabulary_id&quot;</span><span class="p">:</span> <span class="n">omop_metadata</span><span class="p">[</span><span class="s2">&quot;vocabulary_id&quot;</span><span class="p">],</span>
+</span><span id="export-316"><a href="#export-316"><span class="linenos">316</span></a>                <span class="s2">&quot;vocabulary_name&quot;</span><span class="p">:</span> <span class="n">omop_metadata</span><span class="p">[</span><span class="s2">&quot;vocabulary_name&quot;</span><span class="p">],</span>
+</span><span id="export-317"><a href="#export-317"><span class="linenos">317</span></a>                <span class="s2">&quot;vocabulary_reference&quot;</span><span class="p">:</span> <span class="n">omop_metadata</span><span class="p">[</span><span class="s2">&quot;vocabulary_reference&quot;</span><span class="p">],</span>
+</span><span id="export-318"><a href="#export-318"><span class="linenos">318</span></a>                <span class="s2">&quot;vocabulary_version&quot;</span><span class="p">:</span> <span class="n">version</span><span class="p">,</span>
+</span><span id="export-319"><a href="#export-319"><span class="linenos">319</span></a>                <span class="c1"># &quot;vocabulary_concept_id&quot;: 0,</span>
+</span><span id="export-320"><a href="#export-320"><span class="linenos">320</span></a>            <span class="p">}</span>
+</span><span id="export-321"><a href="#export-321"><span class="linenos">321</span></a>        <span class="p">]</span>
 </span><span id="export-322"><a href="#export-322"><span class="linenos">322</span></a>    <span class="p">)</span>
-</span><span id="export-323"><a href="#export-323"><span class="linenos">323</span></a>
-</span><span id="export-324"><a href="#export-324"><span class="linenos">324</span></a>    <span class="c1"># Create CONCEPT_SET_ITEM</span>
-</span><span id="export-325"><a href="#export-325"><span class="linenos">325</span></a>    <span class="n">cur</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span>
-</span><span id="export-326"><a href="#export-326"><span class="linenos">326</span></a><span class="w">        </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="export-327"><a href="#export-327"><span class="linenos">327</span></a><span class="sd">	CREATE TABLE CONCEPT_SET_ITEM (</span>
-</span><span id="export-328"><a href="#export-328"><span class="linenos">328</span></a><span class="sd">		concept_set_item_id INTEGER PRIMARY KEY AUTOINCREMENT, -- Unique identifier for each mapping</span>
-</span><span id="export-329"><a href="#export-329"><span class="linenos">329</span></a><span class="sd">		concept_set_id INTEGER NOT NULL,                      -- Foreign key to CONCEPT_SET table</span>
-</span><span id="export-330"><a href="#export-330"><span class="linenos">330</span></a><span class="sd">		concept_id INTEGER NOT NULL,                          -- Foreign key to CONCEPT table</span>
-</span><span id="export-331"><a href="#export-331"><span class="linenos">331</span></a><span class="sd">		FOREIGN KEY (concept_set_id) REFERENCES CONCEPT_SET(concept_set_id),</span>
-</span><span id="export-332"><a href="#export-332"><span class="linenos">332</span></a><span class="sd">		FOREIGN KEY (concept_id) REFERENCES CONCEPT(concept_id)</span>
-</span><span id="export-333"><a href="#export-333"><span class="linenos">333</span></a><span class="sd">	);&quot;&quot;&quot;</span>
-</span><span id="export-334"><a href="#export-334"><span class="linenos">334</span></a>    <span class="p">)</span>
-</span><span id="export-335"><a href="#export-335"><span class="linenos">335</span></a>
-</span><span id="export-336"><a href="#export-336"><span class="linenos">336</span></a>    <span class="c1"># read map files</span>
-</span><span id="export-337"><a href="#export-337"><span class="linenos">337</span></a>    <span class="n">map_files</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">map_path</span><span class="o">.</span><span class="n">glob</span><span class="p">(</span><span class="s2">&quot;*.csv&quot;</span><span class="p">))</span>
-</span><span id="export-338"><a href="#export-338"><span class="linenos">338</span></a>    <span class="n">total</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">map_files</span><span class="p">)</span>
-</span><span id="export-339"><a href="#export-339"><span class="linenos">339</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Exporting </span><span class="si">{</span><span class="n">total</span><span class="si">}</span><span class="s2"> map files&quot;</span><span class="p">)</span>
-</span><span id="export-340"><a href="#export-340"><span class="linenos">340</span></a>    <span class="k">for</span> <span class="n">index</span><span class="p">,</span> <span class="n">map_file</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">map_files</span><span class="p">):</span>
-</span><span id="export-341"><a href="#export-341"><span class="linenos">341</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Processing </span><span class="si">{</span><span class="n">index</span><span class="o">+</span><span class="mi">1</span><span class="si">}</span><span class="s2"> of </span><span class="si">{</span><span class="n">total</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">map_file</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="export-342"><a href="#export-342"><span class="linenos">342</span></a>        <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_csv</span><span class="p">(</span><span class="n">map_file</span><span class="p">)</span>
-</span><span id="export-343"><a href="#export-343"><span class="linenos">343</span></a>
-</span><span id="export-344"><a href="#export-344"><span class="linenos">344</span></a>        <span class="k">for</span> <span class="n">concept_set_name</span><span class="p">,</span> <span class="n">grp</span> <span class="ow">in</span> <span class="n">df</span><span class="o">.</span><span class="n">groupby</span><span class="p">(</span><span class="s2">&quot;CONCEPT_SET&quot;</span><span class="p">):</span>
-</span><span id="export-345"><a href="#export-345"><span class="linenos">345</span></a>            <span class="c1"># create Concept_Set</span>
-</span><span id="export-346"><a href="#export-346"><span class="linenos">346</span></a>            <span class="k">if</span> <span class="ow">not</span> <span class="n">concept_set_exist</span><span class="p">(</span><span class="n">cur</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">concept_set_name</span><span class="p">)):</span>
-</span><span id="export-347"><a href="#export-347"><span class="linenos">347</span></a>                <span class="n">cur</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span>
-</span><span id="export-348"><a href="#export-348"><span class="linenos">348</span></a>                    <span class="sa">f</span><span class="s2">&quot;INSERT INTO CONCEPT_SET (concept_set_name, vocabulary_id) VALUES (&#39;</span><span class="si">{</span><span class="n">concept_set_name</span><span class="si">}</span><span class="s2">&#39;, &#39;</span><span class="si">{</span><span class="n">omop_metadata</span><span class="p">[</span><span class="s1">&#39;vocabulary_id&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">&#39;);&quot;</span>
-</span><span id="export-349"><a href="#export-349"><span class="linenos">349</span></a>                <span class="p">)</span>
-</span><span id="export-350"><a href="#export-350"><span class="linenos">350</span></a>            <span class="k">else</span><span class="p">:</span>
-</span><span id="export-351"><a href="#export-351"><span class="linenos">351</span></a>                <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Concept_set </span><span class="si">{</span><span class="n">concept_set_name</span><span class="si">}</span><span class="s2"> already exists&quot;</span><span class="p">)</span>
-</span><span id="export-352"><a href="#export-352"><span class="linenos">352</span></a>                <span class="c1"># TODO: ask to remove old concept_set?</span>
-</span><span id="export-353"><a href="#export-353"><span class="linenos">353</span></a>
-</span><span id="export-354"><a href="#export-354"><span class="linenos">354</span></a>            <span class="c1"># get Concept_set_Id</span>
-</span><span id="export-355"><a href="#export-355"><span class="linenos">355</span></a>            <span class="n">query</span> <span class="o">=</span> <span class="s2">&quot;SELECT concept_set_id FROM CONCEPT_SET WHERE concept_set_name = ? AND vocabulary_id = ?;&quot;</span>
-</span><span id="export-356"><a href="#export-356"><span class="linenos">356</span></a>            <span class="n">target_code_type</span> <span class="o">=</span> <span class="n">map_file</span><span class="o">.</span><span class="n">stem</span>
-</span><span id="export-357"><a href="#export-357"><span class="linenos">357</span></a>            <span class="n">cur</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span>
-</span><span id="export-358"><a href="#export-358"><span class="linenos">358</span></a>                <span class="n">query</span><span class="p">,</span>
-</span><span id="export-359"><a href="#export-359"><span class="linenos">359</span></a>                <span class="p">(</span>
-</span><span id="export-360"><a href="#export-360"><span class="linenos">360</span></a>                    <span class="n">concept_set_name</span><span class="p">,</span>
-</span><span id="export-361"><a href="#export-361"><span class="linenos">361</span></a>                    <span class="n">omop_metadata</span><span class="p">[</span><span class="s2">&quot;vocabulary_id&quot;</span><span class="p">],</span>
-</span><span id="export-362"><a href="#export-362"><span class="linenos">362</span></a>                <span class="p">),</span>
-</span><span id="export-363"><a href="#export-363"><span class="linenos">363</span></a>            <span class="p">)</span>
-</span><span id="export-364"><a href="#export-364"><span class="linenos">364</span></a>            <span class="c1"># FAILS HERE WITH NONE REUR</span>
-</span><span id="export-365"><a href="#export-365"><span class="linenos">365</span></a>            <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;target code type </span><span class="si">{</span><span class="n">target_code_type</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="export-366"><a href="#export-366"><span class="linenos">366</span></a>            <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;omop code type </span><span class="si">{</span><span class="n">omop_vocab_types</span><span class="p">[</span><span class="n">target_code_type</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="export-367"><a href="#export-367"><span class="linenos">367</span></a>            <span class="n">concept_set_id</span> <span class="o">=</span> <span class="n">cur</span><span class="o">.</span><span class="n">fetchone</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span>
-</span><span id="export-368"><a href="#export-368"><span class="linenos">368</span></a>            <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;concept set id </span><span class="si">{</span><span class="n">concept_set_id</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="export-369"><a href="#export-369"><span class="linenos">369</span></a>
-</span><span id="export-370"><a href="#export-370"><span class="linenos">370</span></a>            <span class="c1"># get corresponing Concept_id (OMOP) for each Concept_code (e.g. SNOMED)</span>
-</span><span id="export-371"><a href="#export-371"><span class="linenos">371</span></a>            <span class="n">concept_codes</span> <span class="o">=</span> <span class="s2">&quot;&#39;&quot;</span> <span class="o">+</span> <span class="s2">&quot;&#39;, &#39;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">grp</span><span class="p">[</span><span class="s2">&quot;CONCEPT&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">astype</span><span class="p">(</span><span class="nb">str</span><span class="p">)))</span> <span class="o">+</span> <span class="s2">&quot;&#39;&quot;</span>
-</span><span id="export-372"><a href="#export-372"><span class="linenos">372</span></a>            <span class="n">query</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;SELECT concept_id FROM CONCEPT WHERE vocabulary_id = ? AND concept_code IN (</span><span class="si">{</span><span class="n">concept_codes</span><span class="si">}</span><span class="s2">);&quot;</span>
-</span><span id="export-373"><a href="#export-373"><span class="linenos">373</span></a>            <span class="n">cur</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">query</span><span class="p">,</span> <span class="p">(</span><span class="n">omop_vocab_types</span><span class="p">[</span><span class="n">target_code_type</span><span class="p">],))</span>
-</span><span id="export-374"><a href="#export-374"><span class="linenos">374</span></a>            <span class="n">df_out</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">(</span><span class="n">cur</span><span class="o">.</span><span class="n">fetchall</span><span class="p">(),</span> <span class="n">columns</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;concept_id&quot;</span><span class="p">])</span>
-</span><span id="export-375"><a href="#export-375"><span class="linenos">375</span></a>
-</span><span id="export-376"><a href="#export-376"><span class="linenos">376</span></a>            <span class="k">if</span> <span class="ow">not</span> <span class="nb">len</span><span class="p">(</span><span class="n">grp</span><span class="p">)</span> <span class="o">==</span> <span class="nb">len</span><span class="p">(</span><span class="n">df_out</span><span class="p">):</span>
-</span><span id="export-377"><a href="#export-377"><span class="linenos">377</span></a>                <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span>
-</span><span id="export-378"><a href="#export-378"><span class="linenos">378</span></a>                    <span class="sa">f</span><span class="s2">&quot;ERROR: Some </span><span class="si">{</span><span class="n">omop_vocab_types</span><span class="p">[</span><span class="n">target_code_type</span><span class="p">]</span><span class="si">}</span><span class="s2"> Codes do not exist in OMOP Database&quot;</span>
-</span><span id="export-379"><a href="#export-379"><span class="linenos">379</span></a>                <span class="p">)</span>
-</span><span id="export-380"><a href="#export-380"><span class="linenos">380</span></a>
-</span><span id="export-381"><a href="#export-381"><span class="linenos">381</span></a>            <span class="c1"># Create Concept_set_item</span>
-</span><span id="export-382"><a href="#export-382"><span class="linenos">382</span></a>            <span class="n">df_out</span><span class="p">[</span><span class="s2">&quot;concept_set_id&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">concept_set_id</span>
-</span><span id="export-383"><a href="#export-383"><span class="linenos">383</span></a>            <span class="n">df_out</span><span class="o">.</span><span class="n">to_sql</span><span class="p">(</span><span class="s2">&quot;CONCEPT_SET_ITEM&quot;</span><span class="p">,</span> <span class="n">conn</span><span class="p">,</span> <span class="n">if_exists</span><span class="o">=</span><span class="s2">&quot;append&quot;</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="export-384"><a href="#export-384"><span class="linenos">384</span></a>
-</span><span id="export-385"><a href="#export-385"><span class="linenos">385</span></a>    <span class="c1"># Output all tables to CSV</span>
-</span><span id="export-386"><a href="#export-386"><span class="linenos">386</span></a>    <span class="c1"># Get the list of all tables</span>
-</span><span id="export-387"><a href="#export-387"><span class="linenos">387</span></a>    <span class="n">cur</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">&quot;SELECT name FROM sqlite_master WHERE type=&#39;table&#39;;&quot;</span><span class="p">)</span>
-</span><span id="export-388"><a href="#export-388"><span class="linenos">388</span></a>    <span class="n">tables</span> <span class="o">=</span> <span class="n">cur</span><span class="o">.</span><span class="n">fetchall</span><span class="p">()</span>  <span class="c1"># List of tables</span>
+</span><span id="export-323"><a href="#export-323"><span class="linenos">323</span></a>    <span class="n">df_test</span><span class="o">.</span><span class="n">to_sql</span><span class="p">(</span><span class="s2">&quot;VOCABULARY&quot;</span><span class="p">,</span> <span class="n">conn</span><span class="p">,</span> <span class="n">if_exists</span><span class="o">=</span><span class="s2">&quot;append&quot;</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="export-324"><a href="#export-324"><span class="linenos">324</span></a>
+</span><span id="export-325"><a href="#export-325"><span class="linenos">325</span></a>    <span class="c1"># Create CONCEPT_SET</span>
+</span><span id="export-326"><a href="#export-326"><span class="linenos">326</span></a>    <span class="n">cur</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span>
+</span><span id="export-327"><a href="#export-327"><span class="linenos">327</span></a><span class="w">        </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="export-328"><a href="#export-328"><span class="linenos">328</span></a><span class="sd">	CREATE TABLE CONCEPT_SET (</span>
+</span><span id="export-329"><a href="#export-329"><span class="linenos">329</span></a><span class="sd">		concept_set_id INTEGER PRIMARY KEY AUTOINCREMENT, -- Unique identifier for each concept set</span>
+</span><span id="export-330"><a href="#export-330"><span class="linenos">330</span></a><span class="sd">		atlas_id INTEGER,                                -- Unique identifier generated by ATLAS</span>
+</span><span id="export-331"><a href="#export-331"><span class="linenos">331</span></a><span class="sd">		concept_set_name TEXT,                           -- Optional name for the concept set</span>
+</span><span id="export-332"><a href="#export-332"><span class="linenos">332</span></a><span class="sd">		concept_set_description TEXT,                    -- Optional description for the concept set</span>
+</span><span id="export-333"><a href="#export-333"><span class="linenos">333</span></a><span class="sd">		vocabulary_id TEXT NOT NULL,                     -- Foreign key to VOCABULARY table</span>
+</span><span id="export-334"><a href="#export-334"><span class="linenos">334</span></a><span class="sd">		FOREIGN KEY (vocabulary_id) REFERENCES VOCABULARY(vocabulary_id)</span>
+</span><span id="export-335"><a href="#export-335"><span class="linenos">335</span></a><span class="sd">	);&quot;&quot;&quot;</span>
+</span><span id="export-336"><a href="#export-336"><span class="linenos">336</span></a>    <span class="p">)</span>
+</span><span id="export-337"><a href="#export-337"><span class="linenos">337</span></a>
+</span><span id="export-338"><a href="#export-338"><span class="linenos">338</span></a>    <span class="c1"># Create CONCEPT_SET_ITEM</span>
+</span><span id="export-339"><a href="#export-339"><span class="linenos">339</span></a>    <span class="n">cur</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span>
+</span><span id="export-340"><a href="#export-340"><span class="linenos">340</span></a><span class="w">        </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="export-341"><a href="#export-341"><span class="linenos">341</span></a><span class="sd">	CREATE TABLE CONCEPT_SET_ITEM (</span>
+</span><span id="export-342"><a href="#export-342"><span class="linenos">342</span></a><span class="sd">		concept_set_item_id INTEGER PRIMARY KEY AUTOINCREMENT, -- Unique identifier for each mapping</span>
+</span><span id="export-343"><a href="#export-343"><span class="linenos">343</span></a><span class="sd">		concept_set_id INTEGER NOT NULL,                      -- Foreign key to CONCEPT_SET table</span>
+</span><span id="export-344"><a href="#export-344"><span class="linenos">344</span></a><span class="sd">		concept_id INTEGER NOT NULL,                          -- Foreign key to CONCEPT table</span>
+</span><span id="export-345"><a href="#export-345"><span class="linenos">345</span></a><span class="sd">		FOREIGN KEY (concept_set_id) REFERENCES CONCEPT_SET(concept_set_id),</span>
+</span><span id="export-346"><a href="#export-346"><span class="linenos">346</span></a><span class="sd">		FOREIGN KEY (concept_id) REFERENCES CONCEPT(concept_id)</span>
+</span><span id="export-347"><a href="#export-347"><span class="linenos">347</span></a><span class="sd">	);&quot;&quot;&quot;</span>
+</span><span id="export-348"><a href="#export-348"><span class="linenos">348</span></a>    <span class="p">)</span>
+</span><span id="export-349"><a href="#export-349"><span class="linenos">349</span></a>
+</span><span id="export-350"><a href="#export-350"><span class="linenos">350</span></a>    <span class="c1"># read map files</span>
+</span><span id="export-351"><a href="#export-351"><span class="linenos">351</span></a>    <span class="n">map_files</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">map_path</span><span class="o">.</span><span class="n">glob</span><span class="p">(</span><span class="s2">&quot;*.csv&quot;</span><span class="p">))</span>
+</span><span id="export-352"><a href="#export-352"><span class="linenos">352</span></a>    <span class="n">total</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">map_files</span><span class="p">)</span>
+</span><span id="export-353"><a href="#export-353"><span class="linenos">353</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Exporting </span><span class="si">{</span><span class="n">total</span><span class="si">}</span><span class="s2"> map files&quot;</span><span class="p">)</span>
+</span><span id="export-354"><a href="#export-354"><span class="linenos">354</span></a>    <span class="k">for</span> <span class="n">index</span><span class="p">,</span> <span class="n">map_file</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">map_files</span><span class="p">):</span>
+</span><span id="export-355"><a href="#export-355"><span class="linenos">355</span></a>        <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Processing </span><span class="si">{</span><span class="n">index</span><span class="o">+</span><span class="mi">1</span><span class="si">}</span><span class="s2"> of </span><span class="si">{</span><span class="n">total</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">map_file</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="export-356"><a href="#export-356"><span class="linenos">356</span></a>        <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_csv</span><span class="p">(</span><span class="n">map_file</span><span class="p">)</span>
+</span><span id="export-357"><a href="#export-357"><span class="linenos">357</span></a>
+</span><span id="export-358"><a href="#export-358"><span class="linenos">358</span></a>        <span class="k">for</span> <span class="n">concept_set_name</span><span class="p">,</span> <span class="n">grp</span> <span class="ow">in</span> <span class="n">df</span><span class="o">.</span><span class="n">groupby</span><span class="p">(</span><span class="s2">&quot;CONCEPT_SET&quot;</span><span class="p">):</span>
+</span><span id="export-359"><a href="#export-359"><span class="linenos">359</span></a>            <span class="c1"># create Concept_Set</span>
+</span><span id="export-360"><a href="#export-360"><span class="linenos">360</span></a>            <span class="k">if</span> <span class="ow">not</span> <span class="n">concept_set_exist</span><span class="p">(</span><span class="n">cur</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">concept_set_name</span><span class="p">)):</span>
+</span><span id="export-361"><a href="#export-361"><span class="linenos">361</span></a>                <span class="n">cur</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span>
+</span><span id="export-362"><a href="#export-362"><span class="linenos">362</span></a>                    <span class="sa">f</span><span class="s2">&quot;INSERT INTO CONCEPT_SET (concept_set_name, vocabulary_id) VALUES (&#39;</span><span class="si">{</span><span class="n">concept_set_name</span><span class="si">}</span><span class="s2">&#39;, &#39;</span><span class="si">{</span><span class="n">omop_metadata</span><span class="p">[</span><span class="s1">&#39;vocabulary_id&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">&#39;);&quot;</span>
+</span><span id="export-363"><a href="#export-363"><span class="linenos">363</span></a>                <span class="p">)</span>
+</span><span id="export-364"><a href="#export-364"><span class="linenos">364</span></a>            <span class="k">else</span><span class="p">:</span>
+</span><span id="export-365"><a href="#export-365"><span class="linenos">365</span></a>                <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Concept_set </span><span class="si">{</span><span class="n">concept_set_name</span><span class="si">}</span><span class="s2"> already exists&quot;</span><span class="p">)</span>
+</span><span id="export-366"><a href="#export-366"><span class="linenos">366</span></a>                <span class="c1"># TODO: ask to remove old concept_set?</span>
+</span><span id="export-367"><a href="#export-367"><span class="linenos">367</span></a>
+</span><span id="export-368"><a href="#export-368"><span class="linenos">368</span></a>            <span class="c1"># get Concept_set_Id</span>
+</span><span id="export-369"><a href="#export-369"><span class="linenos">369</span></a>            <span class="n">query</span> <span class="o">=</span> <span class="s2">&quot;SELECT concept_set_id FROM CONCEPT_SET WHERE concept_set_name = ? AND vocabulary_id = ?;&quot;</span>
+</span><span id="export-370"><a href="#export-370"><span class="linenos">370</span></a>            <span class="n">target_code_type</span> <span class="o">=</span> <span class="n">map_file</span><span class="o">.</span><span class="n">stem</span>
+</span><span id="export-371"><a href="#export-371"><span class="linenos">371</span></a>            <span class="n">cur</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span>
+</span><span id="export-372"><a href="#export-372"><span class="linenos">372</span></a>                <span class="n">query</span><span class="p">,</span>
+</span><span id="export-373"><a href="#export-373"><span class="linenos">373</span></a>                <span class="p">(</span>
+</span><span id="export-374"><a href="#export-374"><span class="linenos">374</span></a>                    <span class="n">concept_set_name</span><span class="p">,</span>
+</span><span id="export-375"><a href="#export-375"><span class="linenos">375</span></a>                    <span class="n">omop_metadata</span><span class="p">[</span><span class="s2">&quot;vocabulary_id&quot;</span><span class="p">],</span>
+</span><span id="export-376"><a href="#export-376"><span class="linenos">376</span></a>                <span class="p">),</span>
+</span><span id="export-377"><a href="#export-377"><span class="linenos">377</span></a>            <span class="p">)</span>
+</span><span id="export-378"><a href="#export-378"><span class="linenos">378</span></a>            <span class="c1"># FAILS HERE WITH NONE REUR</span>
+</span><span id="export-379"><a href="#export-379"><span class="linenos">379</span></a>            <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;target code type </span><span class="si">{</span><span class="n">target_code_type</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="export-380"><a href="#export-380"><span class="linenos">380</span></a>            <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;omop code type </span><span class="si">{</span><span class="n">omop_vocab_types</span><span class="p">[</span><span class="n">target_code_type</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="export-381"><a href="#export-381"><span class="linenos">381</span></a>            <span class="n">concept_set_id</span> <span class="o">=</span> <span class="n">cur</span><span class="o">.</span><span class="n">fetchone</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span>
+</span><span id="export-382"><a href="#export-382"><span class="linenos">382</span></a>            <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;concept set id </span><span class="si">{</span><span class="n">concept_set_id</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="export-383"><a href="#export-383"><span class="linenos">383</span></a>
+</span><span id="export-384"><a href="#export-384"><span class="linenos">384</span></a>            <span class="c1"># get corresponing Concept_id (OMOP) for each Concept_code (e.g. SNOMED)</span>
+</span><span id="export-385"><a href="#export-385"><span class="linenos">385</span></a>            <span class="n">concept_codes</span> <span class="o">=</span> <span class="s2">&quot;&#39;&quot;</span> <span class="o">+</span> <span class="s2">&quot;&#39;, &#39;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">grp</span><span class="p">[</span><span class="s2">&quot;CONCEPT&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">astype</span><span class="p">(</span><span class="nb">str</span><span class="p">)))</span> <span class="o">+</span> <span class="s2">&quot;&#39;&quot;</span>
+</span><span id="export-386"><a href="#export-386"><span class="linenos">386</span></a>            <span class="n">query</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;SELECT concept_id FROM CONCEPT WHERE vocabulary_id = ? AND concept_code IN (</span><span class="si">{</span><span class="n">concept_codes</span><span class="si">}</span><span class="s2">);&quot;</span>
+</span><span id="export-387"><a href="#export-387"><span class="linenos">387</span></a>            <span class="n">cur</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">query</span><span class="p">,</span> <span class="p">(</span><span class="n">omop_vocab_types</span><span class="p">[</span><span class="n">target_code_type</span><span class="p">],))</span>
+</span><span id="export-388"><a href="#export-388"><span class="linenos">388</span></a>            <span class="n">df_out</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">(</span><span class="n">cur</span><span class="o">.</span><span class="n">fetchall</span><span class="p">(),</span> <span class="n">columns</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;concept_id&quot;</span><span class="p">])</span>
 </span><span id="export-389"><a href="#export-389"><span class="linenos">389</span></a>
-</span><span id="export-390"><a href="#export-390"><span class="linenos">390</span></a>    <span class="c1"># Export each table to a separate CSV file</span>
-</span><span id="export-391"><a href="#export-391"><span class="linenos">391</span></a>    <span class="k">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="n">tables</span><span class="p">:</span>
-</span><span id="export-392"><a href="#export-392"><span class="linenos">392</span></a>        <span class="n">table_name</span> <span class="o">=</span> <span class="n">table</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
-</span><span id="export-393"><a href="#export-393"><span class="linenos">393</span></a>        <span class="c1"># ignore SQLite&#39;s internal system table</span>
-</span><span id="export-394"><a href="#export-394"><span class="linenos">394</span></a>        <span class="k">if</span> <span class="n">table_name</span> <span class="o">!=</span> <span class="s2">&quot;sqlite_sequence&quot;</span><span class="p">:</span>
-</span><span id="export-395"><a href="#export-395"><span class="linenos">395</span></a>            <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_sql_query</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;SELECT * FROM </span><span class="si">{</span><span class="n">table_name</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">conn</span><span class="p">)</span>
-</span><span id="export-396"><a href="#export-396"><span class="linenos">396</span></a>            <span class="n">output_file</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">table_name</span><span class="si">}</span><span class="s2">.csv&quot;</span>
-</span><span id="export-397"><a href="#export-397"><span class="linenos">397</span></a>            <span class="n">output_path</span> <span class="o">=</span> <span class="n">export_path</span> <span class="o">/</span> <span class="n">output_file</span>
-</span><span id="export-398"><a href="#export-398"><span class="linenos">398</span></a>            <span class="n">df</span><span class="o">.</span><span class="n">to_csv</span><span class="p">(</span><span class="n">output_path</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>  <span class="c1"># Save as CSV</span>
-</span><span id="export-399"><a href="#export-399"><span class="linenos">399</span></a>            <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Exported </span><span class="si">{</span><span class="n">table_name</span><span class="si">}</span><span class="s2"> to </span><span class="si">{</span><span class="n">table_name</span><span class="si">}</span><span class="s2">.csv&quot;</span><span class="p">)</span>
-</span><span id="export-400"><a href="#export-400"><span class="linenos">400</span></a>
-</span><span id="export-401"><a href="#export-401"><span class="linenos">401</span></a>    <span class="n">conn</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
-</span><span id="export-402"><a href="#export-402"><span class="linenos">402</span></a>
-</span><span id="export-403"><a href="#export-403"><span class="linenos">403</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Created export db successfully&quot;</span><span class="p">)</span>
-</span><span id="export-404"><a href="#export-404"><span class="linenos">404</span></a>
-</span><span id="export-405"><a href="#export-405"><span class="linenos">405</span></a>    <span class="k">return</span> <span class="n">export_db_path</span>
+</span><span id="export-390"><a href="#export-390"><span class="linenos">390</span></a>            <span class="k">if</span> <span class="ow">not</span> <span class="nb">len</span><span class="p">(</span><span class="n">grp</span><span class="p">)</span> <span class="o">==</span> <span class="nb">len</span><span class="p">(</span><span class="n">df_out</span><span class="p">):</span>
+</span><span id="export-391"><a href="#export-391"><span class="linenos">391</span></a>                <span class="n">_logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span>
+</span><span id="export-392"><a href="#export-392"><span class="linenos">392</span></a>                    <span class="sa">f</span><span class="s2">&quot;ERROR: Some </span><span class="si">{</span><span class="n">omop_vocab_types</span><span class="p">[</span><span class="n">target_code_type</span><span class="p">]</span><span class="si">}</span><span class="s2"> Codes do not exist in OMOP Database&quot;</span>
+</span><span id="export-393"><a href="#export-393"><span class="linenos">393</span></a>                <span class="p">)</span>
+</span><span id="export-394"><a href="#export-394"><span class="linenos">394</span></a>
+</span><span id="export-395"><a href="#export-395"><span class="linenos">395</span></a>            <span class="c1"># Create Concept_set_item</span>
+</span><span id="export-396"><a href="#export-396"><span class="linenos">396</span></a>            <span class="n">df_out</span><span class="p">[</span><span class="s2">&quot;concept_set_id&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">concept_set_id</span>
+</span><span id="export-397"><a href="#export-397"><span class="linenos">397</span></a>            <span class="n">df_out</span><span class="o">.</span><span class="n">to_sql</span><span class="p">(</span><span class="s2">&quot;CONCEPT_SET_ITEM&quot;</span><span class="p">,</span> <span class="n">conn</span><span class="p">,</span> <span class="n">if_exists</span><span class="o">=</span><span class="s2">&quot;append&quot;</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="export-398"><a href="#export-398"><span class="linenos">398</span></a>
+</span><span id="export-399"><a href="#export-399"><span class="linenos">399</span></a>    <span class="c1"># Output all tables to CSV</span>
+</span><span id="export-400"><a href="#export-400"><span class="linenos">400</span></a>    <span class="c1"># Get the list of all tables</span>
+</span><span id="export-401"><a href="#export-401"><span class="linenos">401</span></a>    <span class="n">cur</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">&quot;SELECT name FROM sqlite_master WHERE type=&#39;table&#39;;&quot;</span><span class="p">)</span>
+</span><span id="export-402"><a href="#export-402"><span class="linenos">402</span></a>    <span class="n">tables</span> <span class="o">=</span> <span class="n">cur</span><span class="o">.</span><span class="n">fetchall</span><span class="p">()</span>  <span class="c1"># List of tables</span>
+</span><span id="export-403"><a href="#export-403"><span class="linenos">403</span></a>
+</span><span id="export-404"><a href="#export-404"><span class="linenos">404</span></a>    <span class="c1"># Export each table to a separate CSV file</span>
+</span><span id="export-405"><a href="#export-405"><span class="linenos">405</span></a>    <span class="k">for</span> <span class="n">table</span> <span class="ow">in</span> <span class="n">tables</span><span class="p">:</span>
+</span><span id="export-406"><a href="#export-406"><span class="linenos">406</span></a>        <span class="n">table_name</span> <span class="o">=</span> <span class="n">table</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
+</span><span id="export-407"><a href="#export-407"><span class="linenos">407</span></a>        <span class="c1"># ignore SQLite&#39;s internal system table</span>
+</span><span id="export-408"><a href="#export-408"><span class="linenos">408</span></a>        <span class="k">if</span> <span class="n">table_name</span> <span class="o">!=</span> <span class="s2">&quot;sqlite_sequence&quot;</span><span class="p">:</span>
+</span><span id="export-409"><a href="#export-409"><span class="linenos">409</span></a>            <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_sql_query</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;SELECT * FROM </span><span class="si">{</span><span class="n">table_name</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">conn</span><span class="p">)</span>
+</span><span id="export-410"><a href="#export-410"><span class="linenos">410</span></a>            <span class="n">output_file</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">table_name</span><span class="si">}</span><span class="s2">.csv&quot;</span>
+</span><span id="export-411"><a href="#export-411"><span class="linenos">411</span></a>            <span class="n">output_path</span> <span class="o">=</span> <span class="n">export_path</span> <span class="o">/</span> <span class="n">output_file</span>
+</span><span id="export-412"><a href="#export-412"><span class="linenos">412</span></a>            <span class="n">df</span><span class="o">.</span><span class="n">to_csv</span><span class="p">(</span><span class="n">output_path</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>  <span class="c1"># Save as CSV</span>
+</span><span id="export-413"><a href="#export-413"><span class="linenos">413</span></a>            <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Exported </span><span class="si">{</span><span class="n">table_name</span><span class="si">}</span><span class="s2"> to </span><span class="si">{</span><span class="n">table_name</span><span class="si">}</span><span class="s2">.csv&quot;</span><span class="p">)</span>
+</span><span id="export-414"><a href="#export-414"><span class="linenos">414</span></a>
+</span><span id="export-415"><a href="#export-415"><span class="linenos">415</span></a>    <span class="n">conn</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+</span><span id="export-416"><a href="#export-416"><span class="linenos">416</span></a>
+</span><span id="export-417"><a href="#export-417"><span class="linenos">417</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Created export db successfully&quot;</span><span class="p">)</span>
+</span><span id="export-418"><a href="#export-418"><span class="linenos">418</span></a>
+</span><span id="export-419"><a href="#export-419"><span class="linenos">419</span></a>    <span class="k">return</span> <span class="n">export_db_path</span>
 </span></pre></div>
 
 
@@ -1209,7 +1222,7 @@
 <li><strong>map_path (Path):</strong>  path to the acmc map directory containing concept sets in csv format</li>
 <li><strong>export_path (Path):</strong>  path to the directory where the omop database csv files are to be written</li>
 <li><strong>version (str):</strong>  phenotype version for omop vocabulary version</li>
-<li><strong>omop_metadata (dict):</strong>  phenotype omop metadata for omop vocabulary metadata </li>
+<li><strong>omop_metadata (dict):</strong>  phenotype omop metadata for omop vocabulary metadata</li>
 </ul>
 
 <h6 id="returns">Returns:</h6>
diff --git a/docs/api/acmc/parse.html b/docs/api/acmc/parse.html
index 2685fe10e64d3c0a71d1a00dba05cf3a90f38068..6369d00f42419700acc77531bc7ca50af48c48bd 100644
--- a/docs/api/acmc/parse.html
+++ b/docs/api/acmc/parse.html
@@ -30,9 +30,6 @@
 
             <h2>API Documentation</h2>
                 <ul class="memberlist">
-            <li>
-                    <a class="variable" href="#logger">logger</a>
-            </li>
             <li>
                     <a class="variable" href="#SUPPORTED_CODE_TYPES">SUPPORTED_CODE_TYPES</a>
             </li>
@@ -184,594 +181,594 @@
                     <h1 class="modulename">
 <a href="./../acmc.html">acmc</a><wbr>.parse    </h1>
 
-                
+                        <div class="docstring"><p>parse.py module</p>
+
+<p>This module provides functionality to set up medical code translation classes</p>
+</div>
+
                         <input id="mod-parse-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
 
                         <label class="view-source-button" for="mod-parse-view-source"><span>View Source</span></label>
 
-                        <div class="pdoc-code codehilite"><pre><span></span><span id="L-1"><a href="#L-1"><span class="linenos">  1</span></a><span class="kn">import</span><span class="w"> </span><span class="nn">pandas</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">pd</span>
-</span><span id="L-2"><a href="#L-2"><span class="linenos">  2</span></a><span class="kn">import</span><span class="w"> </span><span class="nn">numpy</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">np</span>
-</span><span id="L-3"><a href="#L-3"><span class="linenos">  3</span></a><span class="kn">import</span><span class="w"> </span><span class="nn">os</span>
-</span><span id="L-4"><a href="#L-4"><span class="linenos">  4</span></a><span class="kn">from</span><span class="w"> </span><span class="nn">typing</span><span class="w"> </span><span class="kn">import</span> <span class="n">Callable</span><span class="p">,</span> <span class="n">Optional</span><span class="p">,</span> <span class="n">Tuple</span>
-</span><span id="L-5"><a href="#L-5"><span class="linenos">  5</span></a><span class="kn">from</span><span class="w"> </span><span class="nn">pathlib</span><span class="w"> </span><span class="kn">import</span> <span class="n">Path</span>
-</span><span id="L-6"><a href="#L-6"><span class="linenos">  6</span></a>
-</span><span id="L-7"><a href="#L-7"><span class="linenos">  7</span></a><span class="kn">from</span><span class="w"> </span><span class="nn">acmc</span><span class="w"> </span><span class="kn">import</span> <span class="n">trud</span><span class="p">,</span> <span class="n">logging_config</span> <span class="k">as</span> <span class="n">lc</span>
-</span><span id="L-8"><a href="#L-8"><span class="linenos">  8</span></a>
-</span><span id="L-9"><a href="#L-9"><span class="linenos">  9</span></a><span class="c1"># setup logging</span>
-</span><span id="L-10"><a href="#L-10"><span class="linenos"> 10</span></a><span class="n">logger</span> <span class="o">=</span> <span class="n">lc</span><span class="o">.</span><span class="n">setup_logger</span><span class="p">()</span>
-</span><span id="L-11"><a href="#L-11"><span class="linenos"> 11</span></a>
-</span><span id="L-12"><a href="#L-12"><span class="linenos"> 12</span></a><span class="c1"># Define allowed values</span>
-</span><span id="L-13"><a href="#L-13"><span class="linenos"> 13</span></a><span class="n">SUPPORTED_CODE_TYPES</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;read2&quot;</span><span class="p">,</span> <span class="s2">&quot;read3&quot;</span><span class="p">,</span> <span class="s2">&quot;icd10&quot;</span><span class="p">,</span> <span class="s2">&quot;snomed&quot;</span><span class="p">,</span> <span class="s2">&quot;opcs4&quot;</span><span class="p">,</span> <span class="s2">&quot;atc&quot;</span><span class="p">}</span>
+                        <div class="pdoc-code codehilite"><pre><span></span><span id="L-1"><a href="#L-1"><span class="linenos">  1</span></a><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-2"><a href="#L-2"><span class="linenos">  2</span></a><span class="sd">parse.py module</span>
+</span><span id="L-3"><a href="#L-3"><span class="linenos">  3</span></a>
+</span><span id="L-4"><a href="#L-4"><span class="linenos">  4</span></a><span class="sd">This module provides functionality to set up medical code translation classes</span>
+</span><span id="L-5"><a href="#L-5"><span class="linenos">  5</span></a>
+</span><span id="L-6"><a href="#L-6"><span class="linenos">  6</span></a><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-7"><a href="#L-7"><span class="linenos">  7</span></a>
+</span><span id="L-8"><a href="#L-8"><span class="linenos">  8</span></a><span class="kn">import</span><span class="w"> </span><span class="nn">pandas</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">pd</span>
+</span><span id="L-9"><a href="#L-9"><span class="linenos">  9</span></a><span class="kn">import</span><span class="w"> </span><span class="nn">numpy</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">np</span>
+</span><span id="L-10"><a href="#L-10"><span class="linenos"> 10</span></a><span class="kn">import</span><span class="w"> </span><span class="nn">os</span>
+</span><span id="L-11"><a href="#L-11"><span class="linenos"> 11</span></a><span class="kn">from</span><span class="w"> </span><span class="nn">typing</span><span class="w"> </span><span class="kn">import</span> <span class="n">Callable</span><span class="p">,</span> <span class="n">Optional</span><span class="p">,</span> <span class="n">Tuple</span>
+</span><span id="L-12"><a href="#L-12"><span class="linenos"> 12</span></a><span class="kn">from</span><span class="w"> </span><span class="nn">pathlib</span><span class="w"> </span><span class="kn">import</span> <span class="n">Path</span>
+</span><span id="L-13"><a href="#L-13"><span class="linenos"> 13</span></a><span class="kn">from</span><span class="w"> </span><span class="nn">acmc</span><span class="w"> </span><span class="kn">import</span> <span class="n">trud</span><span class="p">,</span> <span class="n">logging_config</span> <span class="k">as</span> <span class="n">lc</span>
 </span><span id="L-14"><a href="#L-14"><span class="linenos"> 14</span></a>
-</span><span id="L-15"><a href="#L-15"><span class="linenos"> 15</span></a>
-</span><span id="L-16"><a href="#L-16"><span class="linenos"> 16</span></a><span class="k">class</span><span class="w"> </span><span class="nc">CodesError</span><span class="p">:</span>
-</span><span id="L-17"><a href="#L-17"><span class="linenos"> 17</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;A class used in InvalidCodesException to report an error if a code parser check fails&quot;&quot;&quot;</span>
-</span><span id="L-18"><a href="#L-18"><span class="linenos"> 18</span></a>
-</span><span id="L-19"><a href="#L-19"><span class="linenos"> 19</span></a>    <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">,</span> <span class="n">codes</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">codes_file</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">mask</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">code_type</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
-</span><span id="L-20"><a href="#L-20"><span class="linenos"> 20</span></a>        <span class="c1"># initialise class variables with provided parameters</span>
-</span><span id="L-21"><a href="#L-21"><span class="linenos"> 21</span></a>        <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="nb">locals</span><span class="p">()</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
-</span><span id="L-22"><a href="#L-22"><span class="linenos"> 22</span></a>            <span class="k">if</span> <span class="n">key</span> <span class="o">!=</span> <span class="s2">&quot;self&quot;</span><span class="p">:</span>
-</span><span id="L-23"><a href="#L-23"><span class="linenos"> 23</span></a>                <span class="nb">setattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
+</span><span id="L-15"><a href="#L-15"><span class="linenos"> 15</span></a><span class="c1"># setup logging</span>
+</span><span id="L-16"><a href="#L-16"><span class="linenos"> 16</span></a><span class="n">_logger</span> <span class="o">=</span> <span class="n">lc</span><span class="o">.</span><span class="n">setup_logger</span><span class="p">()</span>
+</span><span id="L-17"><a href="#L-17"><span class="linenos"> 17</span></a>
+</span><span id="L-18"><a href="#L-18"><span class="linenos"> 18</span></a><span class="n">SUPPORTED_CODE_TYPES</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;read2&quot;</span><span class="p">,</span> <span class="s2">&quot;read3&quot;</span><span class="p">,</span> <span class="s2">&quot;icd10&quot;</span><span class="p">,</span> <span class="s2">&quot;snomed&quot;</span><span class="p">,</span> <span class="s2">&quot;opcs4&quot;</span><span class="p">,</span> <span class="s2">&quot;atc&quot;</span><span class="p">}</span>
+</span><span id="L-19"><a href="#L-19"><span class="linenos"> 19</span></a><span class="sd">&quot;&quot;&quot;List of support medical coding types&quot;&quot;&quot;</span>
+</span><span id="L-20"><a href="#L-20"><span class="linenos"> 20</span></a>
+</span><span id="L-21"><a href="#L-21"><span class="linenos"> 21</span></a>
+</span><span id="L-22"><a href="#L-22"><span class="linenos"> 22</span></a><span class="k">class</span><span class="w"> </span><span class="nc">CodesError</span><span class="p">:</span>
+</span><span id="L-23"><a href="#L-23"><span class="linenos"> 23</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;A class used in InvalidCodesException to report an error if a code parser check fails&quot;&quot;&quot;</span>
 </span><span id="L-24"><a href="#L-24"><span class="linenos"> 24</span></a>
-</span><span id="L-25"><a href="#L-25"><span class="linenos"> 25</span></a>
-</span><span id="L-26"><a href="#L-26"><span class="linenos"> 26</span></a><span class="k">class</span><span class="w"> </span><span class="nc">InvalidCodesException</span><span class="p">(</span><span class="ne">Exception</span><span class="p">):</span>
-</span><span id="L-27"><a href="#L-27"><span class="linenos"> 27</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Custom exception class raised when invalid codes are found that cannot be resolved by processing&quot;&quot;&quot;</span>
-</span><span id="L-28"><a href="#L-28"><span class="linenos"> 28</span></a>
-</span><span id="L-29"><a href="#L-29"><span class="linenos"> 29</span></a>    <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">error</span><span class="p">):</span>
-</span><span id="L-30"><a href="#L-30"><span class="linenos"> 30</span></a>        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">error</span><span class="o">.</span><span class="n">message</span><span class="p">)</span>
-</span><span id="L-31"><a href="#L-31"><span class="linenos"> 31</span></a>        <span class="bp">self</span><span class="o">.</span><span class="n">error</span> <span class="o">=</span> <span class="n">error</span>
-</span><span id="L-32"><a href="#L-32"><span class="linenos"> 32</span></a>
-</span><span id="L-33"><a href="#L-33"><span class="linenos"> 33</span></a>
-</span><span id="L-34"><a href="#L-34"><span class="linenos"> 34</span></a><span class="k">class</span><span class="w"> </span><span class="nc">Proto</span><span class="p">:</span>
-</span><span id="L-35"><a href="#L-35"><span class="linenos"> 35</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-36"><a href="#L-36"><span class="linenos"> 36</span></a><span class="sd">    Define checks as list of 3 tuple: (Message, Condition, Process)</span>
-</span><span id="L-37"><a href="#L-37"><span class="linenos"> 37</span></a><span class="sd">    - Message = The name of the condition (what is printed and logged)</span>
-</span><span id="L-38"><a href="#L-38"><span class="linenos"> 38</span></a><span class="sd">    - Condition = True if Passed, and False if Failed</span>
-</span><span id="L-39"><a href="#L-39"><span class="linenos"> 39</span></a><span class="sd">    - Process = Aims to resolve all issues that stop condition from passing (Do not change index!)</span>
-</span><span id="L-40"><a href="#L-40"><span class="linenos"> 40</span></a><span class="sd">    &quot;&quot;&quot;</span>
-</span><span id="L-41"><a href="#L-41"><span class="linenos"> 41</span></a>
-</span><span id="L-42"><a href="#L-42"><span class="linenos"> 42</span></a>    <span class="n">checks</span><span class="p">:</span> <span class="nb">list</span><span class="p">[</span>
-</span><span id="L-43"><a href="#L-43"><span class="linenos"> 43</span></a>        <span class="nb">tuple</span><span class="p">[</span>
-</span><span id="L-44"><a href="#L-44"><span class="linenos"> 44</span></a>            <span class="nb">str</span><span class="p">,</span>  <span class="c1"># The description, e.g., &quot;Not Empty&quot;</span>
-</span><span id="L-45"><a href="#L-45"><span class="linenos"> 45</span></a>            <span class="n">Callable</span><span class="p">[</span>
-</span><span id="L-46"><a href="#L-46"><span class="linenos"> 46</span></a>                <span class="p">[</span><span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">],</span>
-</span><span id="L-47"><a href="#L-47"><span class="linenos"> 47</span></a>                <span class="n">pd</span><span class="o">.</span><span class="n">Series</span><span class="p">,</span>
-</span><span id="L-48"><a href="#L-48"><span class="linenos"> 48</span></a>            <span class="p">],</span>  <span class="c1"># The first lambda function: takes a list and returns a pd.Series of booleans</span>
-</span><span id="L-49"><a href="#L-49"><span class="linenos"> 49</span></a>            <span class="n">Callable</span><span class="p">[</span>
-</span><span id="L-50"><a href="#L-50"><span class="linenos"> 50</span></a>                <span class="p">[</span><span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">,</span> <span class="n">Path</span><span class="p">],</span>
-</span><span id="L-51"><a href="#L-51"><span class="linenos"> 51</span></a>                <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">,</span>
-</span><span id="L-52"><a href="#L-52"><span class="linenos"> 52</span></a>            <span class="p">],</span>  <span class="c1"># The second lambda function: takes a list and a string, and returns nothing</span>
-</span><span id="L-53"><a href="#L-53"><span class="linenos"> 53</span></a>        <span class="p">]</span>
-</span><span id="L-54"><a href="#L-54"><span class="linenos"> 54</span></a>    <span class="p">]</span>
-</span><span id="L-55"><a href="#L-55"><span class="linenos"> 55</span></a>
-</span><span id="L-56"><a href="#L-56"><span class="linenos"> 56</span></a>    <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">trud_codes_path</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Path</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">):</span>
-</span><span id="L-57"><a href="#L-57"><span class="linenos"> 57</span></a>        <span class="k">if</span> <span class="n">trud_codes_path</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</span></a>            <span class="k">if</span> <span class="n">trud_codes_path</span><span class="o">.</span><span class="n">is_file</span><span class="p">():</span>
-</span><span id="L-59"><a href="#L-59"><span class="linenos"> 59</span></a>                <span class="bp">self</span><span class="o">.</span><span class="n">trud_codes_path</span><span class="p">:</span> <span class="n">Path</span> <span class="o">=</span> <span class="n">trud_codes_path</span>
-</span><span id="L-60"><a href="#L-60"><span class="linenos"> 60</span></a>                <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_parquet</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">trud_codes_path</span><span class="p">)</span>
-</span><span id="L-61"><a href="#L-61"><span class="linenos"> 61</span></a>            <span class="k">else</span><span class="p">:</span>
-</span><span id="L-62"><a href="#L-62"><span class="linenos"> 62</span></a>                <span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span>
-</span><span id="L-63"><a href="#L-63"><span class="linenos"> 63</span></a>                    <span class="sa">f</span><span class="s2">&quot;Error: Read2 code file &#39;</span><span class="si">{</span><span class="n">trud_codes_path</span><span class="si">}</span><span class="s2">&#39; does not exist. Please ensure you have installed TRUD correctly&quot;</span>
-</span><span id="L-64"><a href="#L-64"><span class="linenos"> 64</span></a>                <span class="p">)</span>
-</span><span id="L-65"><a href="#L-65"><span class="linenos"> 65</span></a>
-</span><span id="L-66"><a href="#L-66"><span class="linenos"> 66</span></a>        <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="n">name</span>
-</span><span id="L-67"><a href="#L-67"><span class="linenos"> 67</span></a>
-</span><span id="L-68"><a href="#L-68"><span class="linenos"> 68</span></a>    <span class="k">def</span><span class="w"> </span><span class="nf">raise_exception</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ex</span><span class="p">:</span> <span class="ne">Exception</span><span class="p">):</span>
-</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a><span class="w">        </span><span class="sd">&quot;&quot;&quot;Raises an exception inside a lambda function. Python does not allow using raise statement inside lambda because lambda can only contain expressions, not statements. Using raise_exception not raise_ as it&#39;s more explict&quot;&quot;&quot;</span>
-</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a>        <span class="k">raise</span> <span class="n">ex</span>
+</span><span id="L-25"><a href="#L-25"><span class="linenos"> 25</span></a>    <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">,</span> <span class="n">codes</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">codes_file</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">mask</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">code_type</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
+</span><span id="L-26"><a href="#L-26"><span class="linenos"> 26</span></a>        <span class="c1"># initialise class variables with provided parameters</span>
+</span><span id="L-27"><a href="#L-27"><span class="linenos"> 27</span></a>        <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="nb">locals</span><span class="p">()</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
+</span><span id="L-28"><a href="#L-28"><span class="linenos"> 28</span></a>            <span class="k">if</span> <span class="n">key</span> <span class="o">!=</span> <span class="s2">&quot;self&quot;</span><span class="p">:</span>
+</span><span id="L-29"><a href="#L-29"><span class="linenos"> 29</span></a>                <span class="nb">setattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
+</span><span id="L-30"><a href="#L-30"><span class="linenos"> 30</span></a>
+</span><span id="L-31"><a href="#L-31"><span class="linenos"> 31</span></a>
+</span><span id="L-32"><a href="#L-32"><span class="linenos"> 32</span></a><span class="k">class</span><span class="w"> </span><span class="nc">InvalidCodesException</span><span class="p">(</span><span class="ne">Exception</span><span class="p">):</span>
+</span><span id="L-33"><a href="#L-33"><span class="linenos"> 33</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Custom exception class raised when invalid codes are found that cannot be resolved by processing&quot;&quot;&quot;</span>
+</span><span id="L-34"><a href="#L-34"><span class="linenos"> 34</span></a>
+</span><span id="L-35"><a href="#L-35"><span class="linenos"> 35</span></a>    <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">error</span><span class="p">):</span>
+</span><span id="L-36"><a href="#L-36"><span class="linenos"> 36</span></a>        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">error</span><span class="o">.</span><span class="n">message</span><span class="p">)</span>
+</span><span id="L-37"><a href="#L-37"><span class="linenos"> 37</span></a>        <span class="bp">self</span><span class="o">.</span><span class="n">error</span> <span class="o">=</span> <span class="n">error</span>
+</span><span id="L-38"><a href="#L-38"><span class="linenos"> 38</span></a>
+</span><span id="L-39"><a href="#L-39"><span class="linenos"> 39</span></a>
+</span><span id="L-40"><a href="#L-40"><span class="linenos"> 40</span></a><span class="k">class</span><span class="w"> </span><span class="nc">Proto</span><span class="p">:</span>
+</span><span id="L-41"><a href="#L-41"><span class="linenos"> 41</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-42"><a href="#L-42"><span class="linenos"> 42</span></a><span class="sd">    Define checks as list of 3 tuple: (Message, Condition, Process)</span>
+</span><span id="L-43"><a href="#L-43"><span class="linenos"> 43</span></a><span class="sd">    - Message = The name of the condition (what is printed and logged)</span>
+</span><span id="L-44"><a href="#L-44"><span class="linenos"> 44</span></a><span class="sd">    - Condition = True if Passed, and False if Failed</span>
+</span><span id="L-45"><a href="#L-45"><span class="linenos"> 45</span></a><span class="sd">    - Process = Aims to resolve all issues that stop condition from passing (Do not change index!)</span>
+</span><span id="L-46"><a href="#L-46"><span class="linenos"> 46</span></a><span class="sd">    &quot;&quot;&quot;</span>
+</span><span id="L-47"><a href="#L-47"><span class="linenos"> 47</span></a>
+</span><span id="L-48"><a href="#L-48"><span class="linenos"> 48</span></a>    <span class="n">checks</span><span class="p">:</span> <span class="nb">list</span><span class="p">[</span>
+</span><span id="L-49"><a href="#L-49"><span class="linenos"> 49</span></a>        <span class="nb">tuple</span><span class="p">[</span>
+</span><span id="L-50"><a href="#L-50"><span class="linenos"> 50</span></a>            <span class="nb">str</span><span class="p">,</span>  <span class="c1"># The description, e.g., &quot;Not Empty&quot;</span>
+</span><span id="L-51"><a href="#L-51"><span class="linenos"> 51</span></a>            <span class="n">Callable</span><span class="p">[</span>
+</span><span id="L-52"><a href="#L-52"><span class="linenos"> 52</span></a>                <span class="p">[</span><span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">],</span>
+</span><span id="L-53"><a href="#L-53"><span class="linenos"> 53</span></a>                <span class="n">pd</span><span class="o">.</span><span class="n">Series</span><span class="p">,</span>
+</span><span id="L-54"><a href="#L-54"><span class="linenos"> 54</span></a>            <span class="p">],</span>  <span class="c1"># The first lambda function: takes a list and returns a pd.Series of booleans</span>
+</span><span id="L-55"><a href="#L-55"><span class="linenos"> 55</span></a>            <span class="n">Callable</span><span class="p">[</span>
+</span><span id="L-56"><a href="#L-56"><span class="linenos"> 56</span></a>                <span class="p">[</span><span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">,</span> <span class="n">Path</span><span class="p">],</span>
+</span><span id="L-57"><a href="#L-57"><span class="linenos"> 57</span></a>                <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">,</span>
+</span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</span></a>            <span class="p">],</span>  <span class="c1"># The second lambda function: takes a list and a string, and returns nothing</span>
+</span><span id="L-59"><a href="#L-59"><span class="linenos"> 59</span></a>        <span class="p">]</span>
+</span><span id="L-60"><a href="#L-60"><span class="linenos"> 60</span></a>    <span class="p">]</span>
+</span><span id="L-61"><a href="#L-61"><span class="linenos"> 61</span></a>
+</span><span id="L-62"><a href="#L-62"><span class="linenos"> 62</span></a>    <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">trud_codes_path</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Path</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">):</span>
+</span><span id="L-63"><a href="#L-63"><span class="linenos"> 63</span></a>        <span class="k">if</span> <span class="n">trud_codes_path</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-64"><a href="#L-64"><span class="linenos"> 64</span></a>            <span class="k">if</span> <span class="n">trud_codes_path</span><span class="o">.</span><span class="n">is_file</span><span class="p">():</span>
+</span><span id="L-65"><a href="#L-65"><span class="linenos"> 65</span></a>                <span class="bp">self</span><span class="o">.</span><span class="n">trud_codes_path</span><span class="p">:</span> <span class="n">Path</span> <span class="o">=</span> <span class="n">trud_codes_path</span>
+</span><span id="L-66"><a href="#L-66"><span class="linenos"> 66</span></a>                <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_parquet</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">trud_codes_path</span><span class="p">)</span>
+</span><span id="L-67"><a href="#L-67"><span class="linenos"> 67</span></a>            <span class="k">else</span><span class="p">:</span>
+</span><span id="L-68"><a href="#L-68"><span class="linenos"> 68</span></a>                <span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span>
+</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a>                    <span class="sa">f</span><span class="s2">&quot;Error: Read2 code file &#39;</span><span class="si">{</span><span class="n">trud_codes_path</span><span class="si">}</span><span class="s2">&#39; does not exist. Please ensure you have installed TRUD correctly&quot;</span>
+</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a>                <span class="p">)</span>
 </span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</span></a>
-</span><span id="L-72"><a href="#L-72"><span class="linenos"> 72</span></a>    <span class="k">def</span><span class="w"> </span><span class="nf">in_database</span><span class="p">(</span>
-</span><span id="L-73"><a href="#L-73"><span class="linenos"> 73</span></a>        <span class="bp">self</span><span class="p">,</span> <span class="n">codes</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">,</span> <span class="n">db</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">,</span> <span class="n">col</span><span class="p">:</span> <span class="nb">str</span>
-</span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</span></a>    <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">:</span>
-</span><span id="L-75"><a href="#L-75"><span class="linenos"> 75</span></a>        <span class="k">return</span> <span class="n">codes</span><span class="o">.</span><span class="n">isin</span><span class="p">(</span><span class="n">db</span><span class="p">[</span><span class="n">col</span><span class="p">])</span>
-</span><span id="L-76"><a href="#L-76"><span class="linenos"> 76</span></a>
-</span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a>    <span class="k">def</span><span class="w"> </span><span class="nf">process</span><span class="p">(</span>
-</span><span id="L-78"><a href="#L-78"><span class="linenos"> 78</span></a>        <span class="bp">self</span><span class="p">,</span> <span class="n">codes</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="n">Path</span>
-</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a>    <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Tuple</span><span class="p">[</span><span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">,</span> <span class="nb">list</span><span class="p">]:</span>
-</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a><span class="w">        </span><span class="sd">&quot;&quot;&quot;identify issues that do not pass and fix them with define/d process&quot;&quot;&quot;</span>
-</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a>        <span class="n">errors</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a>        <span class="c1"># Iter through each item in check.</span>
-</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a>        <span class="k">for</span> <span class="n">msg</span><span class="p">,</span> <span class="n">cond</span><span class="p">,</span> <span class="n">fix</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">checks</span><span class="p">:</span>
-</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a>            <span class="c1"># Check if any codes fail the check to False</span>
-</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a>            <span class="k">if</span> <span class="ow">not</span> <span class="n">cond</span><span class="p">(</span><span class="n">codes</span><span class="p">)</span><span class="o">.</span><span class="n">all</span><span class="p">():</span>
-</span><span id="L-86"><a href="#L-86"><span class="linenos"> 86</span></a>                <span class="c1"># Log the number of codes that failed</span>
-</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a>                <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span>
-</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a>                    <span class="sa">f</span><span class="s2">&quot;Check: </span><span class="si">{</span><span class="n">msg</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="p">(</span><span class="o">~</span><span class="n">cond</span><span class="p">(</span><span class="n">codes</span><span class="p">))</span><span class="o">.</span><span class="n">sum</span><span class="p">()</span><span class="si">}</span><span class="s2"> failed, trying to fix&quot;</span>
-</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a>                <span class="p">)</span>
-</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a>                <span class="c1"># try fix errors by running lamba &quot;process&quot; function</span>
-</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a>                <span class="k">try</span><span class="p">:</span>
-</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a>                    <span class="n">codes</span> <span class="o">=</span> <span class="n">fix</span><span class="p">(</span><span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">)</span>
-</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a>                    <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Check: Fixed&quot;</span><span class="p">)</span>
-</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a>                <span class="k">except</span> <span class="n">InvalidCodesException</span> <span class="k">as</span> <span class="n">ex</span><span class="p">:</span>
-</span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</span></a>                    <span class="n">errors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">ex</span><span class="o">.</span><span class="n">error</span><span class="p">)</span>
-</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a>            <span class="k">else</span><span class="p">:</span>
-</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a>                <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Check: passed&quot;</span><span class="p">)</span>
-</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a>
-</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a>        <span class="k">return</span> <span class="n">codes</span><span class="p">,</span> <span class="n">errors</span>
-</span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a>
-</span><span id="L-101"><a href="#L-101"><span class="linenos">101</span></a>    <span class="k">def</span><span class="w"> </span><span class="nf">verify</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">codes</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="n">Path</span><span class="p">):</span>
-</span><span id="L-102"><a href="#L-102"><span class="linenos">102</span></a><span class="w">        </span><span class="sd">&quot;&quot;&quot;verify codes in codes file&quot;&quot;&quot;</span>
-</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a>        <span class="n">conds</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([])</span>
+</span><span id="L-72"><a href="#L-72"><span class="linenos"> 72</span></a>        <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="n">name</span>
+</span><span id="L-73"><a href="#L-73"><span class="linenos"> 73</span></a>
+</span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</span></a>    <span class="k">def</span><span class="w"> </span><span class="nf">raise_exception</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ex</span><span class="p">:</span> <span class="ne">Exception</span><span class="p">):</span>
+</span><span id="L-75"><a href="#L-75"><span class="linenos"> 75</span></a><span class="w">        </span><span class="sd">&quot;&quot;&quot;Raises an exception inside a lambda function. Python does not allow using raise statement inside lambda because lambda can only contain expressions, not statements. Using raise_exception not raise_ as it&#39;s more explict&quot;&quot;&quot;</span>
+</span><span id="L-76"><a href="#L-76"><span class="linenos"> 76</span></a>        <span class="k">raise</span> <span class="n">ex</span>
+</span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a>
+</span><span id="L-78"><a href="#L-78"><span class="linenos"> 78</span></a>    <span class="k">def</span><span class="w"> </span><span class="nf">in_database</span><span class="p">(</span>
+</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a>        <span class="bp">self</span><span class="p">,</span> <span class="n">codes</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">,</span> <span class="n">db</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">,</span> <span class="n">col</span><span class="p">:</span> <span class="nb">str</span>
+</span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a>    <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">:</span>
+</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a>        <span class="k">return</span> <span class="n">codes</span><span class="o">.</span><span class="n">isin</span><span class="p">(</span><span class="n">db</span><span class="p">[</span><span class="n">col</span><span class="p">])</span>
+</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a>
+</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a>    <span class="k">def</span><span class="w"> </span><span class="nf">process</span><span class="p">(</span>
+</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a>        <span class="bp">self</span><span class="p">,</span> <span class="n">codes</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="n">Path</span>
+</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a>    <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Tuple</span><span class="p">[</span><span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">,</span> <span class="nb">list</span><span class="p">]:</span>
+</span><span id="L-86"><a href="#L-86"><span class="linenos"> 86</span></a><span class="w">        </span><span class="sd">&quot;&quot;&quot;identify issues that do not pass and fix them with define/d process&quot;&quot;&quot;</span>
+</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a>        <span class="n">errors</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a>        <span class="c1"># Iter through each item in check.</span>
+</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a>        <span class="k">for</span> <span class="n">msg</span><span class="p">,</span> <span class="n">cond</span><span class="p">,</span> <span class="n">fix</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">checks</span><span class="p">:</span>
+</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a>            <span class="c1"># Check if any codes fail the check to False</span>
+</span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a>            <span class="k">if</span> <span class="ow">not</span> <span class="n">cond</span><span class="p">(</span><span class="n">codes</span><span class="p">)</span><span class="o">.</span><span class="n">all</span><span class="p">():</span>
+</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a>                <span class="c1"># Log the number of codes that failed</span>
+</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a>                <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span>
+</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a>                    <span class="sa">f</span><span class="s2">&quot;Check: </span><span class="si">{</span><span class="n">msg</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="p">(</span><span class="o">~</span><span class="n">cond</span><span class="p">(</span><span class="n">codes</span><span class="p">))</span><span class="o">.</span><span class="n">sum</span><span class="p">()</span><span class="si">}</span><span class="s2"> failed, trying to fix&quot;</span>
+</span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</span></a>                <span class="p">)</span>
+</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a>                <span class="c1"># try fix errors by running lamba &quot;process&quot; function</span>
+</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a>                <span class="k">try</span><span class="p">:</span>
+</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a>                    <span class="n">codes</span> <span class="o">=</span> <span class="n">fix</span><span class="p">(</span><span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">)</span>
+</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a>                    <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Check: Fixed&quot;</span><span class="p">)</span>
+</span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a>                <span class="k">except</span> <span class="n">InvalidCodesException</span> <span class="k">as</span> <span class="n">ex</span><span class="p">:</span>
+</span><span id="L-101"><a href="#L-101"><span class="linenos">101</span></a>                    <span class="n">errors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">ex</span><span class="o">.</span><span class="n">error</span><span class="p">)</span>
+</span><span id="L-102"><a href="#L-102"><span class="linenos">102</span></a>            <span class="k">else</span><span class="p">:</span>
+</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a>                <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Check: passed&quot;</span><span class="p">)</span>
 </span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a>
-</span><span id="L-105"><a href="#L-105"><span class="linenos">105</span></a>        <span class="c1"># Iter through each item in check.</span>
-</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a>        <span class="k">for</span> <span class="n">msg</span><span class="p">,</span> <span class="n">cond</span><span class="p">,</span> <span class="n">process</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">checks</span><span class="p">:</span>
-</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a>            <span class="c1"># run conditional check</span>
-</span><span id="L-108"><a href="#L-108"><span class="linenos">108</span></a>            <span class="n">out</span> <span class="o">=</span> <span class="n">cond</span><span class="p">(</span><span class="n">codes</span><span class="p">)</span>
-</span><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a>            <span class="n">conds</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">conds</span><span class="p">,</span> <span class="n">out</span><span class="o">.</span><span class="n">all</span><span class="p">())</span>
+</span><span id="L-105"><a href="#L-105"><span class="linenos">105</span></a>        <span class="k">return</span> <span class="n">codes</span><span class="p">,</span> <span class="n">errors</span>
+</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a>
+</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a>    <span class="k">def</span><span class="w"> </span><span class="nf">verify</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">codes</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="n">Path</span><span class="p">):</span>
+</span><span id="L-108"><a href="#L-108"><span class="linenos">108</span></a><span class="w">        </span><span class="sd">&quot;&quot;&quot;verify codes in codes file&quot;&quot;&quot;</span>
+</span><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a>        <span class="n">conds</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([])</span>
 </span><span id="L-110"><a href="#L-110"><span class="linenos">110</span></a>
-</span><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a>        <span class="k">return</span> <span class="n">conds</span>
-</span><span id="L-112"><a href="#L-112"><span class="linenos">112</span></a>
-</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a>
-</span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a><span class="k">class</span><span class="w"> </span><span class="nc">Read2</span><span class="p">(</span><span class="n">Proto</span><span class="p">):</span>
-</span><span id="L-115"><a href="#L-115"><span class="linenos">115</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;This Read2 class extends Proto, adding custom validation checks for a dataset of &quot;Read2&quot; codes. It ensures that the dataset is loaded, validates the codes based on several rules, and applies corrections or logs errors when necessary.&quot;&quot;&quot;</span>
+</span><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a>        <span class="c1"># Iter through each item in check.</span>
+</span><span id="L-112"><a href="#L-112"><span class="linenos">112</span></a>        <span class="k">for</span> <span class="n">msg</span><span class="p">,</span> <span class="n">cond</span><span class="p">,</span> <span class="n">process</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">checks</span><span class="p">:</span>
+</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a>            <span class="c1"># run conditional check</span>
+</span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a>            <span class="n">out</span> <span class="o">=</span> <span class="n">cond</span><span class="p">(</span><span class="n">codes</span><span class="p">)</span>
+</span><span id="L-115"><a href="#L-115"><span class="linenos">115</span></a>            <span class="n">conds</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">conds</span><span class="p">,</span> <span class="n">out</span><span class="o">.</span><span class="n">all</span><span class="p">())</span>
 </span><span id="L-116"><a href="#L-116"><span class="linenos">116</span></a>
-</span><span id="L-117"><a href="#L-117"><span class="linenos">117</span></a>    <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="L-118"><a href="#L-118"><span class="linenos">118</span></a>        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s2">&quot;read2&quot;</span><span class="p">,</span> <span class="n">trud</span><span class="o">.</span><span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;read2.parquet&quot;</span><span class="p">)</span>
+</span><span id="L-117"><a href="#L-117"><span class="linenos">117</span></a>        <span class="k">return</span> <span class="n">conds</span>
+</span><span id="L-118"><a href="#L-118"><span class="linenos">118</span></a>
 </span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a>
-</span><span id="L-120"><a href="#L-120"><span class="linenos">120</span></a>        <span class="c1"># validate checks</span>
-</span><span id="L-121"><a href="#L-121"><span class="linenos">121</span></a>        <span class="bp">self</span><span class="o">.</span><span class="n">checks</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="L-122"><a href="#L-122"><span class="linenos">122</span></a>            <span class="p">(</span>
-</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a>                <span class="c1"># check codes are not empty, if empty throw an exception</span>
-</span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a>                <span class="s2">&quot;Not Empty&quot;</span><span class="p">,</span>
-</span><span id="L-125"><a href="#L-125"><span class="linenos">125</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">Series</span><span class="p">([</span><span class="nb">len</span><span class="p">(</span><span class="n">codes</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">]),</span>
-</span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
-</span><span id="L-127"><a href="#L-127"><span class="linenos">127</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
-</span><span id="L-128"><a href="#L-128"><span class="linenos">128</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
-</span><span id="L-129"><a href="#L-129"><span class="linenos">129</span></a>                            <span class="sa">f</span><span class="s2">&quot;Code list is empty&quot;</span><span class="p">,</span>
-</span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
-</span><span id="L-131"><a href="#L-131"><span class="linenos">131</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
-</span><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a>                            <span class="n">mask</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
-</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a>                        <span class="p">)</span>
-</span><span id="L-135"><a href="#L-135"><span class="linenos">135</span></a>                    <span class="p">)</span>
-</span><span id="L-136"><a href="#L-136"><span class="linenos">136</span></a>                <span class="p">),</span>
-</span><span id="L-137"><a href="#L-137"><span class="linenos">137</span></a>            <span class="p">),</span>
-</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a>            <span class="p">(</span>
-</span><span id="L-139"><a href="#L-139"><span class="linenos">139</span></a>                <span class="c1"># check codes &lt;5 characters, if too short pads it with . (dots) to reach 5 characters</span>
-</span><span id="L-140"><a href="#L-140"><span class="linenos">140</span></a>                <span class="s2">&quot;Too Short&quot;</span><span class="p">,</span>
-</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="o">~</span><span class="p">(</span><span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">len</span><span class="p">()</span> <span class="o">&lt;</span> <span class="mi">5</span><span class="p">),</span>
-</span><span id="L-142"><a href="#L-142"><span class="linenos">142</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">pad</span><span class="p">(</span>
-</span><span id="L-143"><a href="#L-143"><span class="linenos">143</span></a>                    <span class="n">width</span><span class="o">=</span><span class="mi">5</span><span class="p">,</span> <span class="n">side</span><span class="o">=</span><span class="s2">&quot;right&quot;</span><span class="p">,</span> <span class="n">fillchar</span><span class="o">=</span><span class="s2">&quot;.&quot;</span>
-</span><span id="L-144"><a href="#L-144"><span class="linenos">144</span></a>                <span class="p">),</span>
-</span><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a>            <span class="p">),</span>
-</span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a>            <span class="p">(</span>
-</span><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a>                <span class="c1"># check codes &gt; 5 characters, If too long, truncates them to 5 characters</span>
-</span><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a>                <span class="s2">&quot;Too Long&quot;</span><span class="p">,</span>
-</span><span id="L-149"><a href="#L-149"><span class="linenos">149</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="o">~</span><span class="p">(</span><span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">len</span><span class="p">()</span> <span class="o">&gt;</span> <span class="mi">5</span><span class="p">),</span>
-</span><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="p">[:</span><span class="mi">5</span><span class="p">],</span>
+</span><span id="L-120"><a href="#L-120"><span class="linenos">120</span></a><span class="k">class</span><span class="w"> </span><span class="nc">Read2</span><span class="p">(</span><span class="n">Proto</span><span class="p">):</span>
+</span><span id="L-121"><a href="#L-121"><span class="linenos">121</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;This Read2 class extends Proto, adding custom validation checks for a dataset of &quot;Read2&quot; codes. It ensures that the dataset is loaded, validates the codes based on several rules, and applies corrections or logs errors when necessary.&quot;&quot;&quot;</span>
+</span><span id="L-122"><a href="#L-122"><span class="linenos">122</span></a>
+</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a>    <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a>        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s2">&quot;read2&quot;</span><span class="p">,</span> <span class="n">trud</span><span class="o">.</span><span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;read2.parquet&quot;</span><span class="p">)</span>
+</span><span id="L-125"><a href="#L-125"><span class="linenos">125</span></a>
+</span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a>        <span class="c1"># validate checks</span>
+</span><span id="L-127"><a href="#L-127"><span class="linenos">127</span></a>        <span class="bp">self</span><span class="o">.</span><span class="n">checks</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="L-128"><a href="#L-128"><span class="linenos">128</span></a>            <span class="p">(</span>
+</span><span id="L-129"><a href="#L-129"><span class="linenos">129</span></a>                <span class="c1"># check codes are not empty, if empty throw an exception</span>
+</span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a>                <span class="s2">&quot;Not Empty&quot;</span><span class="p">,</span>
+</span><span id="L-131"><a href="#L-131"><span class="linenos">131</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">Series</span><span class="p">([</span><span class="nb">len</span><span class="p">(</span><span class="n">codes</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">]),</span>
+</span><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
+</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
+</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
+</span><span id="L-135"><a href="#L-135"><span class="linenos">135</span></a>                            <span class="sa">f</span><span class="s2">&quot;Code list is empty&quot;</span><span class="p">,</span>
+</span><span id="L-136"><a href="#L-136"><span class="linenos">136</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
+</span><span id="L-137"><a href="#L-137"><span class="linenos">137</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
+</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a>                            <span class="n">mask</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
+</span><span id="L-139"><a href="#L-139"><span class="linenos">139</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
+</span><span id="L-140"><a href="#L-140"><span class="linenos">140</span></a>                        <span class="p">)</span>
+</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a>                    <span class="p">)</span>
+</span><span id="L-142"><a href="#L-142"><span class="linenos">142</span></a>                <span class="p">),</span>
+</span><span id="L-143"><a href="#L-143"><span class="linenos">143</span></a>            <span class="p">),</span>
+</span><span id="L-144"><a href="#L-144"><span class="linenos">144</span></a>            <span class="p">(</span>
+</span><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a>                <span class="c1"># check codes &lt;5 characters, if too short pads it with . (dots) to reach 5 characters</span>
+</span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a>                <span class="s2">&quot;Too Short&quot;</span><span class="p">,</span>
+</span><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="o">~</span><span class="p">(</span><span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">len</span><span class="p">()</span> <span class="o">&lt;</span> <span class="mi">5</span><span class="p">),</span>
+</span><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">pad</span><span class="p">(</span>
+</span><span id="L-149"><a href="#L-149"><span class="linenos">149</span></a>                    <span class="n">width</span><span class="o">=</span><span class="mi">5</span><span class="p">,</span> <span class="n">side</span><span class="o">=</span><span class="s2">&quot;right&quot;</span><span class="p">,</span> <span class="n">fillchar</span><span class="o">=</span><span class="s2">&quot;.&quot;</span>
+</span><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a>                <span class="p">),</span>
 </span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a>            <span class="p">),</span>
 </span><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a>            <span class="p">(</span>
-</span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a>                <span class="c1"># checks codes contain numbers, or dots (.), if not logs invalid code error</span>
-</span><span id="L-154"><a href="#L-154"><span class="linenos">154</span></a>                <span class="s2">&quot;Alphanumeric Dot&quot;</span><span class="p">,</span>
-</span><span id="L-155"><a href="#L-155"><span class="linenos">155</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;^[a-zA-Z0-9.]+$&quot;</span><span class="p">),</span>
-</span><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
-</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
-</span><span id="L-158"><a href="#L-158"><span class="linenos">158</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
-</span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a>                            <span class="sa">f</span><span class="s2">&quot;Illegal code format, not alphanumeric dot&quot;</span><span class="p">,</span>
-</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
-</span><span id="L-161"><a href="#L-161"><span class="linenos">161</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
-</span><span id="L-162"><a href="#L-162"><span class="linenos">162</span></a>                            <span class="n">mask</span><span class="o">=</span><span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;^[a-zA-Z0-9.]+$&quot;</span><span class="p">),</span>
-</span><span id="L-163"><a href="#L-163"><span class="linenos">163</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
-</span><span id="L-164"><a href="#L-164"><span class="linenos">164</span></a>                        <span class="p">)</span>
-</span><span id="L-165"><a href="#L-165"><span class="linenos">165</span></a>                    <span class="p">)</span>
-</span><span id="L-166"><a href="#L-166"><span class="linenos">166</span></a>                <span class="p">),</span>
-</span><span id="L-167"><a href="#L-167"><span class="linenos">167</span></a>            <span class="p">),</span>
-</span><span id="L-168"><a href="#L-168"><span class="linenos">168</span></a>            <span class="p">(</span>
-</span><span id="L-169"><a href="#L-169"><span class="linenos">169</span></a>                <span class="c1"># checks code exists in self.db (the Read2 dataset). If missing log invalid codes.</span>
-</span><span id="L-170"><a href="#L-170"><span class="linenos">170</span></a>                <span class="s2">&quot;In Database&quot;</span><span class="p">,</span>
-</span><span id="L-171"><a href="#L-171"><span class="linenos">171</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">in_database</span><span class="p">(</span><span class="n">codes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">),</span>
-</span><span id="L-172"><a href="#L-172"><span class="linenos">172</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
-</span><span id="L-173"><a href="#L-173"><span class="linenos">173</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
-</span><span id="L-174"><a href="#L-174"><span class="linenos">174</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
-</span><span id="L-175"><a href="#L-175"><span class="linenos">175</span></a>                            <span class="sa">f</span><span class="s2">&quot;Codes do not exist in database&quot;</span><span class="p">,</span>
-</span><span id="L-176"><a href="#L-176"><span class="linenos">176</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
-</span><span id="L-177"><a href="#L-177"><span class="linenos">177</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
-</span><span id="L-178"><a href="#L-178"><span class="linenos">178</span></a>                            <span class="n">mask</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">in_database</span><span class="p">(</span><span class="n">codes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">),</span>
-</span><span id="L-179"><a href="#L-179"><span class="linenos">179</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
-</span><span id="L-180"><a href="#L-180"><span class="linenos">180</span></a>                        <span class="p">)</span>
-</span><span id="L-181"><a href="#L-181"><span class="linenos">181</span></a>                    <span class="p">)</span>
-</span><span id="L-182"><a href="#L-182"><span class="linenos">182</span></a>                <span class="p">),</span>
-</span><span id="L-183"><a href="#L-183"><span class="linenos">183</span></a>            <span class="p">),</span>
-</span><span id="L-184"><a href="#L-184"><span class="linenos">184</span></a>        <span class="p">]</span>
-</span><span id="L-185"><a href="#L-185"><span class="linenos">185</span></a>
-</span><span id="L-186"><a href="#L-186"><span class="linenos">186</span></a>
-</span><span id="L-187"><a href="#L-187"><span class="linenos">187</span></a><span class="k">class</span><span class="w"> </span><span class="nc">Read3</span><span class="p">(</span><span class="n">Proto</span><span class="p">):</span>
-</span><span id="L-188"><a href="#L-188"><span class="linenos">188</span></a>    <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="L-189"><a href="#L-189"><span class="linenos">189</span></a>        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s2">&quot;Read3&quot;</span><span class="p">,</span> <span class="n">trud</span><span class="o">.</span><span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;read3.parquet&quot;</span><span class="p">)</span>
-</span><span id="L-190"><a href="#L-190"><span class="linenos">190</span></a>
-</span><span id="L-191"><a href="#L-191"><span class="linenos">191</span></a>        <span class="bp">self</span><span class="o">.</span><span class="n">checks</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="L-192"><a href="#L-192"><span class="linenos">192</span></a>            <span class="p">(</span>
-</span><span id="L-193"><a href="#L-193"><span class="linenos">193</span></a>                <span class="s2">&quot;Not Empty&quot;</span><span class="p">,</span>
-</span><span id="L-194"><a href="#L-194"><span class="linenos">194</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">Series</span><span class="p">([</span><span class="nb">len</span><span class="p">(</span><span class="n">codes</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">]),</span>
-</span><span id="L-195"><a href="#L-195"><span class="linenos">195</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
-</span><span id="L-196"><a href="#L-196"><span class="linenos">196</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
-</span><span id="L-197"><a href="#L-197"><span class="linenos">197</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
-</span><span id="L-198"><a href="#L-198"><span class="linenos">198</span></a>                            <span class="sa">f</span><span class="s2">&quot;Code list is empty&quot;</span><span class="p">,</span>
-</span><span id="L-199"><a href="#L-199"><span class="linenos">199</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
-</span><span id="L-200"><a href="#L-200"><span class="linenos">200</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
-</span><span id="L-201"><a href="#L-201"><span class="linenos">201</span></a>                            <span class="n">mask</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-</span><span id="L-202"><a href="#L-202"><span class="linenos">202</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
-</span><span id="L-203"><a href="#L-203"><span class="linenos">203</span></a>                        <span class="p">)</span>
-</span><span id="L-204"><a href="#L-204"><span class="linenos">204</span></a>                    <span class="p">)</span>
-</span><span id="L-205"><a href="#L-205"><span class="linenos">205</span></a>                <span class="p">),</span>
-</span><span id="L-206"><a href="#L-206"><span class="linenos">206</span></a>            <span class="p">),</span>
-</span><span id="L-207"><a href="#L-207"><span class="linenos">207</span></a>            <span class="p">(</span>
-</span><span id="L-208"><a href="#L-208"><span class="linenos">208</span></a>                <span class="s2">&quot;Too Short&quot;</span><span class="p">,</span>
-</span><span id="L-209"><a href="#L-209"><span class="linenos">209</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="o">~</span><span class="p">(</span><span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">len</span><span class="p">()</span> <span class="o">&lt;</span> <span class="mi">5</span><span class="p">),</span>
-</span><span id="L-210"><a href="#L-210"><span class="linenos">210</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">pad</span><span class="p">(</span>
-</span><span id="L-211"><a href="#L-211"><span class="linenos">211</span></a>                    <span class="n">width</span><span class="o">=</span><span class="mi">5</span><span class="p">,</span> <span class="n">side</span><span class="o">=</span><span class="s2">&quot;right&quot;</span><span class="p">,</span> <span class="n">fillchar</span><span class="o">=</span><span class="s2">&quot;.&quot;</span>
-</span><span id="L-212"><a href="#L-212"><span class="linenos">212</span></a>                <span class="p">),</span>
-</span><span id="L-213"><a href="#L-213"><span class="linenos">213</span></a>            <span class="p">),</span>
-</span><span id="L-214"><a href="#L-214"><span class="linenos">214</span></a>            <span class="p">(</span>
-</span><span id="L-215"><a href="#L-215"><span class="linenos">215</span></a>                <span class="s2">&quot;Too Long&quot;</span><span class="p">,</span>
-</span><span id="L-216"><a href="#L-216"><span class="linenos">216</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="o">~</span><span class="p">(</span><span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">len</span><span class="p">()</span> <span class="o">&gt;</span> <span class="mi">5</span><span class="p">),</span>
-</span><span id="L-217"><a href="#L-217"><span class="linenos">217</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="p">[:</span><span class="mi">5</span><span class="p">],</span>
-</span><span id="L-218"><a href="#L-218"><span class="linenos">218</span></a>            <span class="p">),</span>
-</span><span id="L-219"><a href="#L-219"><span class="linenos">219</span></a>            <span class="p">(</span>
-</span><span id="L-220"><a href="#L-220"><span class="linenos">220</span></a>                <span class="s2">&quot;Alphanumeric Dot&quot;</span><span class="p">,</span>
-</span><span id="L-221"><a href="#L-221"><span class="linenos">221</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;^[a-zA-Z0-9.]+$&quot;</span><span class="p">),</span>
-</span><span id="L-222"><a href="#L-222"><span class="linenos">222</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
-</span><span id="L-223"><a href="#L-223"><span class="linenos">223</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
-</span><span id="L-224"><a href="#L-224"><span class="linenos">224</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
-</span><span id="L-225"><a href="#L-225"><span class="linenos">225</span></a>                            <span class="sa">f</span><span class="s2">&quot;QA Alphanumeric Dot&quot;</span><span class="p">,</span>
-</span><span id="L-226"><a href="#L-226"><span class="linenos">226</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
-</span><span id="L-227"><a href="#L-227"><span class="linenos">227</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
-</span><span id="L-228"><a href="#L-228"><span class="linenos">228</span></a>                            <span class="n">check_regex</span><span class="o">=</span><span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;^[a-zA-Z0-9.]+$&quot;</span><span class="p">),</span>
-</span><span id="L-229"><a href="#L-229"><span class="linenos">229</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
-</span><span id="L-230"><a href="#L-230"><span class="linenos">230</span></a>                        <span class="p">)</span>
-</span><span id="L-231"><a href="#L-231"><span class="linenos">231</span></a>                    <span class="p">)</span>
-</span><span id="L-232"><a href="#L-232"><span class="linenos">232</span></a>                <span class="p">),</span>
-</span><span id="L-233"><a href="#L-233"><span class="linenos">233</span></a>            <span class="p">),</span>
-</span><span id="L-234"><a href="#L-234"><span class="linenos">234</span></a>            <span class="p">(</span>
-</span><span id="L-235"><a href="#L-235"><span class="linenos">235</span></a>                <span class="s2">&quot;In Database&quot;</span><span class="p">,</span>
-</span><span id="L-236"><a href="#L-236"><span class="linenos">236</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">in_database</span><span class="p">(</span><span class="n">codes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">),</span>
-</span><span id="L-237"><a href="#L-237"><span class="linenos">237</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
-</span><span id="L-238"><a href="#L-238"><span class="linenos">238</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
-</span><span id="L-239"><a href="#L-239"><span class="linenos">239</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
-</span><span id="L-240"><a href="#L-240"><span class="linenos">240</span></a>                            <span class="sa">f</span><span class="s2">&quot;QA In Database&quot;</span><span class="p">,</span>
-</span><span id="L-241"><a href="#L-241"><span class="linenos">241</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
-</span><span id="L-242"><a href="#L-242"><span class="linenos">242</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
-</span><span id="L-243"><a href="#L-243"><span class="linenos">243</span></a>                            <span class="n">check_regex</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">in_database</span><span class="p">(</span><span class="n">codes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">),</span>
-</span><span id="L-244"><a href="#L-244"><span class="linenos">244</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
-</span><span id="L-245"><a href="#L-245"><span class="linenos">245</span></a>                        <span class="p">)</span>
-</span><span id="L-246"><a href="#L-246"><span class="linenos">246</span></a>                    <span class="p">)</span>
-</span><span id="L-247"><a href="#L-247"><span class="linenos">247</span></a>                <span class="p">),</span>
-</span><span id="L-248"><a href="#L-248"><span class="linenos">248</span></a>            <span class="p">),</span>
-</span><span id="L-249"><a href="#L-249"><span class="linenos">249</span></a>        <span class="p">]</span>
-</span><span id="L-250"><a href="#L-250"><span class="linenos">250</span></a>
-</span><span id="L-251"><a href="#L-251"><span class="linenos">251</span></a>
-</span><span id="L-252"><a href="#L-252"><span class="linenos">252</span></a><span class="k">class</span><span class="w"> </span><span class="nc">Icd10</span><span class="p">(</span><span class="n">Proto</span><span class="p">):</span>
-</span><span id="L-253"><a href="#L-253"><span class="linenos">253</span></a>    <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="L-254"><a href="#L-254"><span class="linenos">254</span></a>        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s2">&quot;icd10&quot;</span><span class="p">,</span> <span class="n">trud</span><span class="o">.</span><span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;icd10.parquet&quot;</span><span class="p">)</span>
-</span><span id="L-255"><a href="#L-255"><span class="linenos">255</span></a>
-</span><span id="L-256"><a href="#L-256"><span class="linenos">256</span></a>        <span class="bp">self</span><span class="o">.</span><span class="n">checks</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="L-257"><a href="#L-257"><span class="linenos">257</span></a>            <span class="p">(</span>
-</span><span id="L-258"><a href="#L-258"><span class="linenos">258</span></a>                <span class="s2">&quot;Not Empty&quot;</span><span class="p">,</span>
-</span><span id="L-259"><a href="#L-259"><span class="linenos">259</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">Series</span><span class="p">([</span><span class="nb">len</span><span class="p">(</span><span class="n">codes</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">]),</span>
-</span><span id="L-260"><a href="#L-260"><span class="linenos">260</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
-</span><span id="L-261"><a href="#L-261"><span class="linenos">261</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
-</span><span id="L-262"><a href="#L-262"><span class="linenos">262</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
-</span><span id="L-263"><a href="#L-263"><span class="linenos">263</span></a>                            <span class="sa">f</span><span class="s2">&quot;Code list is empty </span><span class="si">{</span><span class="n">codes_file</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="L-264"><a href="#L-264"><span class="linenos">264</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
-</span><span id="L-265"><a href="#L-265"><span class="linenos">265</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
-</span><span id="L-266"><a href="#L-266"><span class="linenos">266</span></a>                            <span class="n">mask</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-</span><span id="L-267"><a href="#L-267"><span class="linenos">267</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
-</span><span id="L-268"><a href="#L-268"><span class="linenos">268</span></a>                        <span class="p">)</span>
-</span><span id="L-269"><a href="#L-269"><span class="linenos">269</span></a>                    <span class="p">)</span>
-</span><span id="L-270"><a href="#L-270"><span class="linenos">270</span></a>                <span class="p">),</span>
-</span><span id="L-271"><a href="#L-271"><span class="linenos">271</span></a>            <span class="p">),</span>
-</span><span id="L-272"><a href="#L-272"><span class="linenos">272</span></a>            <span class="p">(</span>
-</span><span id="L-273"><a href="#L-273"><span class="linenos">273</span></a>                <span class="s2">&quot;Too Short&quot;</span><span class="p">,</span>
-</span><span id="L-274"><a href="#L-274"><span class="linenos">274</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="o">~</span><span class="p">(</span><span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">len</span><span class="p">()</span> <span class="o">&lt;</span> <span class="mi">3</span><span class="p">),</span>
-</span><span id="L-275"><a href="#L-275"><span class="linenos">275</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
-</span><span id="L-276"><a href="#L-276"><span class="linenos">276</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
-</span><span id="L-277"><a href="#L-277"><span class="linenos">277</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
-</span><span id="L-278"><a href="#L-278"><span class="linenos">278</span></a>                            <span class="sa">f</span><span class="s2">&quot;QA Too Short&quot;</span><span class="p">,</span>
-</span><span id="L-279"><a href="#L-279"><span class="linenos">279</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
-</span><span id="L-280"><a href="#L-280"><span class="linenos">280</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
-</span><span id="L-281"><a href="#L-281"><span class="linenos">281</span></a>                            <span class="n">mask</span><span class="o">=~</span><span class="p">(</span><span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">len</span><span class="p">()</span> <span class="o">&lt;</span> <span class="mi">3</span><span class="p">),</span>
-</span><span id="L-282"><a href="#L-282"><span class="linenos">282</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
-</span><span id="L-283"><a href="#L-283"><span class="linenos">283</span></a>                        <span class="p">)</span>
-</span><span id="L-284"><a href="#L-284"><span class="linenos">284</span></a>                    <span class="p">)</span>
-</span><span id="L-285"><a href="#L-285"><span class="linenos">285</span></a>                <span class="p">),</span>
-</span><span id="L-286"><a href="#L-286"><span class="linenos">286</span></a>            <span class="p">),</span>
-</span><span id="L-287"><a href="#L-287"><span class="linenos">287</span></a>            <span class="p">(</span>
-</span><span id="L-288"><a href="#L-288"><span class="linenos">288</span></a>                <span class="s2">&quot;Has Dot&quot;</span><span class="p">,</span>
-</span><span id="L-289"><a href="#L-289"><span class="linenos">289</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="o">~</span><span class="p">(</span><span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;.*\..*&quot;</span><span class="p">)),</span>  <span class="c1"># check if contains dot</span>
-</span><span id="L-290"><a href="#L-290"><span class="linenos">290</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span>
-</span><span id="L-291"><a href="#L-291"><span class="linenos">291</span></a>                    <span class="s2">&quot;.&quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span>
-</span><span id="L-292"><a href="#L-292"><span class="linenos">292</span></a>                <span class="p">),</span>  <span class="c1"># delete any dots in string</span>
-</span><span id="L-293"><a href="#L-293"><span class="linenos">293</span></a>                <span class="c1"># lambda codes : codes.str.split(&#39;\.&#39;).apply(lambda ls: ls[0]) #only get part before dot</span>
-</span><span id="L-294"><a href="#L-294"><span class="linenos">294</span></a>            <span class="p">),</span>
-</span><span id="L-295"><a href="#L-295"><span class="linenos">295</span></a>            <span class="p">(</span>
-</span><span id="L-296"><a href="#L-296"><span class="linenos">296</span></a>                <span class="s2">&quot;Alphanumeric Capital&quot;</span><span class="p">,</span>
-</span><span id="L-297"><a href="#L-297"><span class="linenos">297</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;^[A-Z0-9]+$&quot;</span><span class="p">),</span>
-</span><span id="L-298"><a href="#L-298"><span class="linenos">298</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
-</span><span id="L-299"><a href="#L-299"><span class="linenos">299</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
-</span><span id="L-300"><a href="#L-300"><span class="linenos">300</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
-</span><span id="L-301"><a href="#L-301"><span class="linenos">301</span></a>                            <span class="sa">f</span><span class="s2">&quot;QA Alphanumeric Capital&quot;</span><span class="p">,</span>
-</span><span id="L-302"><a href="#L-302"><span class="linenos">302</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
-</span><span id="L-303"><a href="#L-303"><span class="linenos">303</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
-</span><span id="L-304"><a href="#L-304"><span class="linenos">304</span></a>                            <span class="n">mask</span><span class="o">=</span><span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;^[A-Z0-9]+$&quot;</span><span class="p">),</span>
-</span><span id="L-305"><a href="#L-305"><span class="linenos">305</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
-</span><span id="L-306"><a href="#L-306"><span class="linenos">306</span></a>                        <span class="p">)</span>
-</span><span id="L-307"><a href="#L-307"><span class="linenos">307</span></a>                    <span class="p">)</span>
-</span><span id="L-308"><a href="#L-308"><span class="linenos">308</span></a>                <span class="p">),</span>
-</span><span id="L-309"><a href="#L-309"><span class="linenos">309</span></a>            <span class="p">),</span>
-</span><span id="L-310"><a href="#L-310"><span class="linenos">310</span></a>            <span class="p">(</span>
-</span><span id="L-311"><a href="#L-311"><span class="linenos">311</span></a>                <span class="s2">&quot;In Database&quot;</span><span class="p">,</span>
-</span><span id="L-312"><a href="#L-312"><span class="linenos">312</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="o">~</span><span class="p">(</span>
-</span><span id="L-313"><a href="#L-313"><span class="linenos">313</span></a>                    <span class="o">~</span><span class="bp">self</span><span class="o">.</span><span class="n">in_database</span><span class="p">(</span><span class="n">codes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
-</span><span id="L-314"><a href="#L-314"><span class="linenos">314</span></a>                    <span class="o">&amp;</span> <span class="o">~</span><span class="bp">self</span><span class="o">.</span><span class="n">in_database</span><span class="p">(</span><span class="n">codes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_alt&quot;</span><span class="p">)</span>
-</span><span id="L-315"><a href="#L-315"><span class="linenos">315</span></a>                <span class="p">),</span>
-</span><span id="L-316"><a href="#L-316"><span class="linenos">316</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
-</span><span id="L-317"><a href="#L-317"><span class="linenos">317</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
-</span><span id="L-318"><a href="#L-318"><span class="linenos">318</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
-</span><span id="L-319"><a href="#L-319"><span class="linenos">319</span></a>                            <span class="sa">f</span><span class="s2">&quot;QA In Database&quot;</span><span class="p">,</span>
-</span><span id="L-320"><a href="#L-320"><span class="linenos">320</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
-</span><span id="L-321"><a href="#L-321"><span class="linenos">321</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
-</span><span id="L-322"><a href="#L-322"><span class="linenos">322</span></a>                            <span class="n">mask</span><span class="o">=~</span><span class="p">(</span>
-</span><span id="L-323"><a href="#L-323"><span class="linenos">323</span></a>                                <span class="o">~</span><span class="bp">self</span><span class="o">.</span><span class="n">in_database</span><span class="p">(</span><span class="n">codes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
-</span><span id="L-324"><a href="#L-324"><span class="linenos">324</span></a>                                <span class="o">&amp;</span> <span class="o">~</span><span class="bp">self</span><span class="o">.</span><span class="n">in_database</span><span class="p">(</span><span class="n">codes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_alt&quot;</span><span class="p">)</span>
-</span><span id="L-325"><a href="#L-325"><span class="linenos">325</span></a>                            <span class="p">),</span>
-</span><span id="L-326"><a href="#L-326"><span class="linenos">326</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
-</span><span id="L-327"><a href="#L-327"><span class="linenos">327</span></a>                        <span class="p">)</span>
-</span><span id="L-328"><a href="#L-328"><span class="linenos">328</span></a>                    <span class="p">)</span>
-</span><span id="L-329"><a href="#L-329"><span class="linenos">329</span></a>                <span class="p">),</span>
-</span><span id="L-330"><a href="#L-330"><span class="linenos">330</span></a>            <span class="p">),</span>
-</span><span id="L-331"><a href="#L-331"><span class="linenos">331</span></a>            <span class="c1"># 			(</span>
-</span><span id="L-332"><a href="#L-332"><span class="linenos">332</span></a>            <span class="c1"># 				&quot;ICD10 Regex&quot;,</span>
-</span><span id="L-333"><a href="#L-333"><span class="linenos">333</span></a>            <span class="c1"># 				lambda codes : codes.str.match(&quot;[a-zA-Z][0-9][0-9]\.?[a-zA-Z0-9]*$&quot;), #Alpha, Num, Num , Dot?, 4xAlphNum*</span>
-</span><span id="L-334"><a href="#L-334"><span class="linenos">334</span></a>            <span class="c1"># 				lambda codes : lc.log_invalid_code(codes,</span>
-</span><span id="L-335"><a href="#L-335"><span class="linenos">335</span></a>            <span class="c1"># 												codes.str.match(&quot;[a-zA-Z][0-9][0-9]\.?[a-zA-Z0-9]*$&quot;), #Log non-matching rows</span>
-</span><span id="L-336"><a href="#L-336"><span class="linenos">336</span></a>            <span class="c1"># 												code_type=&quot;icd10&quot;,</span>
-</span><span id="L-337"><a href="#L-337"><span class="linenos">337</span></a>            <span class="c1">#</span>
-</span><span id="L-338"><a href="#L-338"><span class="linenos">338</span></a>            <span class="c1"># 			)</span>
-</span><span id="L-339"><a href="#L-339"><span class="linenos">339</span></a>        <span class="p">]</span>
-</span><span id="L-340"><a href="#L-340"><span class="linenos">340</span></a>
-</span><span id="L-341"><a href="#L-341"><span class="linenos">341</span></a>
-</span><span id="L-342"><a href="#L-342"><span class="linenos">342</span></a><span class="k">class</span><span class="w"> </span><span class="nc">Snomed</span><span class="p">(</span><span class="n">Proto</span><span class="p">):</span>
-</span><span id="L-343"><a href="#L-343"><span class="linenos">343</span></a>    <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="L-344"><a href="#L-344"><span class="linenos">344</span></a>        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s2">&quot;snomed&quot;</span><span class="p">,</span> <span class="n">trud</span><span class="o">.</span><span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;snomed.parquet&quot;</span><span class="p">)</span>
-</span><span id="L-345"><a href="#L-345"><span class="linenos">345</span></a>
-</span><span id="L-346"><a href="#L-346"><span class="linenos">346</span></a>        <span class="bp">self</span><span class="o">.</span><span class="n">checks</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="L-347"><a href="#L-347"><span class="linenos">347</span></a>            <span class="c1"># (</span>
-</span><span id="L-348"><a href="#L-348"><span class="linenos">348</span></a>            <span class="c1"># 	&quot;Not Empty&quot;,</span>
-</span><span id="L-349"><a href="#L-349"><span class="linenos">349</span></a>            <span class="c1"># 	lambda codes : pd.Series([len(codes) &gt; 0]),</span>
-</span><span id="L-350"><a href="#L-350"><span class="linenos">350</span></a>            <span class="c1"># 	lambda codes : raise_exception(Exception(&quot;Code List is Empty&quot;))</span>
-</span><span id="L-351"><a href="#L-351"><span class="linenos">351</span></a>            <span class="c1"># ),</span>
-</span><span id="L-352"><a href="#L-352"><span class="linenos">352</span></a>            <span class="p">(</span>
-</span><span id="L-353"><a href="#L-353"><span class="linenos">353</span></a>                <span class="s2">&quot;Too Short&quot;</span><span class="p">,</span>
-</span><span id="L-354"><a href="#L-354"><span class="linenos">354</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="o">~</span><span class="p">(</span><span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">len</span><span class="p">()</span> <span class="o">&lt;</span> <span class="mi">6</span><span class="p">),</span>
-</span><span id="L-355"><a href="#L-355"><span class="linenos">355</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
-</span><span id="L-356"><a href="#L-356"><span class="linenos">356</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
-</span><span id="L-357"><a href="#L-357"><span class="linenos">357</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
-</span><span id="L-358"><a href="#L-358"><span class="linenos">358</span></a>                            <span class="sa">f</span><span class="s2">&quot;QA Too Short&quot;</span><span class="p">,</span>
-</span><span id="L-359"><a href="#L-359"><span class="linenos">359</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
-</span><span id="L-360"><a href="#L-360"><span class="linenos">360</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
-</span><span id="L-361"><a href="#L-361"><span class="linenos">361</span></a>                            <span class="n">mask</span><span class="o">=~</span><span class="p">(</span><span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">len</span><span class="p">()</span> <span class="o">&lt;</span> <span class="mi">6</span><span class="p">),</span>
-</span><span id="L-362"><a href="#L-362"><span class="linenos">362</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
-</span><span id="L-363"><a href="#L-363"><span class="linenos">363</span></a>                        <span class="p">)</span>
-</span><span id="L-364"><a href="#L-364"><span class="linenos">364</span></a>                    <span class="p">)</span>
-</span><span id="L-365"><a href="#L-365"><span class="linenos">365</span></a>                <span class="p">),</span>
-</span><span id="L-366"><a href="#L-366"><span class="linenos">366</span></a>            <span class="p">),</span>
-</span><span id="L-367"><a href="#L-367"><span class="linenos">367</span></a>            <span class="p">(</span>
-</span><span id="L-368"><a href="#L-368"><span class="linenos">368</span></a>                <span class="s2">&quot;Too Long&quot;</span><span class="p">,</span>
-</span><span id="L-369"><a href="#L-369"><span class="linenos">369</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="o">~</span><span class="p">(</span><span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">len</span><span class="p">()</span> <span class="o">&gt;</span> <span class="mi">18</span><span class="p">),</span>
-</span><span id="L-370"><a href="#L-370"><span class="linenos">370</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
-</span><span id="L-371"><a href="#L-371"><span class="linenos">371</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
-</span><span id="L-372"><a href="#L-372"><span class="linenos">372</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
-</span><span id="L-373"><a href="#L-373"><span class="linenos">373</span></a>                            <span class="sa">f</span><span class="s2">&quot;QA Too Long&quot;</span><span class="p">,</span>
-</span><span id="L-374"><a href="#L-374"><span class="linenos">374</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
-</span><span id="L-375"><a href="#L-375"><span class="linenos">375</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
-</span><span id="L-376"><a href="#L-376"><span class="linenos">376</span></a>                            <span class="n">mask</span><span class="o">=~</span><span class="p">(</span><span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">len</span><span class="p">()</span> <span class="o">&gt;</span> <span class="mi">18</span><span class="p">),</span>
-</span><span id="L-377"><a href="#L-377"><span class="linenos">377</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
-</span><span id="L-378"><a href="#L-378"><span class="linenos">378</span></a>                        <span class="p">)</span>
-</span><span id="L-379"><a href="#L-379"><span class="linenos">379</span></a>                    <span class="p">)</span>
-</span><span id="L-380"><a href="#L-380"><span class="linenos">380</span></a>                <span class="p">),</span>
-</span><span id="L-381"><a href="#L-381"><span class="linenos">381</span></a>            <span class="p">),</span>
-</span><span id="L-382"><a href="#L-382"><span class="linenos">382</span></a>            <span class="p">(</span>
-</span><span id="L-383"><a href="#L-383"><span class="linenos">383</span></a>                <span class="s2">&quot;Numeric&quot;</span><span class="p">,</span>
-</span><span id="L-384"><a href="#L-384"><span class="linenos">384</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;[0-9]+$&quot;</span><span class="p">),</span>
-</span><span id="L-385"><a href="#L-385"><span class="linenos">385</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
-</span><span id="L-386"><a href="#L-386"><span class="linenos">386</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
-</span><span id="L-387"><a href="#L-387"><span class="linenos">387</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
-</span><span id="L-388"><a href="#L-388"><span class="linenos">388</span></a>                            <span class="sa">f</span><span class="s2">&quot;QA Numeric&quot;</span><span class="p">,</span>
-</span><span id="L-389"><a href="#L-389"><span class="linenos">389</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
-</span><span id="L-390"><a href="#L-390"><span class="linenos">390</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
-</span><span id="L-391"><a href="#L-391"><span class="linenos">391</span></a>                            <span class="n">mask</span><span class="o">=</span><span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;[0-9]+$&quot;</span><span class="p">),</span>
-</span><span id="L-392"><a href="#L-392"><span class="linenos">392</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
-</span><span id="L-393"><a href="#L-393"><span class="linenos">393</span></a>                        <span class="p">)</span>
-</span><span id="L-394"><a href="#L-394"><span class="linenos">394</span></a>                    <span class="p">)</span>
-</span><span id="L-395"><a href="#L-395"><span class="linenos">395</span></a>                <span class="p">),</span>
-</span><span id="L-396"><a href="#L-396"><span class="linenos">396</span></a>            <span class="p">),</span>
-</span><span id="L-397"><a href="#L-397"><span class="linenos">397</span></a>            <span class="c1"># (</span>
-</span><span id="L-398"><a href="#L-398"><span class="linenos">398</span></a>            <span class="c1"># 	&quot;Is Integer&quot;,</span>
-</span><span id="L-399"><a href="#L-399"><span class="linenos">399</span></a>            <span class="c1"># 	lambda codes : codes.dtype == int,</span>
-</span><span id="L-400"><a href="#L-400"><span class="linenos">400</span></a>            <span class="c1"># 	lambda codes : codes.astype(int) #Convert to integer</span>
-</span><span id="L-401"><a href="#L-401"><span class="linenos">401</span></a>            <span class="c1"># ),</span>
-</span><span id="L-402"><a href="#L-402"><span class="linenos">402</span></a>            <span class="p">(</span>
-</span><span id="L-403"><a href="#L-403"><span class="linenos">403</span></a>                <span class="s2">&quot;In Database&quot;</span><span class="p">,</span>
-</span><span id="L-404"><a href="#L-404"><span class="linenos">404</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">in_database</span><span class="p">(</span><span class="n">codes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">),</span>
-</span><span id="L-405"><a href="#L-405"><span class="linenos">405</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
-</span><span id="L-406"><a href="#L-406"><span class="linenos">406</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
-</span><span id="L-407"><a href="#L-407"><span class="linenos">407</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
-</span><span id="L-408"><a href="#L-408"><span class="linenos">408</span></a>                            <span class="sa">f</span><span class="s2">&quot;QA In Database&quot;</span><span class="p">,</span>
-</span><span id="L-409"><a href="#L-409"><span class="linenos">409</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
-</span><span id="L-410"><a href="#L-410"><span class="linenos">410</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
-</span><span id="L-411"><a href="#L-411"><span class="linenos">411</span></a>                            <span class="n">mask</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">in_database</span><span class="p">(</span><span class="n">codes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">),</span>
-</span><span id="L-412"><a href="#L-412"><span class="linenos">412</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
-</span><span id="L-413"><a href="#L-413"><span class="linenos">413</span></a>                        <span class="p">)</span>
-</span><span id="L-414"><a href="#L-414"><span class="linenos">414</span></a>                    <span class="p">)</span>
-</span><span id="L-415"><a href="#L-415"><span class="linenos">415</span></a>                <span class="p">),</span>
-</span><span id="L-416"><a href="#L-416"><span class="linenos">416</span></a>            <span class="p">),</span>
-</span><span id="L-417"><a href="#L-417"><span class="linenos">417</span></a>        <span class="p">]</span>
-</span><span id="L-418"><a href="#L-418"><span class="linenos">418</span></a>
-</span><span id="L-419"><a href="#L-419"><span class="linenos">419</span></a>
-</span><span id="L-420"><a href="#L-420"><span class="linenos">420</span></a><span class="k">class</span><span class="w"> </span><span class="nc">Opcs4</span><span class="p">(</span><span class="n">Proto</span><span class="p">):</span>
-</span><span id="L-421"><a href="#L-421"><span class="linenos">421</span></a>    <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="L-422"><a href="#L-422"><span class="linenos">422</span></a>        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s2">&quot;opcs4&quot;</span><span class="p">,</span> <span class="n">trud</span><span class="o">.</span><span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;opcs4.parquet&quot;</span><span class="p">)</span>
-</span><span id="L-423"><a href="#L-423"><span class="linenos">423</span></a>
-</span><span id="L-424"><a href="#L-424"><span class="linenos">424</span></a>        <span class="bp">self</span><span class="o">.</span><span class="n">checks</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="L-425"><a href="#L-425"><span class="linenos">425</span></a>            <span class="p">(</span>
-</span><span id="L-426"><a href="#L-426"><span class="linenos">426</span></a>                <span class="s2">&quot;Not Empty&quot;</span><span class="p">,</span>
-</span><span id="L-427"><a href="#L-427"><span class="linenos">427</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">Series</span><span class="p">([</span><span class="nb">len</span><span class="p">(</span><span class="n">codes</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">]),</span>
-</span><span id="L-428"><a href="#L-428"><span class="linenos">428</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
-</span><span id="L-429"><a href="#L-429"><span class="linenos">429</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
-</span><span id="L-430"><a href="#L-430"><span class="linenos">430</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
-</span><span id="L-431"><a href="#L-431"><span class="linenos">431</span></a>                            <span class="sa">f</span><span class="s2">&quot;Code list is empty&quot;</span><span class="p">,</span>
-</span><span id="L-432"><a href="#L-432"><span class="linenos">432</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
-</span><span id="L-433"><a href="#L-433"><span class="linenos">433</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
-</span><span id="L-434"><a href="#L-434"><span class="linenos">434</span></a>                            <span class="n">mask</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-</span><span id="L-435"><a href="#L-435"><span class="linenos">435</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
-</span><span id="L-436"><a href="#L-436"><span class="linenos">436</span></a>                        <span class="p">)</span>
-</span><span id="L-437"><a href="#L-437"><span class="linenos">437</span></a>                    <span class="p">)</span>
-</span><span id="L-438"><a href="#L-438"><span class="linenos">438</span></a>                <span class="p">),</span>
-</span><span id="L-439"><a href="#L-439"><span class="linenos">439</span></a>            <span class="p">),</span>
-</span><span id="L-440"><a href="#L-440"><span class="linenos">440</span></a>            <span class="p">(</span>
-</span><span id="L-441"><a href="#L-441"><span class="linenos">441</span></a>                <span class="s2">&quot;In Database&quot;</span><span class="p">,</span>
-</span><span id="L-442"><a href="#L-442"><span class="linenos">442</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">in_database</span><span class="p">(</span><span class="n">codes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">),</span>
-</span><span id="L-443"><a href="#L-443"><span class="linenos">443</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
-</span><span id="L-444"><a href="#L-444"><span class="linenos">444</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
-</span><span id="L-445"><a href="#L-445"><span class="linenos">445</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
-</span><span id="L-446"><a href="#L-446"><span class="linenos">446</span></a>                            <span class="sa">f</span><span class="s2">&quot;QA In Database&quot;</span><span class="p">,</span>
-</span><span id="L-447"><a href="#L-447"><span class="linenos">447</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
-</span><span id="L-448"><a href="#L-448"><span class="linenos">448</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
-</span><span id="L-449"><a href="#L-449"><span class="linenos">449</span></a>                            <span class="n">mask</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">in_database</span><span class="p">(</span><span class="n">codes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">),</span>
-</span><span id="L-450"><a href="#L-450"><span class="linenos">450</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
-</span><span id="L-451"><a href="#L-451"><span class="linenos">451</span></a>                        <span class="p">)</span>
-</span><span id="L-452"><a href="#L-452"><span class="linenos">452</span></a>                    <span class="p">)</span>
-</span><span id="L-453"><a href="#L-453"><span class="linenos">453</span></a>                <span class="p">),</span>
-</span><span id="L-454"><a href="#L-454"><span class="linenos">454</span></a>            <span class="p">),</span>
-</span><span id="L-455"><a href="#L-455"><span class="linenos">455</span></a>        <span class="p">]</span>
-</span><span id="L-456"><a href="#L-456"><span class="linenos">456</span></a>
-</span><span id="L-457"><a href="#L-457"><span class="linenos">457</span></a>
-</span><span id="L-458"><a href="#L-458"><span class="linenos">458</span></a><span class="k">class</span><span class="w"> </span><span class="nc">Atc</span><span class="p">(</span><span class="n">Proto</span><span class="p">):</span>
-</span><span id="L-459"><a href="#L-459"><span class="linenos">459</span></a>    <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="L-460"><a href="#L-460"><span class="linenos">460</span></a>        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s2">&quot;atc&quot;</span><span class="p">,</span> <span class="n">trud_codes_path</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
-</span><span id="L-461"><a href="#L-461"><span class="linenos">461</span></a>        <span class="bp">self</span><span class="o">.</span><span class="n">checks</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="L-462"><a href="#L-462"><span class="linenos">462</span></a>            <span class="p">(</span>
-</span><span id="L-463"><a href="#L-463"><span class="linenos">463</span></a>                <span class="s2">&quot;Not Empty&quot;</span><span class="p">,</span>
-</span><span id="L-464"><a href="#L-464"><span class="linenos">464</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">Series</span><span class="p">([</span><span class="nb">len</span><span class="p">(</span><span class="n">codes</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">]),</span>
-</span><span id="L-465"><a href="#L-465"><span class="linenos">465</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
-</span><span id="L-466"><a href="#L-466"><span class="linenos">466</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
-</span><span id="L-467"><a href="#L-467"><span class="linenos">467</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
-</span><span id="L-468"><a href="#L-468"><span class="linenos">468</span></a>                            <span class="sa">f</span><span class="s2">&quot;Code list is empty&quot;</span><span class="p">,</span>
-</span><span id="L-469"><a href="#L-469"><span class="linenos">469</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
-</span><span id="L-470"><a href="#L-470"><span class="linenos">470</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
-</span><span id="L-471"><a href="#L-471"><span class="linenos">471</span></a>                            <span class="n">mask</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-</span><span id="L-472"><a href="#L-472"><span class="linenos">472</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
-</span><span id="L-473"><a href="#L-473"><span class="linenos">473</span></a>                        <span class="p">)</span>
-</span><span id="L-474"><a href="#L-474"><span class="linenos">474</span></a>                    <span class="p">)</span>
-</span><span id="L-475"><a href="#L-475"><span class="linenos">475</span></a>                <span class="p">),</span>
-</span><span id="L-476"><a href="#L-476"><span class="linenos">476</span></a>            <span class="p">),</span>
-</span><span id="L-477"><a href="#L-477"><span class="linenos">477</span></a>            <span class="p">(</span>
-</span><span id="L-478"><a href="#L-478"><span class="linenos">478</span></a>                <span class="s2">&quot;Alphanumeric Capital&quot;</span><span class="p">,</span>
-</span><span id="L-479"><a href="#L-479"><span class="linenos">479</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;^[A-Z0-9]+$&quot;</span><span class="p">),</span>
-</span><span id="L-480"><a href="#L-480"><span class="linenos">480</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
-</span><span id="L-481"><a href="#L-481"><span class="linenos">481</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
-</span><span id="L-482"><a href="#L-482"><span class="linenos">482</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
-</span><span id="L-483"><a href="#L-483"><span class="linenos">483</span></a>                            <span class="sa">f</span><span class="s2">&quot;QA Alphanumeric Capital&quot;</span><span class="p">,</span>
-</span><span id="L-484"><a href="#L-484"><span class="linenos">484</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
-</span><span id="L-485"><a href="#L-485"><span class="linenos">485</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
-</span><span id="L-486"><a href="#L-486"><span class="linenos">486</span></a>                            <span class="n">mask</span><span class="o">=</span><span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;^[A-Z0-9]+$&quot;</span><span class="p">),</span>
-</span><span id="L-487"><a href="#L-487"><span class="linenos">487</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
-</span><span id="L-488"><a href="#L-488"><span class="linenos">488</span></a>                        <span class="p">)</span>
-</span><span id="L-489"><a href="#L-489"><span class="linenos">489</span></a>                    <span class="p">)</span>
-</span><span id="L-490"><a href="#L-490"><span class="linenos">490</span></a>                <span class="p">),</span>
-</span><span id="L-491"><a href="#L-491"><span class="linenos">491</span></a>            <span class="p">),</span>
-</span><span id="L-492"><a href="#L-492"><span class="linenos">492</span></a>        <span class="p">]</span>
-</span><span id="L-493"><a href="#L-493"><span class="linenos">493</span></a>
-</span><span id="L-494"><a href="#L-494"><span class="linenos">494</span></a>
-</span><span id="L-495"><a href="#L-495"><span class="linenos">495</span></a><span class="k">class</span><span class="w"> </span><span class="nc">Med</span><span class="p">(</span><span class="n">Proto</span><span class="p">):</span>
-</span><span id="L-496"><a href="#L-496"><span class="linenos">496</span></a>    <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="L-497"><a href="#L-497"><span class="linenos">497</span></a>        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s2">&quot;med&quot;</span><span class="p">,</span> <span class="n">trud_codes_path</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
-</span><span id="L-498"><a href="#L-498"><span class="linenos">498</span></a>        <span class="bp">self</span><span class="o">.</span><span class="n">checks</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="L-499"><a href="#L-499"><span class="linenos">499</span></a>            <span class="p">(</span>
-</span><span id="L-500"><a href="#L-500"><span class="linenos">500</span></a>                <span class="s2">&quot;Not Empty&quot;</span><span class="p">,</span>
-</span><span id="L-501"><a href="#L-501"><span class="linenos">501</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">Series</span><span class="p">([</span><span class="nb">len</span><span class="p">(</span><span class="n">codes</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">]),</span>
-</span><span id="L-502"><a href="#L-502"><span class="linenos">502</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
-</span><span id="L-503"><a href="#L-503"><span class="linenos">503</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
-</span><span id="L-504"><a href="#L-504"><span class="linenos">504</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
-</span><span id="L-505"><a href="#L-505"><span class="linenos">505</span></a>                            <span class="sa">f</span><span class="s2">&quot;Code list is empty&quot;</span><span class="p">,</span>
-</span><span id="L-506"><a href="#L-506"><span class="linenos">506</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
-</span><span id="L-507"><a href="#L-507"><span class="linenos">507</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
-</span><span id="L-508"><a href="#L-508"><span class="linenos">508</span></a>                            <span class="n">mask</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-</span><span id="L-509"><a href="#L-509"><span class="linenos">509</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
-</span><span id="L-510"><a href="#L-510"><span class="linenos">510</span></a>                        <span class="p">)</span>
-</span><span id="L-511"><a href="#L-511"><span class="linenos">511</span></a>                    <span class="p">)</span>
-</span><span id="L-512"><a href="#L-512"><span class="linenos">512</span></a>                <span class="p">),</span>
-</span><span id="L-513"><a href="#L-513"><span class="linenos">513</span></a>            <span class="p">)</span>
-</span><span id="L-514"><a href="#L-514"><span class="linenos">514</span></a>        <span class="p">]</span>
-</span><span id="L-515"><a href="#L-515"><span class="linenos">515</span></a>
-</span><span id="L-516"><a href="#L-516"><span class="linenos">516</span></a>
-</span><span id="L-517"><a href="#L-517"><span class="linenos">517</span></a><span class="k">class</span><span class="w"> </span><span class="nc">Cprd</span><span class="p">(</span><span class="n">Proto</span><span class="p">):</span>
-</span><span id="L-518"><a href="#L-518"><span class="linenos">518</span></a>    <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="L-519"><a href="#L-519"><span class="linenos">519</span></a>        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s2">&quot;cprd&quot;</span><span class="p">,</span> <span class="n">trud_codes_path</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
-</span><span id="L-520"><a href="#L-520"><span class="linenos">520</span></a>        <span class="bp">self</span><span class="o">.</span><span class="n">checks</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="L-521"><a href="#L-521"><span class="linenos">521</span></a>            <span class="p">(</span>
-</span><span id="L-522"><a href="#L-522"><span class="linenos">522</span></a>                <span class="s2">&quot;Not Empty&quot;</span><span class="p">,</span>
-</span><span id="L-523"><a href="#L-523"><span class="linenos">523</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">Series</span><span class="p">([</span><span class="nb">len</span><span class="p">(</span><span class="n">codes</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">]),</span>
-</span><span id="L-524"><a href="#L-524"><span class="linenos">524</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
-</span><span id="L-525"><a href="#L-525"><span class="linenos">525</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
-</span><span id="L-526"><a href="#L-526"><span class="linenos">526</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
-</span><span id="L-527"><a href="#L-527"><span class="linenos">527</span></a>                            <span class="sa">f</span><span class="s2">&quot;Code list is empty&quot;</span><span class="p">,</span>
-</span><span id="L-528"><a href="#L-528"><span class="linenos">528</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
-</span><span id="L-529"><a href="#L-529"><span class="linenos">529</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
-</span><span id="L-530"><a href="#L-530"><span class="linenos">530</span></a>                            <span class="n">mask</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-</span><span id="L-531"><a href="#L-531"><span class="linenos">531</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
-</span><span id="L-532"><a href="#L-532"><span class="linenos">532</span></a>                        <span class="p">)</span>
-</span><span id="L-533"><a href="#L-533"><span class="linenos">533</span></a>                    <span class="p">)</span>
-</span><span id="L-534"><a href="#L-534"><span class="linenos">534</span></a>                <span class="p">),</span>
-</span><span id="L-535"><a href="#L-535"><span class="linenos">535</span></a>            <span class="p">)</span>
-</span><span id="L-536"><a href="#L-536"><span class="linenos">536</span></a>        <span class="p">]</span>
-</span><span id="L-537"><a href="#L-537"><span class="linenos">537</span></a>
-</span><span id="L-538"><a href="#L-538"><span class="linenos">538</span></a>
-</span><span id="L-539"><a href="#L-539"><span class="linenos">539</span></a><span class="k">class</span><span class="w"> </span><span class="nc">CodeTypeParser</span><span class="p">:</span>
-</span><span id="L-540"><a href="#L-540"><span class="linenos">540</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;A class used in InvalidCodesException to report an error if a code parser check fails&quot;&quot;&quot;</span>
-</span><span id="L-541"><a href="#L-541"><span class="linenos">541</span></a>
-</span><span id="L-542"><a href="#L-542"><span class="linenos">542</span></a>    <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">trud_processed_dir</span><span class="p">:</span> <span class="n">Path</span> <span class="o">=</span> <span class="n">trud</span><span class="o">.</span><span class="n">PROCESSED_PATH</span><span class="p">):</span>
-</span><span id="L-543"><a href="#L-543"><span class="linenos">543</span></a>        <span class="k">if</span> <span class="ow">not</span> <span class="n">trud_processed_dir</span><span class="o">.</span><span class="n">exists</span><span class="p">()</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">trud_processed_dir</span><span class="o">.</span><span class="n">is_dir</span><span class="p">():</span>
-</span><span id="L-544"><a href="#L-544"><span class="linenos">544</span></a>            <span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span>
-</span><span id="L-545"><a href="#L-545"><span class="linenos">545</span></a>                <span class="sa">f</span><span class="s2">&quot;Cannot initialise parsers as the TRUD processed directory </span><span class="si">{</span><span class="n">trud_processed_dir</span><span class="si">}</span><span class="s2"> does not exist, please check that TRUD has been installed: acmc trud install&quot;</span>
-</span><span id="L-546"><a href="#L-546"><span class="linenos">546</span></a>            <span class="p">)</span>
+</span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a>                <span class="c1"># check codes &gt; 5 characters, If too long, truncates them to 5 characters</span>
+</span><span id="L-154"><a href="#L-154"><span class="linenos">154</span></a>                <span class="s2">&quot;Too Long&quot;</span><span class="p">,</span>
+</span><span id="L-155"><a href="#L-155"><span class="linenos">155</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="o">~</span><span class="p">(</span><span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">len</span><span class="p">()</span> <span class="o">&gt;</span> <span class="mi">5</span><span class="p">),</span>
+</span><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="p">[:</span><span class="mi">5</span><span class="p">],</span>
+</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a>            <span class="p">),</span>
+</span><span id="L-158"><a href="#L-158"><span class="linenos">158</span></a>            <span class="p">(</span>
+</span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a>                <span class="c1"># checks codes contain numbers, or dots (.), if not logs invalid code error</span>
+</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a>                <span class="s2">&quot;Alphanumeric Dot&quot;</span><span class="p">,</span>
+</span><span id="L-161"><a href="#L-161"><span class="linenos">161</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;^[a-zA-Z0-9.]+$&quot;</span><span class="p">),</span>
+</span><span id="L-162"><a href="#L-162"><span class="linenos">162</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
+</span><span id="L-163"><a href="#L-163"><span class="linenos">163</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
+</span><span id="L-164"><a href="#L-164"><span class="linenos">164</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
+</span><span id="L-165"><a href="#L-165"><span class="linenos">165</span></a>                            <span class="sa">f</span><span class="s2">&quot;Illegal code format, not alphanumeric dot&quot;</span><span class="p">,</span>
+</span><span id="L-166"><a href="#L-166"><span class="linenos">166</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
+</span><span id="L-167"><a href="#L-167"><span class="linenos">167</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
+</span><span id="L-168"><a href="#L-168"><span class="linenos">168</span></a>                            <span class="n">mask</span><span class="o">=</span><span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;^[a-zA-Z0-9.]+$&quot;</span><span class="p">),</span>
+</span><span id="L-169"><a href="#L-169"><span class="linenos">169</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
+</span><span id="L-170"><a href="#L-170"><span class="linenos">170</span></a>                        <span class="p">)</span>
+</span><span id="L-171"><a href="#L-171"><span class="linenos">171</span></a>                    <span class="p">)</span>
+</span><span id="L-172"><a href="#L-172"><span class="linenos">172</span></a>                <span class="p">),</span>
+</span><span id="L-173"><a href="#L-173"><span class="linenos">173</span></a>            <span class="p">),</span>
+</span><span id="L-174"><a href="#L-174"><span class="linenos">174</span></a>            <span class="p">(</span>
+</span><span id="L-175"><a href="#L-175"><span class="linenos">175</span></a>                <span class="c1"># checks code exists in self.db (the Read2 dataset). If missing log invalid codes.</span>
+</span><span id="L-176"><a href="#L-176"><span class="linenos">176</span></a>                <span class="s2">&quot;In Database&quot;</span><span class="p">,</span>
+</span><span id="L-177"><a href="#L-177"><span class="linenos">177</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">in_database</span><span class="p">(</span><span class="n">codes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">),</span>
+</span><span id="L-178"><a href="#L-178"><span class="linenos">178</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
+</span><span id="L-179"><a href="#L-179"><span class="linenos">179</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
+</span><span id="L-180"><a href="#L-180"><span class="linenos">180</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
+</span><span id="L-181"><a href="#L-181"><span class="linenos">181</span></a>                            <span class="sa">f</span><span class="s2">&quot;Codes do not exist in database&quot;</span><span class="p">,</span>
+</span><span id="L-182"><a href="#L-182"><span class="linenos">182</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
+</span><span id="L-183"><a href="#L-183"><span class="linenos">183</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
+</span><span id="L-184"><a href="#L-184"><span class="linenos">184</span></a>                            <span class="n">mask</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">in_database</span><span class="p">(</span><span class="n">codes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">),</span>
+</span><span id="L-185"><a href="#L-185"><span class="linenos">185</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
+</span><span id="L-186"><a href="#L-186"><span class="linenos">186</span></a>                        <span class="p">)</span>
+</span><span id="L-187"><a href="#L-187"><span class="linenos">187</span></a>                    <span class="p">)</span>
+</span><span id="L-188"><a href="#L-188"><span class="linenos">188</span></a>                <span class="p">),</span>
+</span><span id="L-189"><a href="#L-189"><span class="linenos">189</span></a>            <span class="p">),</span>
+</span><span id="L-190"><a href="#L-190"><span class="linenos">190</span></a>        <span class="p">]</span>
+</span><span id="L-191"><a href="#L-191"><span class="linenos">191</span></a>
+</span><span id="L-192"><a href="#L-192"><span class="linenos">192</span></a>
+</span><span id="L-193"><a href="#L-193"><span class="linenos">193</span></a><span class="k">class</span><span class="w"> </span><span class="nc">Read3</span><span class="p">(</span><span class="n">Proto</span><span class="p">):</span>
+</span><span id="L-194"><a href="#L-194"><span class="linenos">194</span></a>    <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="L-195"><a href="#L-195"><span class="linenos">195</span></a>        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s2">&quot;Read3&quot;</span><span class="p">,</span> <span class="n">trud</span><span class="o">.</span><span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;read3.parquet&quot;</span><span class="p">)</span>
+</span><span id="L-196"><a href="#L-196"><span class="linenos">196</span></a>
+</span><span id="L-197"><a href="#L-197"><span class="linenos">197</span></a>        <span class="bp">self</span><span class="o">.</span><span class="n">checks</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="L-198"><a href="#L-198"><span class="linenos">198</span></a>            <span class="p">(</span>
+</span><span id="L-199"><a href="#L-199"><span class="linenos">199</span></a>                <span class="s2">&quot;Not Empty&quot;</span><span class="p">,</span>
+</span><span id="L-200"><a href="#L-200"><span class="linenos">200</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">Series</span><span class="p">([</span><span class="nb">len</span><span class="p">(</span><span class="n">codes</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">]),</span>
+</span><span id="L-201"><a href="#L-201"><span class="linenos">201</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
+</span><span id="L-202"><a href="#L-202"><span class="linenos">202</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
+</span><span id="L-203"><a href="#L-203"><span class="linenos">203</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
+</span><span id="L-204"><a href="#L-204"><span class="linenos">204</span></a>                            <span class="sa">f</span><span class="s2">&quot;Code list is empty&quot;</span><span class="p">,</span>
+</span><span id="L-205"><a href="#L-205"><span class="linenos">205</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
+</span><span id="L-206"><a href="#L-206"><span class="linenos">206</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
+</span><span id="L-207"><a href="#L-207"><span class="linenos">207</span></a>                            <span class="n">mask</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
+</span><span id="L-208"><a href="#L-208"><span class="linenos">208</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
+</span><span id="L-209"><a href="#L-209"><span class="linenos">209</span></a>                        <span class="p">)</span>
+</span><span id="L-210"><a href="#L-210"><span class="linenos">210</span></a>                    <span class="p">)</span>
+</span><span id="L-211"><a href="#L-211"><span class="linenos">211</span></a>                <span class="p">),</span>
+</span><span id="L-212"><a href="#L-212"><span class="linenos">212</span></a>            <span class="p">),</span>
+</span><span id="L-213"><a href="#L-213"><span class="linenos">213</span></a>            <span class="p">(</span>
+</span><span id="L-214"><a href="#L-214"><span class="linenos">214</span></a>                <span class="s2">&quot;Too Short&quot;</span><span class="p">,</span>
+</span><span id="L-215"><a href="#L-215"><span class="linenos">215</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="o">~</span><span class="p">(</span><span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">len</span><span class="p">()</span> <span class="o">&lt;</span> <span class="mi">5</span><span class="p">),</span>
+</span><span id="L-216"><a href="#L-216"><span class="linenos">216</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">pad</span><span class="p">(</span>
+</span><span id="L-217"><a href="#L-217"><span class="linenos">217</span></a>                    <span class="n">width</span><span class="o">=</span><span class="mi">5</span><span class="p">,</span> <span class="n">side</span><span class="o">=</span><span class="s2">&quot;right&quot;</span><span class="p">,</span> <span class="n">fillchar</span><span class="o">=</span><span class="s2">&quot;.&quot;</span>
+</span><span id="L-218"><a href="#L-218"><span class="linenos">218</span></a>                <span class="p">),</span>
+</span><span id="L-219"><a href="#L-219"><span class="linenos">219</span></a>            <span class="p">),</span>
+</span><span id="L-220"><a href="#L-220"><span class="linenos">220</span></a>            <span class="p">(</span>
+</span><span id="L-221"><a href="#L-221"><span class="linenos">221</span></a>                <span class="s2">&quot;Too Long&quot;</span><span class="p">,</span>
+</span><span id="L-222"><a href="#L-222"><span class="linenos">222</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="o">~</span><span class="p">(</span><span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">len</span><span class="p">()</span> <span class="o">&gt;</span> <span class="mi">5</span><span class="p">),</span>
+</span><span id="L-223"><a href="#L-223"><span class="linenos">223</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="p">[:</span><span class="mi">5</span><span class="p">],</span>
+</span><span id="L-224"><a href="#L-224"><span class="linenos">224</span></a>            <span class="p">),</span>
+</span><span id="L-225"><a href="#L-225"><span class="linenos">225</span></a>            <span class="p">(</span>
+</span><span id="L-226"><a href="#L-226"><span class="linenos">226</span></a>                <span class="s2">&quot;Alphanumeric Dot&quot;</span><span class="p">,</span>
+</span><span id="L-227"><a href="#L-227"><span class="linenos">227</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;^[a-zA-Z0-9.]+$&quot;</span><span class="p">),</span>
+</span><span id="L-228"><a href="#L-228"><span class="linenos">228</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
+</span><span id="L-229"><a href="#L-229"><span class="linenos">229</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
+</span><span id="L-230"><a href="#L-230"><span class="linenos">230</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
+</span><span id="L-231"><a href="#L-231"><span class="linenos">231</span></a>                            <span class="sa">f</span><span class="s2">&quot;QA Alphanumeric Dot&quot;</span><span class="p">,</span>
+</span><span id="L-232"><a href="#L-232"><span class="linenos">232</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
+</span><span id="L-233"><a href="#L-233"><span class="linenos">233</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
+</span><span id="L-234"><a href="#L-234"><span class="linenos">234</span></a>                            <span class="n">check_regex</span><span class="o">=</span><span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;^[a-zA-Z0-9.]+$&quot;</span><span class="p">),</span>
+</span><span id="L-235"><a href="#L-235"><span class="linenos">235</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
+</span><span id="L-236"><a href="#L-236"><span class="linenos">236</span></a>                        <span class="p">)</span>
+</span><span id="L-237"><a href="#L-237"><span class="linenos">237</span></a>                    <span class="p">)</span>
+</span><span id="L-238"><a href="#L-238"><span class="linenos">238</span></a>                <span class="p">),</span>
+</span><span id="L-239"><a href="#L-239"><span class="linenos">239</span></a>            <span class="p">),</span>
+</span><span id="L-240"><a href="#L-240"><span class="linenos">240</span></a>            <span class="p">(</span>
+</span><span id="L-241"><a href="#L-241"><span class="linenos">241</span></a>                <span class="s2">&quot;In Database&quot;</span><span class="p">,</span>
+</span><span id="L-242"><a href="#L-242"><span class="linenos">242</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">in_database</span><span class="p">(</span><span class="n">codes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">),</span>
+</span><span id="L-243"><a href="#L-243"><span class="linenos">243</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
+</span><span id="L-244"><a href="#L-244"><span class="linenos">244</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
+</span><span id="L-245"><a href="#L-245"><span class="linenos">245</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
+</span><span id="L-246"><a href="#L-246"><span class="linenos">246</span></a>                            <span class="sa">f</span><span class="s2">&quot;QA In Database&quot;</span><span class="p">,</span>
+</span><span id="L-247"><a href="#L-247"><span class="linenos">247</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
+</span><span id="L-248"><a href="#L-248"><span class="linenos">248</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
+</span><span id="L-249"><a href="#L-249"><span class="linenos">249</span></a>                            <span class="n">check_regex</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">in_database</span><span class="p">(</span><span class="n">codes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">),</span>
+</span><span id="L-250"><a href="#L-250"><span class="linenos">250</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
+</span><span id="L-251"><a href="#L-251"><span class="linenos">251</span></a>                        <span class="p">)</span>
+</span><span id="L-252"><a href="#L-252"><span class="linenos">252</span></a>                    <span class="p">)</span>
+</span><span id="L-253"><a href="#L-253"><span class="linenos">253</span></a>                <span class="p">),</span>
+</span><span id="L-254"><a href="#L-254"><span class="linenos">254</span></a>            <span class="p">),</span>
+</span><span id="L-255"><a href="#L-255"><span class="linenos">255</span></a>        <span class="p">]</span>
+</span><span id="L-256"><a href="#L-256"><span class="linenos">256</span></a>
+</span><span id="L-257"><a href="#L-257"><span class="linenos">257</span></a>
+</span><span id="L-258"><a href="#L-258"><span class="linenos">258</span></a><span class="k">class</span><span class="w"> </span><span class="nc">Icd10</span><span class="p">(</span><span class="n">Proto</span><span class="p">):</span>
+</span><span id="L-259"><a href="#L-259"><span class="linenos">259</span></a>    <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="L-260"><a href="#L-260"><span class="linenos">260</span></a>        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s2">&quot;icd10&quot;</span><span class="p">,</span> <span class="n">trud</span><span class="o">.</span><span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;icd10.parquet&quot;</span><span class="p">)</span>
+</span><span id="L-261"><a href="#L-261"><span class="linenos">261</span></a>
+</span><span id="L-262"><a href="#L-262"><span class="linenos">262</span></a>        <span class="bp">self</span><span class="o">.</span><span class="n">checks</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="L-263"><a href="#L-263"><span class="linenos">263</span></a>            <span class="p">(</span>
+</span><span id="L-264"><a href="#L-264"><span class="linenos">264</span></a>                <span class="s2">&quot;Not Empty&quot;</span><span class="p">,</span>
+</span><span id="L-265"><a href="#L-265"><span class="linenos">265</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">Series</span><span class="p">([</span><span class="nb">len</span><span class="p">(</span><span class="n">codes</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">]),</span>
+</span><span id="L-266"><a href="#L-266"><span class="linenos">266</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
+</span><span id="L-267"><a href="#L-267"><span class="linenos">267</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
+</span><span id="L-268"><a href="#L-268"><span class="linenos">268</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
+</span><span id="L-269"><a href="#L-269"><span class="linenos">269</span></a>                            <span class="sa">f</span><span class="s2">&quot;Code list is empty </span><span class="si">{</span><span class="n">codes_file</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="L-270"><a href="#L-270"><span class="linenos">270</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
+</span><span id="L-271"><a href="#L-271"><span class="linenos">271</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
+</span><span id="L-272"><a href="#L-272"><span class="linenos">272</span></a>                            <span class="n">mask</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
+</span><span id="L-273"><a href="#L-273"><span class="linenos">273</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
+</span><span id="L-274"><a href="#L-274"><span class="linenos">274</span></a>                        <span class="p">)</span>
+</span><span id="L-275"><a href="#L-275"><span class="linenos">275</span></a>                    <span class="p">)</span>
+</span><span id="L-276"><a href="#L-276"><span class="linenos">276</span></a>                <span class="p">),</span>
+</span><span id="L-277"><a href="#L-277"><span class="linenos">277</span></a>            <span class="p">),</span>
+</span><span id="L-278"><a href="#L-278"><span class="linenos">278</span></a>            <span class="p">(</span>
+</span><span id="L-279"><a href="#L-279"><span class="linenos">279</span></a>                <span class="s2">&quot;Too Short&quot;</span><span class="p">,</span>
+</span><span id="L-280"><a href="#L-280"><span class="linenos">280</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="o">~</span><span class="p">(</span><span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">len</span><span class="p">()</span> <span class="o">&lt;</span> <span class="mi">3</span><span class="p">),</span>
+</span><span id="L-281"><a href="#L-281"><span class="linenos">281</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
+</span><span id="L-282"><a href="#L-282"><span class="linenos">282</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
+</span><span id="L-283"><a href="#L-283"><span class="linenos">283</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
+</span><span id="L-284"><a href="#L-284"><span class="linenos">284</span></a>                            <span class="sa">f</span><span class="s2">&quot;QA Too Short&quot;</span><span class="p">,</span>
+</span><span id="L-285"><a href="#L-285"><span class="linenos">285</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
+</span><span id="L-286"><a href="#L-286"><span class="linenos">286</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
+</span><span id="L-287"><a href="#L-287"><span class="linenos">287</span></a>                            <span class="n">mask</span><span class="o">=~</span><span class="p">(</span><span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">len</span><span class="p">()</span> <span class="o">&lt;</span> <span class="mi">3</span><span class="p">),</span>
+</span><span id="L-288"><a href="#L-288"><span class="linenos">288</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
+</span><span id="L-289"><a href="#L-289"><span class="linenos">289</span></a>                        <span class="p">)</span>
+</span><span id="L-290"><a href="#L-290"><span class="linenos">290</span></a>                    <span class="p">)</span>
+</span><span id="L-291"><a href="#L-291"><span class="linenos">291</span></a>                <span class="p">),</span>
+</span><span id="L-292"><a href="#L-292"><span class="linenos">292</span></a>            <span class="p">),</span>
+</span><span id="L-293"><a href="#L-293"><span class="linenos">293</span></a>            <span class="p">(</span>
+</span><span id="L-294"><a href="#L-294"><span class="linenos">294</span></a>                <span class="s2">&quot;Has Dot&quot;</span><span class="p">,</span>
+</span><span id="L-295"><a href="#L-295"><span class="linenos">295</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="o">~</span><span class="p">(</span><span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;.*\..*&quot;</span><span class="p">)),</span>  <span class="c1"># check if contains dot</span>
+</span><span id="L-296"><a href="#L-296"><span class="linenos">296</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span>
+</span><span id="L-297"><a href="#L-297"><span class="linenos">297</span></a>                    <span class="s2">&quot;.&quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span>
+</span><span id="L-298"><a href="#L-298"><span class="linenos">298</span></a>                <span class="p">),</span>  <span class="c1"># delete any dots in string</span>
+</span><span id="L-299"><a href="#L-299"><span class="linenos">299</span></a>                <span class="c1"># lambda codes : codes.str.split(&#39;\.&#39;).apply(lambda ls: ls[0]) #only get part before dot</span>
+</span><span id="L-300"><a href="#L-300"><span class="linenos">300</span></a>            <span class="p">),</span>
+</span><span id="L-301"><a href="#L-301"><span class="linenos">301</span></a>            <span class="p">(</span>
+</span><span id="L-302"><a href="#L-302"><span class="linenos">302</span></a>                <span class="s2">&quot;Alphanumeric Capital&quot;</span><span class="p">,</span>
+</span><span id="L-303"><a href="#L-303"><span class="linenos">303</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;^[A-Z0-9]+$&quot;</span><span class="p">),</span>
+</span><span id="L-304"><a href="#L-304"><span class="linenos">304</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
+</span><span id="L-305"><a href="#L-305"><span class="linenos">305</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
+</span><span id="L-306"><a href="#L-306"><span class="linenos">306</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
+</span><span id="L-307"><a href="#L-307"><span class="linenos">307</span></a>                            <span class="sa">f</span><span class="s2">&quot;QA Alphanumeric Capital&quot;</span><span class="p">,</span>
+</span><span id="L-308"><a href="#L-308"><span class="linenos">308</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
+</span><span id="L-309"><a href="#L-309"><span class="linenos">309</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
+</span><span id="L-310"><a href="#L-310"><span class="linenos">310</span></a>                            <span class="n">mask</span><span class="o">=</span><span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;^[A-Z0-9]+$&quot;</span><span class="p">),</span>
+</span><span id="L-311"><a href="#L-311"><span class="linenos">311</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
+</span><span id="L-312"><a href="#L-312"><span class="linenos">312</span></a>                        <span class="p">)</span>
+</span><span id="L-313"><a href="#L-313"><span class="linenos">313</span></a>                    <span class="p">)</span>
+</span><span id="L-314"><a href="#L-314"><span class="linenos">314</span></a>                <span class="p">),</span>
+</span><span id="L-315"><a href="#L-315"><span class="linenos">315</span></a>            <span class="p">),</span>
+</span><span id="L-316"><a href="#L-316"><span class="linenos">316</span></a>            <span class="p">(</span>
+</span><span id="L-317"><a href="#L-317"><span class="linenos">317</span></a>                <span class="s2">&quot;In Database&quot;</span><span class="p">,</span>
+</span><span id="L-318"><a href="#L-318"><span class="linenos">318</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="o">~</span><span class="p">(</span>
+</span><span id="L-319"><a href="#L-319"><span class="linenos">319</span></a>                    <span class="o">~</span><span class="bp">self</span><span class="o">.</span><span class="n">in_database</span><span class="p">(</span><span class="n">codes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
+</span><span id="L-320"><a href="#L-320"><span class="linenos">320</span></a>                    <span class="o">&amp;</span> <span class="o">~</span><span class="bp">self</span><span class="o">.</span><span class="n">in_database</span><span class="p">(</span><span class="n">codes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_alt&quot;</span><span class="p">)</span>
+</span><span id="L-321"><a href="#L-321"><span class="linenos">321</span></a>                <span class="p">),</span>
+</span><span id="L-322"><a href="#L-322"><span class="linenos">322</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
+</span><span id="L-323"><a href="#L-323"><span class="linenos">323</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
+</span><span id="L-324"><a href="#L-324"><span class="linenos">324</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
+</span><span id="L-325"><a href="#L-325"><span class="linenos">325</span></a>                            <span class="sa">f</span><span class="s2">&quot;QA In Database&quot;</span><span class="p">,</span>
+</span><span id="L-326"><a href="#L-326"><span class="linenos">326</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
+</span><span id="L-327"><a href="#L-327"><span class="linenos">327</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
+</span><span id="L-328"><a href="#L-328"><span class="linenos">328</span></a>                            <span class="n">mask</span><span class="o">=~</span><span class="p">(</span>
+</span><span id="L-329"><a href="#L-329"><span class="linenos">329</span></a>                                <span class="o">~</span><span class="bp">self</span><span class="o">.</span><span class="n">in_database</span><span class="p">(</span><span class="n">codes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
+</span><span id="L-330"><a href="#L-330"><span class="linenos">330</span></a>                                <span class="o">&amp;</span> <span class="o">~</span><span class="bp">self</span><span class="o">.</span><span class="n">in_database</span><span class="p">(</span><span class="n">codes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_alt&quot;</span><span class="p">)</span>
+</span><span id="L-331"><a href="#L-331"><span class="linenos">331</span></a>                            <span class="p">),</span>
+</span><span id="L-332"><a href="#L-332"><span class="linenos">332</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
+</span><span id="L-333"><a href="#L-333"><span class="linenos">333</span></a>                        <span class="p">)</span>
+</span><span id="L-334"><a href="#L-334"><span class="linenos">334</span></a>                    <span class="p">)</span>
+</span><span id="L-335"><a href="#L-335"><span class="linenos">335</span></a>                <span class="p">),</span>
+</span><span id="L-336"><a href="#L-336"><span class="linenos">336</span></a>            <span class="p">),</span>
+</span><span id="L-337"><a href="#L-337"><span class="linenos">337</span></a>            <span class="c1"># 			(</span>
+</span><span id="L-338"><a href="#L-338"><span class="linenos">338</span></a>            <span class="c1"># 				&quot;ICD10 Regex&quot;,</span>
+</span><span id="L-339"><a href="#L-339"><span class="linenos">339</span></a>            <span class="c1"># 				lambda codes : codes.str.match(&quot;[a-zA-Z][0-9][0-9]\.?[a-zA-Z0-9]*$&quot;), #Alpha, Num, Num , Dot?, 4xAlphNum*</span>
+</span><span id="L-340"><a href="#L-340"><span class="linenos">340</span></a>            <span class="c1"># 				lambda codes : lc.log_invalid_code(codes,</span>
+</span><span id="L-341"><a href="#L-341"><span class="linenos">341</span></a>            <span class="c1"># 												codes.str.match(&quot;[a-zA-Z][0-9][0-9]\.?[a-zA-Z0-9]*$&quot;), #Log non-matching rows</span>
+</span><span id="L-342"><a href="#L-342"><span class="linenos">342</span></a>            <span class="c1"># 												code_type=&quot;icd10&quot;,</span>
+</span><span id="L-343"><a href="#L-343"><span class="linenos">343</span></a>            <span class="c1">#</span>
+</span><span id="L-344"><a href="#L-344"><span class="linenos">344</span></a>            <span class="c1"># 			)</span>
+</span><span id="L-345"><a href="#L-345"><span class="linenos">345</span></a>        <span class="p">]</span>
+</span><span id="L-346"><a href="#L-346"><span class="linenos">346</span></a>
+</span><span id="L-347"><a href="#L-347"><span class="linenos">347</span></a>
+</span><span id="L-348"><a href="#L-348"><span class="linenos">348</span></a><span class="k">class</span><span class="w"> </span><span class="nc">Snomed</span><span class="p">(</span><span class="n">Proto</span><span class="p">):</span>
+</span><span id="L-349"><a href="#L-349"><span class="linenos">349</span></a>    <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="L-350"><a href="#L-350"><span class="linenos">350</span></a>        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s2">&quot;snomed&quot;</span><span class="p">,</span> <span class="n">trud</span><span class="o">.</span><span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;snomed.parquet&quot;</span><span class="p">)</span>
+</span><span id="L-351"><a href="#L-351"><span class="linenos">351</span></a>
+</span><span id="L-352"><a href="#L-352"><span class="linenos">352</span></a>        <span class="bp">self</span><span class="o">.</span><span class="n">checks</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="L-353"><a href="#L-353"><span class="linenos">353</span></a>            <span class="c1"># (</span>
+</span><span id="L-354"><a href="#L-354"><span class="linenos">354</span></a>            <span class="c1"># 	&quot;Not Empty&quot;,</span>
+</span><span id="L-355"><a href="#L-355"><span class="linenos">355</span></a>            <span class="c1"># 	lambda codes : pd.Series([len(codes) &gt; 0]),</span>
+</span><span id="L-356"><a href="#L-356"><span class="linenos">356</span></a>            <span class="c1"># 	lambda codes : raise_exception(Exception(&quot;Code List is Empty&quot;))</span>
+</span><span id="L-357"><a href="#L-357"><span class="linenos">357</span></a>            <span class="c1"># ),</span>
+</span><span id="L-358"><a href="#L-358"><span class="linenos">358</span></a>            <span class="p">(</span>
+</span><span id="L-359"><a href="#L-359"><span class="linenos">359</span></a>                <span class="s2">&quot;Too Short&quot;</span><span class="p">,</span>
+</span><span id="L-360"><a href="#L-360"><span class="linenos">360</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="o">~</span><span class="p">(</span><span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">len</span><span class="p">()</span> <span class="o">&lt;</span> <span class="mi">6</span><span class="p">),</span>
+</span><span id="L-361"><a href="#L-361"><span class="linenos">361</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
+</span><span id="L-362"><a href="#L-362"><span class="linenos">362</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
+</span><span id="L-363"><a href="#L-363"><span class="linenos">363</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
+</span><span id="L-364"><a href="#L-364"><span class="linenos">364</span></a>                            <span class="sa">f</span><span class="s2">&quot;QA Too Short&quot;</span><span class="p">,</span>
+</span><span id="L-365"><a href="#L-365"><span class="linenos">365</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
+</span><span id="L-366"><a href="#L-366"><span class="linenos">366</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
+</span><span id="L-367"><a href="#L-367"><span class="linenos">367</span></a>                            <span class="n">mask</span><span class="o">=~</span><span class="p">(</span><span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">len</span><span class="p">()</span> <span class="o">&lt;</span> <span class="mi">6</span><span class="p">),</span>
+</span><span id="L-368"><a href="#L-368"><span class="linenos">368</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
+</span><span id="L-369"><a href="#L-369"><span class="linenos">369</span></a>                        <span class="p">)</span>
+</span><span id="L-370"><a href="#L-370"><span class="linenos">370</span></a>                    <span class="p">)</span>
+</span><span id="L-371"><a href="#L-371"><span class="linenos">371</span></a>                <span class="p">),</span>
+</span><span id="L-372"><a href="#L-372"><span class="linenos">372</span></a>            <span class="p">),</span>
+</span><span id="L-373"><a href="#L-373"><span class="linenos">373</span></a>            <span class="p">(</span>
+</span><span id="L-374"><a href="#L-374"><span class="linenos">374</span></a>                <span class="s2">&quot;Too Long&quot;</span><span class="p">,</span>
+</span><span id="L-375"><a href="#L-375"><span class="linenos">375</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="o">~</span><span class="p">(</span><span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">len</span><span class="p">()</span> <span class="o">&gt;</span> <span class="mi">18</span><span class="p">),</span>
+</span><span id="L-376"><a href="#L-376"><span class="linenos">376</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
+</span><span id="L-377"><a href="#L-377"><span class="linenos">377</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
+</span><span id="L-378"><a href="#L-378"><span class="linenos">378</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
+</span><span id="L-379"><a href="#L-379"><span class="linenos">379</span></a>                            <span class="sa">f</span><span class="s2">&quot;QA Too Long&quot;</span><span class="p">,</span>
+</span><span id="L-380"><a href="#L-380"><span class="linenos">380</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
+</span><span id="L-381"><a href="#L-381"><span class="linenos">381</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
+</span><span id="L-382"><a href="#L-382"><span class="linenos">382</span></a>                            <span class="n">mask</span><span class="o">=~</span><span class="p">(</span><span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">len</span><span class="p">()</span> <span class="o">&gt;</span> <span class="mi">18</span><span class="p">),</span>
+</span><span id="L-383"><a href="#L-383"><span class="linenos">383</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
+</span><span id="L-384"><a href="#L-384"><span class="linenos">384</span></a>                        <span class="p">)</span>
+</span><span id="L-385"><a href="#L-385"><span class="linenos">385</span></a>                    <span class="p">)</span>
+</span><span id="L-386"><a href="#L-386"><span class="linenos">386</span></a>                <span class="p">),</span>
+</span><span id="L-387"><a href="#L-387"><span class="linenos">387</span></a>            <span class="p">),</span>
+</span><span id="L-388"><a href="#L-388"><span class="linenos">388</span></a>            <span class="p">(</span>
+</span><span id="L-389"><a href="#L-389"><span class="linenos">389</span></a>                <span class="s2">&quot;Numeric&quot;</span><span class="p">,</span>
+</span><span id="L-390"><a href="#L-390"><span class="linenos">390</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;[0-9]+$&quot;</span><span class="p">),</span>
+</span><span id="L-391"><a href="#L-391"><span class="linenos">391</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
+</span><span id="L-392"><a href="#L-392"><span class="linenos">392</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
+</span><span id="L-393"><a href="#L-393"><span class="linenos">393</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
+</span><span id="L-394"><a href="#L-394"><span class="linenos">394</span></a>                            <span class="sa">f</span><span class="s2">&quot;QA Numeric&quot;</span><span class="p">,</span>
+</span><span id="L-395"><a href="#L-395"><span class="linenos">395</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
+</span><span id="L-396"><a href="#L-396"><span class="linenos">396</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
+</span><span id="L-397"><a href="#L-397"><span class="linenos">397</span></a>                            <span class="n">mask</span><span class="o">=</span><span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;[0-9]+$&quot;</span><span class="p">),</span>
+</span><span id="L-398"><a href="#L-398"><span class="linenos">398</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
+</span><span id="L-399"><a href="#L-399"><span class="linenos">399</span></a>                        <span class="p">)</span>
+</span><span id="L-400"><a href="#L-400"><span class="linenos">400</span></a>                    <span class="p">)</span>
+</span><span id="L-401"><a href="#L-401"><span class="linenos">401</span></a>                <span class="p">),</span>
+</span><span id="L-402"><a href="#L-402"><span class="linenos">402</span></a>            <span class="p">),</span>
+</span><span id="L-403"><a href="#L-403"><span class="linenos">403</span></a>            <span class="c1"># (</span>
+</span><span id="L-404"><a href="#L-404"><span class="linenos">404</span></a>            <span class="c1"># 	&quot;Is Integer&quot;,</span>
+</span><span id="L-405"><a href="#L-405"><span class="linenos">405</span></a>            <span class="c1"># 	lambda codes : codes.dtype == int,</span>
+</span><span id="L-406"><a href="#L-406"><span class="linenos">406</span></a>            <span class="c1"># 	lambda codes : codes.astype(int) #Convert to integer</span>
+</span><span id="L-407"><a href="#L-407"><span class="linenos">407</span></a>            <span class="c1"># ),</span>
+</span><span id="L-408"><a href="#L-408"><span class="linenos">408</span></a>            <span class="p">(</span>
+</span><span id="L-409"><a href="#L-409"><span class="linenos">409</span></a>                <span class="s2">&quot;In Database&quot;</span><span class="p">,</span>
+</span><span id="L-410"><a href="#L-410"><span class="linenos">410</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">in_database</span><span class="p">(</span><span class="n">codes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">),</span>
+</span><span id="L-411"><a href="#L-411"><span class="linenos">411</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
+</span><span id="L-412"><a href="#L-412"><span class="linenos">412</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
+</span><span id="L-413"><a href="#L-413"><span class="linenos">413</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
+</span><span id="L-414"><a href="#L-414"><span class="linenos">414</span></a>                            <span class="sa">f</span><span class="s2">&quot;QA In Database&quot;</span><span class="p">,</span>
+</span><span id="L-415"><a href="#L-415"><span class="linenos">415</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
+</span><span id="L-416"><a href="#L-416"><span class="linenos">416</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
+</span><span id="L-417"><a href="#L-417"><span class="linenos">417</span></a>                            <span class="n">mask</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">in_database</span><span class="p">(</span><span class="n">codes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">),</span>
+</span><span id="L-418"><a href="#L-418"><span class="linenos">418</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
+</span><span id="L-419"><a href="#L-419"><span class="linenos">419</span></a>                        <span class="p">)</span>
+</span><span id="L-420"><a href="#L-420"><span class="linenos">420</span></a>                    <span class="p">)</span>
+</span><span id="L-421"><a href="#L-421"><span class="linenos">421</span></a>                <span class="p">),</span>
+</span><span id="L-422"><a href="#L-422"><span class="linenos">422</span></a>            <span class="p">),</span>
+</span><span id="L-423"><a href="#L-423"><span class="linenos">423</span></a>        <span class="p">]</span>
+</span><span id="L-424"><a href="#L-424"><span class="linenos">424</span></a>
+</span><span id="L-425"><a href="#L-425"><span class="linenos">425</span></a>
+</span><span id="L-426"><a href="#L-426"><span class="linenos">426</span></a><span class="k">class</span><span class="w"> </span><span class="nc">Opcs4</span><span class="p">(</span><span class="n">Proto</span><span class="p">):</span>
+</span><span id="L-427"><a href="#L-427"><span class="linenos">427</span></a>    <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="L-428"><a href="#L-428"><span class="linenos">428</span></a>        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s2">&quot;opcs4&quot;</span><span class="p">,</span> <span class="n">trud</span><span class="o">.</span><span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;opcs4.parquet&quot;</span><span class="p">)</span>
+</span><span id="L-429"><a href="#L-429"><span class="linenos">429</span></a>
+</span><span id="L-430"><a href="#L-430"><span class="linenos">430</span></a>        <span class="bp">self</span><span class="o">.</span><span class="n">checks</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="L-431"><a href="#L-431"><span class="linenos">431</span></a>            <span class="p">(</span>
+</span><span id="L-432"><a href="#L-432"><span class="linenos">432</span></a>                <span class="s2">&quot;Not Empty&quot;</span><span class="p">,</span>
+</span><span id="L-433"><a href="#L-433"><span class="linenos">433</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">Series</span><span class="p">([</span><span class="nb">len</span><span class="p">(</span><span class="n">codes</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">]),</span>
+</span><span id="L-434"><a href="#L-434"><span class="linenos">434</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
+</span><span id="L-435"><a href="#L-435"><span class="linenos">435</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
+</span><span id="L-436"><a href="#L-436"><span class="linenos">436</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
+</span><span id="L-437"><a href="#L-437"><span class="linenos">437</span></a>                            <span class="sa">f</span><span class="s2">&quot;Code list is empty&quot;</span><span class="p">,</span>
+</span><span id="L-438"><a href="#L-438"><span class="linenos">438</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
+</span><span id="L-439"><a href="#L-439"><span class="linenos">439</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
+</span><span id="L-440"><a href="#L-440"><span class="linenos">440</span></a>                            <span class="n">mask</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
+</span><span id="L-441"><a href="#L-441"><span class="linenos">441</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
+</span><span id="L-442"><a href="#L-442"><span class="linenos">442</span></a>                        <span class="p">)</span>
+</span><span id="L-443"><a href="#L-443"><span class="linenos">443</span></a>                    <span class="p">)</span>
+</span><span id="L-444"><a href="#L-444"><span class="linenos">444</span></a>                <span class="p">),</span>
+</span><span id="L-445"><a href="#L-445"><span class="linenos">445</span></a>            <span class="p">),</span>
+</span><span id="L-446"><a href="#L-446"><span class="linenos">446</span></a>            <span class="p">(</span>
+</span><span id="L-447"><a href="#L-447"><span class="linenos">447</span></a>                <span class="s2">&quot;In Database&quot;</span><span class="p">,</span>
+</span><span id="L-448"><a href="#L-448"><span class="linenos">448</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">in_database</span><span class="p">(</span><span class="n">codes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">),</span>
+</span><span id="L-449"><a href="#L-449"><span class="linenos">449</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
+</span><span id="L-450"><a href="#L-450"><span class="linenos">450</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
+</span><span id="L-451"><a href="#L-451"><span class="linenos">451</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
+</span><span id="L-452"><a href="#L-452"><span class="linenos">452</span></a>                            <span class="sa">f</span><span class="s2">&quot;QA In Database&quot;</span><span class="p">,</span>
+</span><span id="L-453"><a href="#L-453"><span class="linenos">453</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
+</span><span id="L-454"><a href="#L-454"><span class="linenos">454</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
+</span><span id="L-455"><a href="#L-455"><span class="linenos">455</span></a>                            <span class="n">mask</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">in_database</span><span class="p">(</span><span class="n">codes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">),</span>
+</span><span id="L-456"><a href="#L-456"><span class="linenos">456</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
+</span><span id="L-457"><a href="#L-457"><span class="linenos">457</span></a>                        <span class="p">)</span>
+</span><span id="L-458"><a href="#L-458"><span class="linenos">458</span></a>                    <span class="p">)</span>
+</span><span id="L-459"><a href="#L-459"><span class="linenos">459</span></a>                <span class="p">),</span>
+</span><span id="L-460"><a href="#L-460"><span class="linenos">460</span></a>            <span class="p">),</span>
+</span><span id="L-461"><a href="#L-461"><span class="linenos">461</span></a>        <span class="p">]</span>
+</span><span id="L-462"><a href="#L-462"><span class="linenos">462</span></a>
+</span><span id="L-463"><a href="#L-463"><span class="linenos">463</span></a>
+</span><span id="L-464"><a href="#L-464"><span class="linenos">464</span></a><span class="k">class</span><span class="w"> </span><span class="nc">Atc</span><span class="p">(</span><span class="n">Proto</span><span class="p">):</span>
+</span><span id="L-465"><a href="#L-465"><span class="linenos">465</span></a>    <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="L-466"><a href="#L-466"><span class="linenos">466</span></a>        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s2">&quot;atc&quot;</span><span class="p">,</span> <span class="n">trud_codes_path</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
+</span><span id="L-467"><a href="#L-467"><span class="linenos">467</span></a>        <span class="bp">self</span><span class="o">.</span><span class="n">checks</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="L-468"><a href="#L-468"><span class="linenos">468</span></a>            <span class="p">(</span>
+</span><span id="L-469"><a href="#L-469"><span class="linenos">469</span></a>                <span class="s2">&quot;Not Empty&quot;</span><span class="p">,</span>
+</span><span id="L-470"><a href="#L-470"><span class="linenos">470</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">Series</span><span class="p">([</span><span class="nb">len</span><span class="p">(</span><span class="n">codes</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">]),</span>
+</span><span id="L-471"><a href="#L-471"><span class="linenos">471</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
+</span><span id="L-472"><a href="#L-472"><span class="linenos">472</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
+</span><span id="L-473"><a href="#L-473"><span class="linenos">473</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
+</span><span id="L-474"><a href="#L-474"><span class="linenos">474</span></a>                            <span class="sa">f</span><span class="s2">&quot;Code list is empty&quot;</span><span class="p">,</span>
+</span><span id="L-475"><a href="#L-475"><span class="linenos">475</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
+</span><span id="L-476"><a href="#L-476"><span class="linenos">476</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
+</span><span id="L-477"><a href="#L-477"><span class="linenos">477</span></a>                            <span class="n">mask</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
+</span><span id="L-478"><a href="#L-478"><span class="linenos">478</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
+</span><span id="L-479"><a href="#L-479"><span class="linenos">479</span></a>                        <span class="p">)</span>
+</span><span id="L-480"><a href="#L-480"><span class="linenos">480</span></a>                    <span class="p">)</span>
+</span><span id="L-481"><a href="#L-481"><span class="linenos">481</span></a>                <span class="p">),</span>
+</span><span id="L-482"><a href="#L-482"><span class="linenos">482</span></a>            <span class="p">),</span>
+</span><span id="L-483"><a href="#L-483"><span class="linenos">483</span></a>            <span class="p">(</span>
+</span><span id="L-484"><a href="#L-484"><span class="linenos">484</span></a>                <span class="s2">&quot;Alphanumeric Capital&quot;</span><span class="p">,</span>
+</span><span id="L-485"><a href="#L-485"><span class="linenos">485</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;^[A-Z0-9]+$&quot;</span><span class="p">),</span>
+</span><span id="L-486"><a href="#L-486"><span class="linenos">486</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
+</span><span id="L-487"><a href="#L-487"><span class="linenos">487</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
+</span><span id="L-488"><a href="#L-488"><span class="linenos">488</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
+</span><span id="L-489"><a href="#L-489"><span class="linenos">489</span></a>                            <span class="sa">f</span><span class="s2">&quot;QA Alphanumeric Capital&quot;</span><span class="p">,</span>
+</span><span id="L-490"><a href="#L-490"><span class="linenos">490</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
+</span><span id="L-491"><a href="#L-491"><span class="linenos">491</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
+</span><span id="L-492"><a href="#L-492"><span class="linenos">492</span></a>                            <span class="n">mask</span><span class="o">=</span><span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;^[A-Z0-9]+$&quot;</span><span class="p">),</span>
+</span><span id="L-493"><a href="#L-493"><span class="linenos">493</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
+</span><span id="L-494"><a href="#L-494"><span class="linenos">494</span></a>                        <span class="p">)</span>
+</span><span id="L-495"><a href="#L-495"><span class="linenos">495</span></a>                    <span class="p">)</span>
+</span><span id="L-496"><a href="#L-496"><span class="linenos">496</span></a>                <span class="p">),</span>
+</span><span id="L-497"><a href="#L-497"><span class="linenos">497</span></a>            <span class="p">),</span>
+</span><span id="L-498"><a href="#L-498"><span class="linenos">498</span></a>        <span class="p">]</span>
+</span><span id="L-499"><a href="#L-499"><span class="linenos">499</span></a>
+</span><span id="L-500"><a href="#L-500"><span class="linenos">500</span></a>
+</span><span id="L-501"><a href="#L-501"><span class="linenos">501</span></a><span class="k">class</span><span class="w"> </span><span class="nc">Med</span><span class="p">(</span><span class="n">Proto</span><span class="p">):</span>
+</span><span id="L-502"><a href="#L-502"><span class="linenos">502</span></a>    <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="L-503"><a href="#L-503"><span class="linenos">503</span></a>        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s2">&quot;med&quot;</span><span class="p">,</span> <span class="n">trud_codes_path</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
+</span><span id="L-504"><a href="#L-504"><span class="linenos">504</span></a>        <span class="bp">self</span><span class="o">.</span><span class="n">checks</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="L-505"><a href="#L-505"><span class="linenos">505</span></a>            <span class="p">(</span>
+</span><span id="L-506"><a href="#L-506"><span class="linenos">506</span></a>                <span class="s2">&quot;Not Empty&quot;</span><span class="p">,</span>
+</span><span id="L-507"><a href="#L-507"><span class="linenos">507</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">Series</span><span class="p">([</span><span class="nb">len</span><span class="p">(</span><span class="n">codes</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">]),</span>
+</span><span id="L-508"><a href="#L-508"><span class="linenos">508</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
+</span><span id="L-509"><a href="#L-509"><span class="linenos">509</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
+</span><span id="L-510"><a href="#L-510"><span class="linenos">510</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
+</span><span id="L-511"><a href="#L-511"><span class="linenos">511</span></a>                            <span class="sa">f</span><span class="s2">&quot;Code list is empty&quot;</span><span class="p">,</span>
+</span><span id="L-512"><a href="#L-512"><span class="linenos">512</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
+</span><span id="L-513"><a href="#L-513"><span class="linenos">513</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
+</span><span id="L-514"><a href="#L-514"><span class="linenos">514</span></a>                            <span class="n">mask</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
+</span><span id="L-515"><a href="#L-515"><span class="linenos">515</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
+</span><span id="L-516"><a href="#L-516"><span class="linenos">516</span></a>                        <span class="p">)</span>
+</span><span id="L-517"><a href="#L-517"><span class="linenos">517</span></a>                    <span class="p">)</span>
+</span><span id="L-518"><a href="#L-518"><span class="linenos">518</span></a>                <span class="p">),</span>
+</span><span id="L-519"><a href="#L-519"><span class="linenos">519</span></a>            <span class="p">)</span>
+</span><span id="L-520"><a href="#L-520"><span class="linenos">520</span></a>        <span class="p">]</span>
+</span><span id="L-521"><a href="#L-521"><span class="linenos">521</span></a>
+</span><span id="L-522"><a href="#L-522"><span class="linenos">522</span></a>
+</span><span id="L-523"><a href="#L-523"><span class="linenos">523</span></a><span class="k">class</span><span class="w"> </span><span class="nc">Cprd</span><span class="p">(</span><span class="n">Proto</span><span class="p">):</span>
+</span><span id="L-524"><a href="#L-524"><span class="linenos">524</span></a>    <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="L-525"><a href="#L-525"><span class="linenos">525</span></a>        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s2">&quot;cprd&quot;</span><span class="p">,</span> <span class="n">trud_codes_path</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
+</span><span id="L-526"><a href="#L-526"><span class="linenos">526</span></a>        <span class="bp">self</span><span class="o">.</span><span class="n">checks</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="L-527"><a href="#L-527"><span class="linenos">527</span></a>            <span class="p">(</span>
+</span><span id="L-528"><a href="#L-528"><span class="linenos">528</span></a>                <span class="s2">&quot;Not Empty&quot;</span><span class="p">,</span>
+</span><span id="L-529"><a href="#L-529"><span class="linenos">529</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">Series</span><span class="p">([</span><span class="nb">len</span><span class="p">(</span><span class="n">codes</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">]),</span>
+</span><span id="L-530"><a href="#L-530"><span class="linenos">530</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
+</span><span id="L-531"><a href="#L-531"><span class="linenos">531</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
+</span><span id="L-532"><a href="#L-532"><span class="linenos">532</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
+</span><span id="L-533"><a href="#L-533"><span class="linenos">533</span></a>                            <span class="sa">f</span><span class="s2">&quot;Code list is empty&quot;</span><span class="p">,</span>
+</span><span id="L-534"><a href="#L-534"><span class="linenos">534</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
+</span><span id="L-535"><a href="#L-535"><span class="linenos">535</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
+</span><span id="L-536"><a href="#L-536"><span class="linenos">536</span></a>                            <span class="n">mask</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
+</span><span id="L-537"><a href="#L-537"><span class="linenos">537</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
+</span><span id="L-538"><a href="#L-538"><span class="linenos">538</span></a>                        <span class="p">)</span>
+</span><span id="L-539"><a href="#L-539"><span class="linenos">539</span></a>                    <span class="p">)</span>
+</span><span id="L-540"><a href="#L-540"><span class="linenos">540</span></a>                <span class="p">),</span>
+</span><span id="L-541"><a href="#L-541"><span class="linenos">541</span></a>            <span class="p">)</span>
+</span><span id="L-542"><a href="#L-542"><span class="linenos">542</span></a>        <span class="p">]</span>
+</span><span id="L-543"><a href="#L-543"><span class="linenos">543</span></a>
+</span><span id="L-544"><a href="#L-544"><span class="linenos">544</span></a>
+</span><span id="L-545"><a href="#L-545"><span class="linenos">545</span></a><span class="k">class</span><span class="w"> </span><span class="nc">CodeTypeParser</span><span class="p">:</span>
+</span><span id="L-546"><a href="#L-546"><span class="linenos">546</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;A class used in InvalidCodesException to report an error if a code parser check fails&quot;&quot;&quot;</span>
 </span><span id="L-547"><a href="#L-547"><span class="linenos">547</span></a>
-</span><span id="L-548"><a href="#L-548"><span class="linenos">548</span></a>        <span class="bp">self</span><span class="o">.</span><span class="n">code_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-549"><a href="#L-549"><span class="linenos">549</span></a>            <span class="s2">&quot;read2&quot;</span><span class="p">:</span> <span class="n">Read2</span><span class="p">(),</span>
-</span><span id="L-550"><a href="#L-550"><span class="linenos">550</span></a>            <span class="s2">&quot;read3&quot;</span><span class="p">:</span> <span class="n">Read3</span><span class="p">(),</span>
-</span><span id="L-551"><a href="#L-551"><span class="linenos">551</span></a>            <span class="s2">&quot;icd10&quot;</span><span class="p">:</span> <span class="n">Icd10</span><span class="p">(),</span>
-</span><span id="L-552"><a href="#L-552"><span class="linenos">552</span></a>            <span class="s2">&quot;snomed&quot;</span><span class="p">:</span> <span class="n">Snomed</span><span class="p">(),</span>
-</span><span id="L-553"><a href="#L-553"><span class="linenos">553</span></a>            <span class="s2">&quot;opcs4&quot;</span><span class="p">:</span> <span class="n">Opcs4</span><span class="p">(),</span>
-</span><span id="L-554"><a href="#L-554"><span class="linenos">554</span></a>            <span class="s2">&quot;atc&quot;</span><span class="p">:</span> <span class="n">Atc</span><span class="p">(),</span>
-</span><span id="L-555"><a href="#L-555"><span class="linenos">555</span></a>            <span class="s2">&quot;med&quot;</span><span class="p">:</span> <span class="n">Med</span><span class="p">(),</span>
-</span><span id="L-556"><a href="#L-556"><span class="linenos">556</span></a>            <span class="s2">&quot;cprd&quot;</span><span class="p">:</span> <span class="n">Cprd</span><span class="p">(),</span>
-</span><span id="L-557"><a href="#L-557"><span class="linenos">557</span></a>        <span class="p">}</span>
+</span><span id="L-548"><a href="#L-548"><span class="linenos">548</span></a>    <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">trud_processed_dir</span><span class="p">:</span> <span class="n">Path</span> <span class="o">=</span> <span class="n">trud</span><span class="o">.</span><span class="n">PROCESSED_PATH</span><span class="p">):</span>
+</span><span id="L-549"><a href="#L-549"><span class="linenos">549</span></a>        <span class="k">if</span> <span class="ow">not</span> <span class="n">trud_processed_dir</span><span class="o">.</span><span class="n">exists</span><span class="p">()</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">trud_processed_dir</span><span class="o">.</span><span class="n">is_dir</span><span class="p">():</span>
+</span><span id="L-550"><a href="#L-550"><span class="linenos">550</span></a>            <span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span>
+</span><span id="L-551"><a href="#L-551"><span class="linenos">551</span></a>                <span class="sa">f</span><span class="s2">&quot;Cannot initialise parsers as the TRUD processed directory </span><span class="si">{</span><span class="n">trud_processed_dir</span><span class="si">}</span><span class="s2"> does not exist, please check that TRUD has been installed: acmc trud install&quot;</span>
+</span><span id="L-552"><a href="#L-552"><span class="linenos">552</span></a>            <span class="p">)</span>
+</span><span id="L-553"><a href="#L-553"><span class="linenos">553</span></a>
+</span><span id="L-554"><a href="#L-554"><span class="linenos">554</span></a>        <span class="bp">self</span><span class="o">.</span><span class="n">code_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-555"><a href="#L-555"><span class="linenos">555</span></a>            <span class="s2">&quot;read2&quot;</span><span class="p">:</span> <span class="n">Read2</span><span class="p">(),</span>
+</span><span id="L-556"><a href="#L-556"><span class="linenos">556</span></a>            <span class="s2">&quot;read3&quot;</span><span class="p">:</span> <span class="n">Read3</span><span class="p">(),</span>
+</span><span id="L-557"><a href="#L-557"><span class="linenos">557</span></a>            <span class="s2">&quot;icd10&quot;</span><span class="p">:</span> <span class="n">Icd10</span><span class="p">(),</span>
+</span><span id="L-558"><a href="#L-558"><span class="linenos">558</span></a>            <span class="s2">&quot;snomed&quot;</span><span class="p">:</span> <span class="n">Snomed</span><span class="p">(),</span>
+</span><span id="L-559"><a href="#L-559"><span class="linenos">559</span></a>            <span class="s2">&quot;opcs4&quot;</span><span class="p">:</span> <span class="n">Opcs4</span><span class="p">(),</span>
+</span><span id="L-560"><a href="#L-560"><span class="linenos">560</span></a>            <span class="s2">&quot;atc&quot;</span><span class="p">:</span> <span class="n">Atc</span><span class="p">(),</span>
+</span><span id="L-561"><a href="#L-561"><span class="linenos">561</span></a>            <span class="s2">&quot;med&quot;</span><span class="p">:</span> <span class="n">Med</span><span class="p">(),</span>
+</span><span id="L-562"><a href="#L-562"><span class="linenos">562</span></a>            <span class="s2">&quot;cprd&quot;</span><span class="p">:</span> <span class="n">Cprd</span><span class="p">(),</span>
+</span><span id="L-563"><a href="#L-563"><span class="linenos">563</span></a>        <span class="p">}</span>
 </span></pre></div>
 
 
             </section>
-                <section id="logger">
-                    <div class="attr variable">
-            <span class="name">logger</span>        =
-<span class="default_value">&lt;Logger acmc_logger (INFO)&gt;</span>
-
-        
-    </div>
-    <a class="headerlink" href="#logger"></a>
-    
-    
-
-                </section>
                 <section id="SUPPORTED_CODE_TYPES">
                     <div class="attr variable">
             <span class="name">SUPPORTED_CODE_TYPES</span>        =
-<span class="default_value">{&#39;read2&#39;, &#39;icd10&#39;, &#39;atc&#39;, &#39;read3&#39;, &#39;snomed&#39;, &#39;opcs4&#39;}</span>
+<span class="default_value">{&#39;atc&#39;, &#39;read3&#39;, &#39;snomed&#39;, &#39;opcs4&#39;, &#39;read2&#39;, &#39;icd10&#39;}</span>
 
         
     </div>
     <a class="headerlink" href="#SUPPORTED_CODE_TYPES"></a>
     
-    
+            <div class="docstring"><p>List of support medical coding types</p>
+</div>
+
 
                 </section>
                 <section id="CodesError">
@@ -785,14 +782,14 @@
 
     </div>
     <a class="headerlink" href="#CodesError"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="CodesError-17"><a href="#CodesError-17"><span class="linenos">17</span></a><span class="k">class</span><span class="w"> </span><span class="nc">CodesError</span><span class="p">:</span>
-</span><span id="CodesError-18"><a href="#CodesError-18"><span class="linenos">18</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;A class used in InvalidCodesException to report an error if a code parser check fails&quot;&quot;&quot;</span>
-</span><span id="CodesError-19"><a href="#CodesError-19"><span class="linenos">19</span></a>
-</span><span id="CodesError-20"><a href="#CodesError-20"><span class="linenos">20</span></a>    <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">,</span> <span class="n">codes</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">codes_file</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">mask</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">code_type</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
-</span><span id="CodesError-21"><a href="#CodesError-21"><span class="linenos">21</span></a>        <span class="c1"># initialise class variables with provided parameters</span>
-</span><span id="CodesError-22"><a href="#CodesError-22"><span class="linenos">22</span></a>        <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="nb">locals</span><span class="p">()</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
-</span><span id="CodesError-23"><a href="#CodesError-23"><span class="linenos">23</span></a>            <span class="k">if</span> <span class="n">key</span> <span class="o">!=</span> <span class="s2">&quot;self&quot;</span><span class="p">:</span>
-</span><span id="CodesError-24"><a href="#CodesError-24"><span class="linenos">24</span></a>                <span class="nb">setattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
+            <div class="pdoc-code codehilite"><pre><span></span><span id="CodesError-23"><a href="#CodesError-23"><span class="linenos">23</span></a><span class="k">class</span><span class="w"> </span><span class="nc">CodesError</span><span class="p">:</span>
+</span><span id="CodesError-24"><a href="#CodesError-24"><span class="linenos">24</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;A class used in InvalidCodesException to report an error if a code parser check fails&quot;&quot;&quot;</span>
+</span><span id="CodesError-25"><a href="#CodesError-25"><span class="linenos">25</span></a>
+</span><span id="CodesError-26"><a href="#CodesError-26"><span class="linenos">26</span></a>    <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">,</span> <span class="n">codes</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">codes_file</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">mask</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">code_type</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
+</span><span id="CodesError-27"><a href="#CodesError-27"><span class="linenos">27</span></a>        <span class="c1"># initialise class variables with provided parameters</span>
+</span><span id="CodesError-28"><a href="#CodesError-28"><span class="linenos">28</span></a>        <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="nb">locals</span><span class="p">()</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
+</span><span id="CodesError-29"><a href="#CodesError-29"><span class="linenos">29</span></a>            <span class="k">if</span> <span class="n">key</span> <span class="o">!=</span> <span class="s2">&quot;self&quot;</span><span class="p">:</span>
+</span><span id="CodesError-30"><a href="#CodesError-30"><span class="linenos">30</span></a>                <span class="nb">setattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
 </span></pre></div>
 
 
@@ -810,11 +807,11 @@
 
     </div>
     <a class="headerlink" href="#CodesError.__init__"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="CodesError.__init__-20"><a href="#CodesError.__init__-20"><span class="linenos">20</span></a>    <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">,</span> <span class="n">codes</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">codes_file</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">mask</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">code_type</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
-</span><span id="CodesError.__init__-21"><a href="#CodesError.__init__-21"><span class="linenos">21</span></a>        <span class="c1"># initialise class variables with provided parameters</span>
-</span><span id="CodesError.__init__-22"><a href="#CodesError.__init__-22"><span class="linenos">22</span></a>        <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="nb">locals</span><span class="p">()</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
-</span><span id="CodesError.__init__-23"><a href="#CodesError.__init__-23"><span class="linenos">23</span></a>            <span class="k">if</span> <span class="n">key</span> <span class="o">!=</span> <span class="s2">&quot;self&quot;</span><span class="p">:</span>
-</span><span id="CodesError.__init__-24"><a href="#CodesError.__init__-24"><span class="linenos">24</span></a>                <span class="nb">setattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
+            <div class="pdoc-code codehilite"><pre><span></span><span id="CodesError.__init__-26"><a href="#CodesError.__init__-26"><span class="linenos">26</span></a>    <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">,</span> <span class="n">codes</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">codes_file</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">mask</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">code_type</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
+</span><span id="CodesError.__init__-27"><a href="#CodesError.__init__-27"><span class="linenos">27</span></a>        <span class="c1"># initialise class variables with provided parameters</span>
+</span><span id="CodesError.__init__-28"><a href="#CodesError.__init__-28"><span class="linenos">28</span></a>        <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="nb">locals</span><span class="p">()</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
+</span><span id="CodesError.__init__-29"><a href="#CodesError.__init__-29"><span class="linenos">29</span></a>            <span class="k">if</span> <span class="n">key</span> <span class="o">!=</span> <span class="s2">&quot;self&quot;</span><span class="p">:</span>
+</span><span id="CodesError.__init__-30"><a href="#CodesError.__init__-30"><span class="linenos">30</span></a>                <span class="nb">setattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
 </span></pre></div>
 
 
@@ -833,12 +830,12 @@
 
     </div>
     <a class="headerlink" href="#InvalidCodesException"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="InvalidCodesException-27"><a href="#InvalidCodesException-27"><span class="linenos">27</span></a><span class="k">class</span><span class="w"> </span><span class="nc">InvalidCodesException</span><span class="p">(</span><span class="ne">Exception</span><span class="p">):</span>
-</span><span id="InvalidCodesException-28"><a href="#InvalidCodesException-28"><span class="linenos">28</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Custom exception class raised when invalid codes are found that cannot be resolved by processing&quot;&quot;&quot;</span>
-</span><span id="InvalidCodesException-29"><a href="#InvalidCodesException-29"><span class="linenos">29</span></a>
-</span><span id="InvalidCodesException-30"><a href="#InvalidCodesException-30"><span class="linenos">30</span></a>    <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">error</span><span class="p">):</span>
-</span><span id="InvalidCodesException-31"><a href="#InvalidCodesException-31"><span class="linenos">31</span></a>        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">error</span><span class="o">.</span><span class="n">message</span><span class="p">)</span>
-</span><span id="InvalidCodesException-32"><a href="#InvalidCodesException-32"><span class="linenos">32</span></a>        <span class="bp">self</span><span class="o">.</span><span class="n">error</span> <span class="o">=</span> <span class="n">error</span>
+            <div class="pdoc-code codehilite"><pre><span></span><span id="InvalidCodesException-33"><a href="#InvalidCodesException-33"><span class="linenos">33</span></a><span class="k">class</span><span class="w"> </span><span class="nc">InvalidCodesException</span><span class="p">(</span><span class="ne">Exception</span><span class="p">):</span>
+</span><span id="InvalidCodesException-34"><a href="#InvalidCodesException-34"><span class="linenos">34</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Custom exception class raised when invalid codes are found that cannot be resolved by processing&quot;&quot;&quot;</span>
+</span><span id="InvalidCodesException-35"><a href="#InvalidCodesException-35"><span class="linenos">35</span></a>
+</span><span id="InvalidCodesException-36"><a href="#InvalidCodesException-36"><span class="linenos">36</span></a>    <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">error</span><span class="p">):</span>
+</span><span id="InvalidCodesException-37"><a href="#InvalidCodesException-37"><span class="linenos">37</span></a>        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">error</span><span class="o">.</span><span class="n">message</span><span class="p">)</span>
+</span><span id="InvalidCodesException-38"><a href="#InvalidCodesException-38"><span class="linenos">38</span></a>        <span class="bp">self</span><span class="o">.</span><span class="n">error</span> <span class="o">=</span> <span class="n">error</span>
 </span></pre></div>
 
 
@@ -856,9 +853,9 @@
 
     </div>
     <a class="headerlink" href="#InvalidCodesException.__init__"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="InvalidCodesException.__init__-30"><a href="#InvalidCodesException.__init__-30"><span class="linenos">30</span></a>    <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">error</span><span class="p">):</span>
-</span><span id="InvalidCodesException.__init__-31"><a href="#InvalidCodesException.__init__-31"><span class="linenos">31</span></a>        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">error</span><span class="o">.</span><span class="n">message</span><span class="p">)</span>
-</span><span id="InvalidCodesException.__init__-32"><a href="#InvalidCodesException.__init__-32"><span class="linenos">32</span></a>        <span class="bp">self</span><span class="o">.</span><span class="n">error</span> <span class="o">=</span> <span class="n">error</span>
+            <div class="pdoc-code codehilite"><pre><span></span><span id="InvalidCodesException.__init__-36"><a href="#InvalidCodesException.__init__-36"><span class="linenos">36</span></a>    <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">error</span><span class="p">):</span>
+</span><span id="InvalidCodesException.__init__-37"><a href="#InvalidCodesException.__init__-37"><span class="linenos">37</span></a>        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">error</span><span class="o">.</span><span class="n">message</span><span class="p">)</span>
+</span><span id="InvalidCodesException.__init__-38"><a href="#InvalidCodesException.__init__-38"><span class="linenos">38</span></a>        <span class="bp">self</span><span class="o">.</span><span class="n">error</span> <span class="o">=</span> <span class="n">error</span>
 </span></pre></div>
 
 
@@ -888,84 +885,84 @@
 
     </div>
     <a class="headerlink" href="#Proto"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="Proto-35"><a href="#Proto-35"><span class="linenos"> 35</span></a><span class="k">class</span><span class="w"> </span><span class="nc">Proto</span><span class="p">:</span>
-</span><span id="Proto-36"><a href="#Proto-36"><span class="linenos"> 36</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="Proto-37"><a href="#Proto-37"><span class="linenos"> 37</span></a><span class="sd">    Define checks as list of 3 tuple: (Message, Condition, Process)</span>
-</span><span id="Proto-38"><a href="#Proto-38"><span class="linenos"> 38</span></a><span class="sd">    - Message = The name of the condition (what is printed and logged)</span>
-</span><span id="Proto-39"><a href="#Proto-39"><span class="linenos"> 39</span></a><span class="sd">    - Condition = True if Passed, and False if Failed</span>
-</span><span id="Proto-40"><a href="#Proto-40"><span class="linenos"> 40</span></a><span class="sd">    - Process = Aims to resolve all issues that stop condition from passing (Do not change index!)</span>
-</span><span id="Proto-41"><a href="#Proto-41"><span class="linenos"> 41</span></a><span class="sd">    &quot;&quot;&quot;</span>
-</span><span id="Proto-42"><a href="#Proto-42"><span class="linenos"> 42</span></a>
-</span><span id="Proto-43"><a href="#Proto-43"><span class="linenos"> 43</span></a>    <span class="n">checks</span><span class="p">:</span> <span class="nb">list</span><span class="p">[</span>
-</span><span id="Proto-44"><a href="#Proto-44"><span class="linenos"> 44</span></a>        <span class="nb">tuple</span><span class="p">[</span>
-</span><span id="Proto-45"><a href="#Proto-45"><span class="linenos"> 45</span></a>            <span class="nb">str</span><span class="p">,</span>  <span class="c1"># The description, e.g., &quot;Not Empty&quot;</span>
-</span><span id="Proto-46"><a href="#Proto-46"><span class="linenos"> 46</span></a>            <span class="n">Callable</span><span class="p">[</span>
-</span><span id="Proto-47"><a href="#Proto-47"><span class="linenos"> 47</span></a>                <span class="p">[</span><span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">],</span>
-</span><span id="Proto-48"><a href="#Proto-48"><span class="linenos"> 48</span></a>                <span class="n">pd</span><span class="o">.</span><span class="n">Series</span><span class="p">,</span>
-</span><span id="Proto-49"><a href="#Proto-49"><span class="linenos"> 49</span></a>            <span class="p">],</span>  <span class="c1"># The first lambda function: takes a list and returns a pd.Series of booleans</span>
-</span><span id="Proto-50"><a href="#Proto-50"><span class="linenos"> 50</span></a>            <span class="n">Callable</span><span class="p">[</span>
-</span><span id="Proto-51"><a href="#Proto-51"><span class="linenos"> 51</span></a>                <span class="p">[</span><span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">,</span> <span class="n">Path</span><span class="p">],</span>
-</span><span id="Proto-52"><a href="#Proto-52"><span class="linenos"> 52</span></a>                <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">,</span>
-</span><span id="Proto-53"><a href="#Proto-53"><span class="linenos"> 53</span></a>            <span class="p">],</span>  <span class="c1"># The second lambda function: takes a list and a string, and returns nothing</span>
-</span><span id="Proto-54"><a href="#Proto-54"><span class="linenos"> 54</span></a>        <span class="p">]</span>
-</span><span id="Proto-55"><a href="#Proto-55"><span class="linenos"> 55</span></a>    <span class="p">]</span>
-</span><span id="Proto-56"><a href="#Proto-56"><span class="linenos"> 56</span></a>
-</span><span id="Proto-57"><a href="#Proto-57"><span class="linenos"> 57</span></a>    <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">trud_codes_path</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Path</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">):</span>
-</span><span id="Proto-58"><a href="#Proto-58"><span class="linenos"> 58</span></a>        <span class="k">if</span> <span class="n">trud_codes_path</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Proto-59"><a href="#Proto-59"><span class="linenos"> 59</span></a>            <span class="k">if</span> <span class="n">trud_codes_path</span><span class="o">.</span><span class="n">is_file</span><span class="p">():</span>
-</span><span id="Proto-60"><a href="#Proto-60"><span class="linenos"> 60</span></a>                <span class="bp">self</span><span class="o">.</span><span class="n">trud_codes_path</span><span class="p">:</span> <span class="n">Path</span> <span class="o">=</span> <span class="n">trud_codes_path</span>
-</span><span id="Proto-61"><a href="#Proto-61"><span class="linenos"> 61</span></a>                <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_parquet</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">trud_codes_path</span><span class="p">)</span>
-</span><span id="Proto-62"><a href="#Proto-62"><span class="linenos"> 62</span></a>            <span class="k">else</span><span class="p">:</span>
-</span><span id="Proto-63"><a href="#Proto-63"><span class="linenos"> 63</span></a>                <span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span>
-</span><span id="Proto-64"><a href="#Proto-64"><span class="linenos"> 64</span></a>                    <span class="sa">f</span><span class="s2">&quot;Error: Read2 code file &#39;</span><span class="si">{</span><span class="n">trud_codes_path</span><span class="si">}</span><span class="s2">&#39; does not exist. Please ensure you have installed TRUD correctly&quot;</span>
-</span><span id="Proto-65"><a href="#Proto-65"><span class="linenos"> 65</span></a>                <span class="p">)</span>
-</span><span id="Proto-66"><a href="#Proto-66"><span class="linenos"> 66</span></a>
-</span><span id="Proto-67"><a href="#Proto-67"><span class="linenos"> 67</span></a>        <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="n">name</span>
-</span><span id="Proto-68"><a href="#Proto-68"><span class="linenos"> 68</span></a>
-</span><span id="Proto-69"><a href="#Proto-69"><span class="linenos"> 69</span></a>    <span class="k">def</span><span class="w"> </span><span class="nf">raise_exception</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ex</span><span class="p">:</span> <span class="ne">Exception</span><span class="p">):</span>
-</span><span id="Proto-70"><a href="#Proto-70"><span class="linenos"> 70</span></a><span class="w">        </span><span class="sd">&quot;&quot;&quot;Raises an exception inside a lambda function. Python does not allow using raise statement inside lambda because lambda can only contain expressions, not statements. Using raise_exception not raise_ as it&#39;s more explict&quot;&quot;&quot;</span>
-</span><span id="Proto-71"><a href="#Proto-71"><span class="linenos"> 71</span></a>        <span class="k">raise</span> <span class="n">ex</span>
+            <div class="pdoc-code codehilite"><pre><span></span><span id="Proto-41"><a href="#Proto-41"><span class="linenos"> 41</span></a><span class="k">class</span><span class="w"> </span><span class="nc">Proto</span><span class="p">:</span>
+</span><span id="Proto-42"><a href="#Proto-42"><span class="linenos"> 42</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="Proto-43"><a href="#Proto-43"><span class="linenos"> 43</span></a><span class="sd">    Define checks as list of 3 tuple: (Message, Condition, Process)</span>
+</span><span id="Proto-44"><a href="#Proto-44"><span class="linenos"> 44</span></a><span class="sd">    - Message = The name of the condition (what is printed and logged)</span>
+</span><span id="Proto-45"><a href="#Proto-45"><span class="linenos"> 45</span></a><span class="sd">    - Condition = True if Passed, and False if Failed</span>
+</span><span id="Proto-46"><a href="#Proto-46"><span class="linenos"> 46</span></a><span class="sd">    - Process = Aims to resolve all issues that stop condition from passing (Do not change index!)</span>
+</span><span id="Proto-47"><a href="#Proto-47"><span class="linenos"> 47</span></a><span class="sd">    &quot;&quot;&quot;</span>
+</span><span id="Proto-48"><a href="#Proto-48"><span class="linenos"> 48</span></a>
+</span><span id="Proto-49"><a href="#Proto-49"><span class="linenos"> 49</span></a>    <span class="n">checks</span><span class="p">:</span> <span class="nb">list</span><span class="p">[</span>
+</span><span id="Proto-50"><a href="#Proto-50"><span class="linenos"> 50</span></a>        <span class="nb">tuple</span><span class="p">[</span>
+</span><span id="Proto-51"><a href="#Proto-51"><span class="linenos"> 51</span></a>            <span class="nb">str</span><span class="p">,</span>  <span class="c1"># The description, e.g., &quot;Not Empty&quot;</span>
+</span><span id="Proto-52"><a href="#Proto-52"><span class="linenos"> 52</span></a>            <span class="n">Callable</span><span class="p">[</span>
+</span><span id="Proto-53"><a href="#Proto-53"><span class="linenos"> 53</span></a>                <span class="p">[</span><span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">],</span>
+</span><span id="Proto-54"><a href="#Proto-54"><span class="linenos"> 54</span></a>                <span class="n">pd</span><span class="o">.</span><span class="n">Series</span><span class="p">,</span>
+</span><span id="Proto-55"><a href="#Proto-55"><span class="linenos"> 55</span></a>            <span class="p">],</span>  <span class="c1"># The first lambda function: takes a list and returns a pd.Series of booleans</span>
+</span><span id="Proto-56"><a href="#Proto-56"><span class="linenos"> 56</span></a>            <span class="n">Callable</span><span class="p">[</span>
+</span><span id="Proto-57"><a href="#Proto-57"><span class="linenos"> 57</span></a>                <span class="p">[</span><span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">,</span> <span class="n">Path</span><span class="p">],</span>
+</span><span id="Proto-58"><a href="#Proto-58"><span class="linenos"> 58</span></a>                <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">,</span>
+</span><span id="Proto-59"><a href="#Proto-59"><span class="linenos"> 59</span></a>            <span class="p">],</span>  <span class="c1"># The second lambda function: takes a list and a string, and returns nothing</span>
+</span><span id="Proto-60"><a href="#Proto-60"><span class="linenos"> 60</span></a>        <span class="p">]</span>
+</span><span id="Proto-61"><a href="#Proto-61"><span class="linenos"> 61</span></a>    <span class="p">]</span>
+</span><span id="Proto-62"><a href="#Proto-62"><span class="linenos"> 62</span></a>
+</span><span id="Proto-63"><a href="#Proto-63"><span class="linenos"> 63</span></a>    <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">trud_codes_path</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Path</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">):</span>
+</span><span id="Proto-64"><a href="#Proto-64"><span class="linenos"> 64</span></a>        <span class="k">if</span> <span class="n">trud_codes_path</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Proto-65"><a href="#Proto-65"><span class="linenos"> 65</span></a>            <span class="k">if</span> <span class="n">trud_codes_path</span><span class="o">.</span><span class="n">is_file</span><span class="p">():</span>
+</span><span id="Proto-66"><a href="#Proto-66"><span class="linenos"> 66</span></a>                <span class="bp">self</span><span class="o">.</span><span class="n">trud_codes_path</span><span class="p">:</span> <span class="n">Path</span> <span class="o">=</span> <span class="n">trud_codes_path</span>
+</span><span id="Proto-67"><a href="#Proto-67"><span class="linenos"> 67</span></a>                <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_parquet</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">trud_codes_path</span><span class="p">)</span>
+</span><span id="Proto-68"><a href="#Proto-68"><span class="linenos"> 68</span></a>            <span class="k">else</span><span class="p">:</span>
+</span><span id="Proto-69"><a href="#Proto-69"><span class="linenos"> 69</span></a>                <span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span>
+</span><span id="Proto-70"><a href="#Proto-70"><span class="linenos"> 70</span></a>                    <span class="sa">f</span><span class="s2">&quot;Error: Read2 code file &#39;</span><span class="si">{</span><span class="n">trud_codes_path</span><span class="si">}</span><span class="s2">&#39; does not exist. Please ensure you have installed TRUD correctly&quot;</span>
+</span><span id="Proto-71"><a href="#Proto-71"><span class="linenos"> 71</span></a>                <span class="p">)</span>
 </span><span id="Proto-72"><a href="#Proto-72"><span class="linenos"> 72</span></a>
-</span><span id="Proto-73"><a href="#Proto-73"><span class="linenos"> 73</span></a>    <span class="k">def</span><span class="w"> </span><span class="nf">in_database</span><span class="p">(</span>
-</span><span id="Proto-74"><a href="#Proto-74"><span class="linenos"> 74</span></a>        <span class="bp">self</span><span class="p">,</span> <span class="n">codes</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">,</span> <span class="n">db</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">,</span> <span class="n">col</span><span class="p">:</span> <span class="nb">str</span>
-</span><span id="Proto-75"><a href="#Proto-75"><span class="linenos"> 75</span></a>    <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">:</span>
-</span><span id="Proto-76"><a href="#Proto-76"><span class="linenos"> 76</span></a>        <span class="k">return</span> <span class="n">codes</span><span class="o">.</span><span class="n">isin</span><span class="p">(</span><span class="n">db</span><span class="p">[</span><span class="n">col</span><span class="p">])</span>
-</span><span id="Proto-77"><a href="#Proto-77"><span class="linenos"> 77</span></a>
-</span><span id="Proto-78"><a href="#Proto-78"><span class="linenos"> 78</span></a>    <span class="k">def</span><span class="w"> </span><span class="nf">process</span><span class="p">(</span>
-</span><span id="Proto-79"><a href="#Proto-79"><span class="linenos"> 79</span></a>        <span class="bp">self</span><span class="p">,</span> <span class="n">codes</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="n">Path</span>
-</span><span id="Proto-80"><a href="#Proto-80"><span class="linenos"> 80</span></a>    <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Tuple</span><span class="p">[</span><span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">,</span> <span class="nb">list</span><span class="p">]:</span>
-</span><span id="Proto-81"><a href="#Proto-81"><span class="linenos"> 81</span></a><span class="w">        </span><span class="sd">&quot;&quot;&quot;identify issues that do not pass and fix them with define/d process&quot;&quot;&quot;</span>
-</span><span id="Proto-82"><a href="#Proto-82"><span class="linenos"> 82</span></a>        <span class="n">errors</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Proto-83"><a href="#Proto-83"><span class="linenos"> 83</span></a>        <span class="c1"># Iter through each item in check.</span>
-</span><span id="Proto-84"><a href="#Proto-84"><span class="linenos"> 84</span></a>        <span class="k">for</span> <span class="n">msg</span><span class="p">,</span> <span class="n">cond</span><span class="p">,</span> <span class="n">fix</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">checks</span><span class="p">:</span>
-</span><span id="Proto-85"><a href="#Proto-85"><span class="linenos"> 85</span></a>            <span class="c1"># Check if any codes fail the check to False</span>
-</span><span id="Proto-86"><a href="#Proto-86"><span class="linenos"> 86</span></a>            <span class="k">if</span> <span class="ow">not</span> <span class="n">cond</span><span class="p">(</span><span class="n">codes</span><span class="p">)</span><span class="o">.</span><span class="n">all</span><span class="p">():</span>
-</span><span id="Proto-87"><a href="#Proto-87"><span class="linenos"> 87</span></a>                <span class="c1"># Log the number of codes that failed</span>
-</span><span id="Proto-88"><a href="#Proto-88"><span class="linenos"> 88</span></a>                <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span>
-</span><span id="Proto-89"><a href="#Proto-89"><span class="linenos"> 89</span></a>                    <span class="sa">f</span><span class="s2">&quot;Check: </span><span class="si">{</span><span class="n">msg</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="p">(</span><span class="o">~</span><span class="n">cond</span><span class="p">(</span><span class="n">codes</span><span class="p">))</span><span class="o">.</span><span class="n">sum</span><span class="p">()</span><span class="si">}</span><span class="s2"> failed, trying to fix&quot;</span>
-</span><span id="Proto-90"><a href="#Proto-90"><span class="linenos"> 90</span></a>                <span class="p">)</span>
-</span><span id="Proto-91"><a href="#Proto-91"><span class="linenos"> 91</span></a>                <span class="c1"># try fix errors by running lamba &quot;process&quot; function</span>
-</span><span id="Proto-92"><a href="#Proto-92"><span class="linenos"> 92</span></a>                <span class="k">try</span><span class="p">:</span>
-</span><span id="Proto-93"><a href="#Proto-93"><span class="linenos"> 93</span></a>                    <span class="n">codes</span> <span class="o">=</span> <span class="n">fix</span><span class="p">(</span><span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">)</span>
-</span><span id="Proto-94"><a href="#Proto-94"><span class="linenos"> 94</span></a>                    <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Check: Fixed&quot;</span><span class="p">)</span>
-</span><span id="Proto-95"><a href="#Proto-95"><span class="linenos"> 95</span></a>                <span class="k">except</span> <span class="n">InvalidCodesException</span> <span class="k">as</span> <span class="n">ex</span><span class="p">:</span>
-</span><span id="Proto-96"><a href="#Proto-96"><span class="linenos"> 96</span></a>                    <span class="n">errors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">ex</span><span class="o">.</span><span class="n">error</span><span class="p">)</span>
-</span><span id="Proto-97"><a href="#Proto-97"><span class="linenos"> 97</span></a>            <span class="k">else</span><span class="p">:</span>
-</span><span id="Proto-98"><a href="#Proto-98"><span class="linenos"> 98</span></a>                <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Check: passed&quot;</span><span class="p">)</span>
-</span><span id="Proto-99"><a href="#Proto-99"><span class="linenos"> 99</span></a>
-</span><span id="Proto-100"><a href="#Proto-100"><span class="linenos">100</span></a>        <span class="k">return</span> <span class="n">codes</span><span class="p">,</span> <span class="n">errors</span>
-</span><span id="Proto-101"><a href="#Proto-101"><span class="linenos">101</span></a>
-</span><span id="Proto-102"><a href="#Proto-102"><span class="linenos">102</span></a>    <span class="k">def</span><span class="w"> </span><span class="nf">verify</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">codes</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="n">Path</span><span class="p">):</span>
-</span><span id="Proto-103"><a href="#Proto-103"><span class="linenos">103</span></a><span class="w">        </span><span class="sd">&quot;&quot;&quot;verify codes in codes file&quot;&quot;&quot;</span>
-</span><span id="Proto-104"><a href="#Proto-104"><span class="linenos">104</span></a>        <span class="n">conds</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([])</span>
+</span><span id="Proto-73"><a href="#Proto-73"><span class="linenos"> 73</span></a>        <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="n">name</span>
+</span><span id="Proto-74"><a href="#Proto-74"><span class="linenos"> 74</span></a>
+</span><span id="Proto-75"><a href="#Proto-75"><span class="linenos"> 75</span></a>    <span class="k">def</span><span class="w"> </span><span class="nf">raise_exception</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ex</span><span class="p">:</span> <span class="ne">Exception</span><span class="p">):</span>
+</span><span id="Proto-76"><a href="#Proto-76"><span class="linenos"> 76</span></a><span class="w">        </span><span class="sd">&quot;&quot;&quot;Raises an exception inside a lambda function. Python does not allow using raise statement inside lambda because lambda can only contain expressions, not statements. Using raise_exception not raise_ as it&#39;s more explict&quot;&quot;&quot;</span>
+</span><span id="Proto-77"><a href="#Proto-77"><span class="linenos"> 77</span></a>        <span class="k">raise</span> <span class="n">ex</span>
+</span><span id="Proto-78"><a href="#Proto-78"><span class="linenos"> 78</span></a>
+</span><span id="Proto-79"><a href="#Proto-79"><span class="linenos"> 79</span></a>    <span class="k">def</span><span class="w"> </span><span class="nf">in_database</span><span class="p">(</span>
+</span><span id="Proto-80"><a href="#Proto-80"><span class="linenos"> 80</span></a>        <span class="bp">self</span><span class="p">,</span> <span class="n">codes</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">,</span> <span class="n">db</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">,</span> <span class="n">col</span><span class="p">:</span> <span class="nb">str</span>
+</span><span id="Proto-81"><a href="#Proto-81"><span class="linenos"> 81</span></a>    <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">:</span>
+</span><span id="Proto-82"><a href="#Proto-82"><span class="linenos"> 82</span></a>        <span class="k">return</span> <span class="n">codes</span><span class="o">.</span><span class="n">isin</span><span class="p">(</span><span class="n">db</span><span class="p">[</span><span class="n">col</span><span class="p">])</span>
+</span><span id="Proto-83"><a href="#Proto-83"><span class="linenos"> 83</span></a>
+</span><span id="Proto-84"><a href="#Proto-84"><span class="linenos"> 84</span></a>    <span class="k">def</span><span class="w"> </span><span class="nf">process</span><span class="p">(</span>
+</span><span id="Proto-85"><a href="#Proto-85"><span class="linenos"> 85</span></a>        <span class="bp">self</span><span class="p">,</span> <span class="n">codes</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="n">Path</span>
+</span><span id="Proto-86"><a href="#Proto-86"><span class="linenos"> 86</span></a>    <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Tuple</span><span class="p">[</span><span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">,</span> <span class="nb">list</span><span class="p">]:</span>
+</span><span id="Proto-87"><a href="#Proto-87"><span class="linenos"> 87</span></a><span class="w">        </span><span class="sd">&quot;&quot;&quot;identify issues that do not pass and fix them with define/d process&quot;&quot;&quot;</span>
+</span><span id="Proto-88"><a href="#Proto-88"><span class="linenos"> 88</span></a>        <span class="n">errors</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Proto-89"><a href="#Proto-89"><span class="linenos"> 89</span></a>        <span class="c1"># Iter through each item in check.</span>
+</span><span id="Proto-90"><a href="#Proto-90"><span class="linenos"> 90</span></a>        <span class="k">for</span> <span class="n">msg</span><span class="p">,</span> <span class="n">cond</span><span class="p">,</span> <span class="n">fix</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">checks</span><span class="p">:</span>
+</span><span id="Proto-91"><a href="#Proto-91"><span class="linenos"> 91</span></a>            <span class="c1"># Check if any codes fail the check to False</span>
+</span><span id="Proto-92"><a href="#Proto-92"><span class="linenos"> 92</span></a>            <span class="k">if</span> <span class="ow">not</span> <span class="n">cond</span><span class="p">(</span><span class="n">codes</span><span class="p">)</span><span class="o">.</span><span class="n">all</span><span class="p">():</span>
+</span><span id="Proto-93"><a href="#Proto-93"><span class="linenos"> 93</span></a>                <span class="c1"># Log the number of codes that failed</span>
+</span><span id="Proto-94"><a href="#Proto-94"><span class="linenos"> 94</span></a>                <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span>
+</span><span id="Proto-95"><a href="#Proto-95"><span class="linenos"> 95</span></a>                    <span class="sa">f</span><span class="s2">&quot;Check: </span><span class="si">{</span><span class="n">msg</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="p">(</span><span class="o">~</span><span class="n">cond</span><span class="p">(</span><span class="n">codes</span><span class="p">))</span><span class="o">.</span><span class="n">sum</span><span class="p">()</span><span class="si">}</span><span class="s2"> failed, trying to fix&quot;</span>
+</span><span id="Proto-96"><a href="#Proto-96"><span class="linenos"> 96</span></a>                <span class="p">)</span>
+</span><span id="Proto-97"><a href="#Proto-97"><span class="linenos"> 97</span></a>                <span class="c1"># try fix errors by running lamba &quot;process&quot; function</span>
+</span><span id="Proto-98"><a href="#Proto-98"><span class="linenos"> 98</span></a>                <span class="k">try</span><span class="p">:</span>
+</span><span id="Proto-99"><a href="#Proto-99"><span class="linenos"> 99</span></a>                    <span class="n">codes</span> <span class="o">=</span> <span class="n">fix</span><span class="p">(</span><span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">)</span>
+</span><span id="Proto-100"><a href="#Proto-100"><span class="linenos">100</span></a>                    <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Check: Fixed&quot;</span><span class="p">)</span>
+</span><span id="Proto-101"><a href="#Proto-101"><span class="linenos">101</span></a>                <span class="k">except</span> <span class="n">InvalidCodesException</span> <span class="k">as</span> <span class="n">ex</span><span class="p">:</span>
+</span><span id="Proto-102"><a href="#Proto-102"><span class="linenos">102</span></a>                    <span class="n">errors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">ex</span><span class="o">.</span><span class="n">error</span><span class="p">)</span>
+</span><span id="Proto-103"><a href="#Proto-103"><span class="linenos">103</span></a>            <span class="k">else</span><span class="p">:</span>
+</span><span id="Proto-104"><a href="#Proto-104"><span class="linenos">104</span></a>                <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Check: passed&quot;</span><span class="p">)</span>
 </span><span id="Proto-105"><a href="#Proto-105"><span class="linenos">105</span></a>
-</span><span id="Proto-106"><a href="#Proto-106"><span class="linenos">106</span></a>        <span class="c1"># Iter through each item in check.</span>
-</span><span id="Proto-107"><a href="#Proto-107"><span class="linenos">107</span></a>        <span class="k">for</span> <span class="n">msg</span><span class="p">,</span> <span class="n">cond</span><span class="p">,</span> <span class="n">process</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">checks</span><span class="p">:</span>
-</span><span id="Proto-108"><a href="#Proto-108"><span class="linenos">108</span></a>            <span class="c1"># run conditional check</span>
-</span><span id="Proto-109"><a href="#Proto-109"><span class="linenos">109</span></a>            <span class="n">out</span> <span class="o">=</span> <span class="n">cond</span><span class="p">(</span><span class="n">codes</span><span class="p">)</span>
-</span><span id="Proto-110"><a href="#Proto-110"><span class="linenos">110</span></a>            <span class="n">conds</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">conds</span><span class="p">,</span> <span class="n">out</span><span class="o">.</span><span class="n">all</span><span class="p">())</span>
+</span><span id="Proto-106"><a href="#Proto-106"><span class="linenos">106</span></a>        <span class="k">return</span> <span class="n">codes</span><span class="p">,</span> <span class="n">errors</span>
+</span><span id="Proto-107"><a href="#Proto-107"><span class="linenos">107</span></a>
+</span><span id="Proto-108"><a href="#Proto-108"><span class="linenos">108</span></a>    <span class="k">def</span><span class="w"> </span><span class="nf">verify</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">codes</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="n">Path</span><span class="p">):</span>
+</span><span id="Proto-109"><a href="#Proto-109"><span class="linenos">109</span></a><span class="w">        </span><span class="sd">&quot;&quot;&quot;verify codes in codes file&quot;&quot;&quot;</span>
+</span><span id="Proto-110"><a href="#Proto-110"><span class="linenos">110</span></a>        <span class="n">conds</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([])</span>
 </span><span id="Proto-111"><a href="#Proto-111"><span class="linenos">111</span></a>
-</span><span id="Proto-112"><a href="#Proto-112"><span class="linenos">112</span></a>        <span class="k">return</span> <span class="n">conds</span>
+</span><span id="Proto-112"><a href="#Proto-112"><span class="linenos">112</span></a>        <span class="c1"># Iter through each item in check.</span>
+</span><span id="Proto-113"><a href="#Proto-113"><span class="linenos">113</span></a>        <span class="k">for</span> <span class="n">msg</span><span class="p">,</span> <span class="n">cond</span><span class="p">,</span> <span class="n">process</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">checks</span><span class="p">:</span>
+</span><span id="Proto-114"><a href="#Proto-114"><span class="linenos">114</span></a>            <span class="c1"># run conditional check</span>
+</span><span id="Proto-115"><a href="#Proto-115"><span class="linenos">115</span></a>            <span class="n">out</span> <span class="o">=</span> <span class="n">cond</span><span class="p">(</span><span class="n">codes</span><span class="p">)</span>
+</span><span id="Proto-116"><a href="#Proto-116"><span class="linenos">116</span></a>            <span class="n">conds</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">conds</span><span class="p">,</span> <span class="n">out</span><span class="o">.</span><span class="n">all</span><span class="p">())</span>
+</span><span id="Proto-117"><a href="#Proto-117"><span class="linenos">117</span></a>
+</span><span id="Proto-118"><a href="#Proto-118"><span class="linenos">118</span></a>        <span class="k">return</span> <span class="n">conds</span>
 </span></pre></div>
 
 
@@ -989,17 +986,17 @@
 
     </div>
     <a class="headerlink" href="#Proto.__init__"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="Proto.__init__-57"><a href="#Proto.__init__-57"><span class="linenos">57</span></a>    <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">trud_codes_path</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Path</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">):</span>
-</span><span id="Proto.__init__-58"><a href="#Proto.__init__-58"><span class="linenos">58</span></a>        <span class="k">if</span> <span class="n">trud_codes_path</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="Proto.__init__-59"><a href="#Proto.__init__-59"><span class="linenos">59</span></a>            <span class="k">if</span> <span class="n">trud_codes_path</span><span class="o">.</span><span class="n">is_file</span><span class="p">():</span>
-</span><span id="Proto.__init__-60"><a href="#Proto.__init__-60"><span class="linenos">60</span></a>                <span class="bp">self</span><span class="o">.</span><span class="n">trud_codes_path</span><span class="p">:</span> <span class="n">Path</span> <span class="o">=</span> <span class="n">trud_codes_path</span>
-</span><span id="Proto.__init__-61"><a href="#Proto.__init__-61"><span class="linenos">61</span></a>                <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_parquet</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">trud_codes_path</span><span class="p">)</span>
-</span><span id="Proto.__init__-62"><a href="#Proto.__init__-62"><span class="linenos">62</span></a>            <span class="k">else</span><span class="p">:</span>
-</span><span id="Proto.__init__-63"><a href="#Proto.__init__-63"><span class="linenos">63</span></a>                <span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span>
-</span><span id="Proto.__init__-64"><a href="#Proto.__init__-64"><span class="linenos">64</span></a>                    <span class="sa">f</span><span class="s2">&quot;Error: Read2 code file &#39;</span><span class="si">{</span><span class="n">trud_codes_path</span><span class="si">}</span><span class="s2">&#39; does not exist. Please ensure you have installed TRUD correctly&quot;</span>
-</span><span id="Proto.__init__-65"><a href="#Proto.__init__-65"><span class="linenos">65</span></a>                <span class="p">)</span>
-</span><span id="Proto.__init__-66"><a href="#Proto.__init__-66"><span class="linenos">66</span></a>
-</span><span id="Proto.__init__-67"><a href="#Proto.__init__-67"><span class="linenos">67</span></a>        <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="n">name</span>
+            <div class="pdoc-code codehilite"><pre><span></span><span id="Proto.__init__-63"><a href="#Proto.__init__-63"><span class="linenos">63</span></a>    <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">trud_codes_path</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Path</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span><span class="p">):</span>
+</span><span id="Proto.__init__-64"><a href="#Proto.__init__-64"><span class="linenos">64</span></a>        <span class="k">if</span> <span class="n">trud_codes_path</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="Proto.__init__-65"><a href="#Proto.__init__-65"><span class="linenos">65</span></a>            <span class="k">if</span> <span class="n">trud_codes_path</span><span class="o">.</span><span class="n">is_file</span><span class="p">():</span>
+</span><span id="Proto.__init__-66"><a href="#Proto.__init__-66"><span class="linenos">66</span></a>                <span class="bp">self</span><span class="o">.</span><span class="n">trud_codes_path</span><span class="p">:</span> <span class="n">Path</span> <span class="o">=</span> <span class="n">trud_codes_path</span>
+</span><span id="Proto.__init__-67"><a href="#Proto.__init__-67"><span class="linenos">67</span></a>                <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_parquet</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">trud_codes_path</span><span class="p">)</span>
+</span><span id="Proto.__init__-68"><a href="#Proto.__init__-68"><span class="linenos">68</span></a>            <span class="k">else</span><span class="p">:</span>
+</span><span id="Proto.__init__-69"><a href="#Proto.__init__-69"><span class="linenos">69</span></a>                <span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span>
+</span><span id="Proto.__init__-70"><a href="#Proto.__init__-70"><span class="linenos">70</span></a>                    <span class="sa">f</span><span class="s2">&quot;Error: Read2 code file &#39;</span><span class="si">{</span><span class="n">trud_codes_path</span><span class="si">}</span><span class="s2">&#39; does not exist. Please ensure you have installed TRUD correctly&quot;</span>
+</span><span id="Proto.__init__-71"><a href="#Proto.__init__-71"><span class="linenos">71</span></a>                <span class="p">)</span>
+</span><span id="Proto.__init__-72"><a href="#Proto.__init__-72"><span class="linenos">72</span></a>
+</span><span id="Proto.__init__-73"><a href="#Proto.__init__-73"><span class="linenos">73</span></a>        <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="n">name</span>
 </span></pre></div>
 
 
@@ -1039,9 +1036,9 @@
 
     </div>
     <a class="headerlink" href="#Proto.raise_exception"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="Proto.raise_exception-69"><a href="#Proto.raise_exception-69"><span class="linenos">69</span></a>    <span class="k">def</span><span class="w"> </span><span class="nf">raise_exception</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ex</span><span class="p">:</span> <span class="ne">Exception</span><span class="p">):</span>
-</span><span id="Proto.raise_exception-70"><a href="#Proto.raise_exception-70"><span class="linenos">70</span></a><span class="w">        </span><span class="sd">&quot;&quot;&quot;Raises an exception inside a lambda function. Python does not allow using raise statement inside lambda because lambda can only contain expressions, not statements. Using raise_exception not raise_ as it&#39;s more explict&quot;&quot;&quot;</span>
-</span><span id="Proto.raise_exception-71"><a href="#Proto.raise_exception-71"><span class="linenos">71</span></a>        <span class="k">raise</span> <span class="n">ex</span>
+            <div class="pdoc-code codehilite"><pre><span></span><span id="Proto.raise_exception-75"><a href="#Proto.raise_exception-75"><span class="linenos">75</span></a>    <span class="k">def</span><span class="w"> </span><span class="nf">raise_exception</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ex</span><span class="p">:</span> <span class="ne">Exception</span><span class="p">):</span>
+</span><span id="Proto.raise_exception-76"><a href="#Proto.raise_exception-76"><span class="linenos">76</span></a><span class="w">        </span><span class="sd">&quot;&quot;&quot;Raises an exception inside a lambda function. Python does not allow using raise statement inside lambda because lambda can only contain expressions, not statements. Using raise_exception not raise_ as it&#39;s more explict&quot;&quot;&quot;</span>
+</span><span id="Proto.raise_exception-77"><a href="#Proto.raise_exception-77"><span class="linenos">77</span></a>        <span class="k">raise</span> <span class="n">ex</span>
 </span></pre></div>
 
 
@@ -1061,10 +1058,10 @@
 
     </div>
     <a class="headerlink" href="#Proto.in_database"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="Proto.in_database-73"><a href="#Proto.in_database-73"><span class="linenos">73</span></a>    <span class="k">def</span><span class="w"> </span><span class="nf">in_database</span><span class="p">(</span>
-</span><span id="Proto.in_database-74"><a href="#Proto.in_database-74"><span class="linenos">74</span></a>        <span class="bp">self</span><span class="p">,</span> <span class="n">codes</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">,</span> <span class="n">db</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">,</span> <span class="n">col</span><span class="p">:</span> <span class="nb">str</span>
-</span><span id="Proto.in_database-75"><a href="#Proto.in_database-75"><span class="linenos">75</span></a>    <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">:</span>
-</span><span id="Proto.in_database-76"><a href="#Proto.in_database-76"><span class="linenos">76</span></a>        <span class="k">return</span> <span class="n">codes</span><span class="o">.</span><span class="n">isin</span><span class="p">(</span><span class="n">db</span><span class="p">[</span><span class="n">col</span><span class="p">])</span>
+            <div class="pdoc-code codehilite"><pre><span></span><span id="Proto.in_database-79"><a href="#Proto.in_database-79"><span class="linenos">79</span></a>    <span class="k">def</span><span class="w"> </span><span class="nf">in_database</span><span class="p">(</span>
+</span><span id="Proto.in_database-80"><a href="#Proto.in_database-80"><span class="linenos">80</span></a>        <span class="bp">self</span><span class="p">,</span> <span class="n">codes</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">,</span> <span class="n">db</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">,</span> <span class="n">col</span><span class="p">:</span> <span class="nb">str</span>
+</span><span id="Proto.in_database-81"><a href="#Proto.in_database-81"><span class="linenos">81</span></a>    <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">:</span>
+</span><span id="Proto.in_database-82"><a href="#Proto.in_database-82"><span class="linenos">82</span></a>        <span class="k">return</span> <span class="n">codes</span><span class="o">.</span><span class="n">isin</span><span class="p">(</span><span class="n">db</span><span class="p">[</span><span class="n">col</span><span class="p">])</span>
 </span></pre></div>
 
 
@@ -1082,29 +1079,29 @@
 
     </div>
     <a class="headerlink" href="#Proto.process"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="Proto.process-78"><a href="#Proto.process-78"><span class="linenos"> 78</span></a>    <span class="k">def</span><span class="w"> </span><span class="nf">process</span><span class="p">(</span>
-</span><span id="Proto.process-79"><a href="#Proto.process-79"><span class="linenos"> 79</span></a>        <span class="bp">self</span><span class="p">,</span> <span class="n">codes</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="n">Path</span>
-</span><span id="Proto.process-80"><a href="#Proto.process-80"><span class="linenos"> 80</span></a>    <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Tuple</span><span class="p">[</span><span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">,</span> <span class="nb">list</span><span class="p">]:</span>
-</span><span id="Proto.process-81"><a href="#Proto.process-81"><span class="linenos"> 81</span></a><span class="w">        </span><span class="sd">&quot;&quot;&quot;identify issues that do not pass and fix them with define/d process&quot;&quot;&quot;</span>
-</span><span id="Proto.process-82"><a href="#Proto.process-82"><span class="linenos"> 82</span></a>        <span class="n">errors</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="Proto.process-83"><a href="#Proto.process-83"><span class="linenos"> 83</span></a>        <span class="c1"># Iter through each item in check.</span>
-</span><span id="Proto.process-84"><a href="#Proto.process-84"><span class="linenos"> 84</span></a>        <span class="k">for</span> <span class="n">msg</span><span class="p">,</span> <span class="n">cond</span><span class="p">,</span> <span class="n">fix</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">checks</span><span class="p">:</span>
-</span><span id="Proto.process-85"><a href="#Proto.process-85"><span class="linenos"> 85</span></a>            <span class="c1"># Check if any codes fail the check to False</span>
-</span><span id="Proto.process-86"><a href="#Proto.process-86"><span class="linenos"> 86</span></a>            <span class="k">if</span> <span class="ow">not</span> <span class="n">cond</span><span class="p">(</span><span class="n">codes</span><span class="p">)</span><span class="o">.</span><span class="n">all</span><span class="p">():</span>
-</span><span id="Proto.process-87"><a href="#Proto.process-87"><span class="linenos"> 87</span></a>                <span class="c1"># Log the number of codes that failed</span>
-</span><span id="Proto.process-88"><a href="#Proto.process-88"><span class="linenos"> 88</span></a>                <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span>
-</span><span id="Proto.process-89"><a href="#Proto.process-89"><span class="linenos"> 89</span></a>                    <span class="sa">f</span><span class="s2">&quot;Check: </span><span class="si">{</span><span class="n">msg</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="p">(</span><span class="o">~</span><span class="n">cond</span><span class="p">(</span><span class="n">codes</span><span class="p">))</span><span class="o">.</span><span class="n">sum</span><span class="p">()</span><span class="si">}</span><span class="s2"> failed, trying to fix&quot;</span>
-</span><span id="Proto.process-90"><a href="#Proto.process-90"><span class="linenos"> 90</span></a>                <span class="p">)</span>
-</span><span id="Proto.process-91"><a href="#Proto.process-91"><span class="linenos"> 91</span></a>                <span class="c1"># try fix errors by running lamba &quot;process&quot; function</span>
-</span><span id="Proto.process-92"><a href="#Proto.process-92"><span class="linenos"> 92</span></a>                <span class="k">try</span><span class="p">:</span>
-</span><span id="Proto.process-93"><a href="#Proto.process-93"><span class="linenos"> 93</span></a>                    <span class="n">codes</span> <span class="o">=</span> <span class="n">fix</span><span class="p">(</span><span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">)</span>
-</span><span id="Proto.process-94"><a href="#Proto.process-94"><span class="linenos"> 94</span></a>                    <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Check: Fixed&quot;</span><span class="p">)</span>
-</span><span id="Proto.process-95"><a href="#Proto.process-95"><span class="linenos"> 95</span></a>                <span class="k">except</span> <span class="n">InvalidCodesException</span> <span class="k">as</span> <span class="n">ex</span><span class="p">:</span>
-</span><span id="Proto.process-96"><a href="#Proto.process-96"><span class="linenos"> 96</span></a>                    <span class="n">errors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">ex</span><span class="o">.</span><span class="n">error</span><span class="p">)</span>
-</span><span id="Proto.process-97"><a href="#Proto.process-97"><span class="linenos"> 97</span></a>            <span class="k">else</span><span class="p">:</span>
-</span><span id="Proto.process-98"><a href="#Proto.process-98"><span class="linenos"> 98</span></a>                <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Check: passed&quot;</span><span class="p">)</span>
-</span><span id="Proto.process-99"><a href="#Proto.process-99"><span class="linenos"> 99</span></a>
-</span><span id="Proto.process-100"><a href="#Proto.process-100"><span class="linenos">100</span></a>        <span class="k">return</span> <span class="n">codes</span><span class="p">,</span> <span class="n">errors</span>
+            <div class="pdoc-code codehilite"><pre><span></span><span id="Proto.process-84"><a href="#Proto.process-84"><span class="linenos"> 84</span></a>    <span class="k">def</span><span class="w"> </span><span class="nf">process</span><span class="p">(</span>
+</span><span id="Proto.process-85"><a href="#Proto.process-85"><span class="linenos"> 85</span></a>        <span class="bp">self</span><span class="p">,</span> <span class="n">codes</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="n">Path</span>
+</span><span id="Proto.process-86"><a href="#Proto.process-86"><span class="linenos"> 86</span></a>    <span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Tuple</span><span class="p">[</span><span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">,</span> <span class="nb">list</span><span class="p">]:</span>
+</span><span id="Proto.process-87"><a href="#Proto.process-87"><span class="linenos"> 87</span></a><span class="w">        </span><span class="sd">&quot;&quot;&quot;identify issues that do not pass and fix them with define/d process&quot;&quot;&quot;</span>
+</span><span id="Proto.process-88"><a href="#Proto.process-88"><span class="linenos"> 88</span></a>        <span class="n">errors</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="Proto.process-89"><a href="#Proto.process-89"><span class="linenos"> 89</span></a>        <span class="c1"># Iter through each item in check.</span>
+</span><span id="Proto.process-90"><a href="#Proto.process-90"><span class="linenos"> 90</span></a>        <span class="k">for</span> <span class="n">msg</span><span class="p">,</span> <span class="n">cond</span><span class="p">,</span> <span class="n">fix</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">checks</span><span class="p">:</span>
+</span><span id="Proto.process-91"><a href="#Proto.process-91"><span class="linenos"> 91</span></a>            <span class="c1"># Check if any codes fail the check to False</span>
+</span><span id="Proto.process-92"><a href="#Proto.process-92"><span class="linenos"> 92</span></a>            <span class="k">if</span> <span class="ow">not</span> <span class="n">cond</span><span class="p">(</span><span class="n">codes</span><span class="p">)</span><span class="o">.</span><span class="n">all</span><span class="p">():</span>
+</span><span id="Proto.process-93"><a href="#Proto.process-93"><span class="linenos"> 93</span></a>                <span class="c1"># Log the number of codes that failed</span>
+</span><span id="Proto.process-94"><a href="#Proto.process-94"><span class="linenos"> 94</span></a>                <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span>
+</span><span id="Proto.process-95"><a href="#Proto.process-95"><span class="linenos"> 95</span></a>                    <span class="sa">f</span><span class="s2">&quot;Check: </span><span class="si">{</span><span class="n">msg</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="p">(</span><span class="o">~</span><span class="n">cond</span><span class="p">(</span><span class="n">codes</span><span class="p">))</span><span class="o">.</span><span class="n">sum</span><span class="p">()</span><span class="si">}</span><span class="s2"> failed, trying to fix&quot;</span>
+</span><span id="Proto.process-96"><a href="#Proto.process-96"><span class="linenos"> 96</span></a>                <span class="p">)</span>
+</span><span id="Proto.process-97"><a href="#Proto.process-97"><span class="linenos"> 97</span></a>                <span class="c1"># try fix errors by running lamba &quot;process&quot; function</span>
+</span><span id="Proto.process-98"><a href="#Proto.process-98"><span class="linenos"> 98</span></a>                <span class="k">try</span><span class="p">:</span>
+</span><span id="Proto.process-99"><a href="#Proto.process-99"><span class="linenos"> 99</span></a>                    <span class="n">codes</span> <span class="o">=</span> <span class="n">fix</span><span class="p">(</span><span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">)</span>
+</span><span id="Proto.process-100"><a href="#Proto.process-100"><span class="linenos">100</span></a>                    <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Check: Fixed&quot;</span><span class="p">)</span>
+</span><span id="Proto.process-101"><a href="#Proto.process-101"><span class="linenos">101</span></a>                <span class="k">except</span> <span class="n">InvalidCodesException</span> <span class="k">as</span> <span class="n">ex</span><span class="p">:</span>
+</span><span id="Proto.process-102"><a href="#Proto.process-102"><span class="linenos">102</span></a>                    <span class="n">errors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">ex</span><span class="o">.</span><span class="n">error</span><span class="p">)</span>
+</span><span id="Proto.process-103"><a href="#Proto.process-103"><span class="linenos">103</span></a>            <span class="k">else</span><span class="p">:</span>
+</span><span id="Proto.process-104"><a href="#Proto.process-104"><span class="linenos">104</span></a>                <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Check: passed&quot;</span><span class="p">)</span>
+</span><span id="Proto.process-105"><a href="#Proto.process-105"><span class="linenos">105</span></a>
+</span><span id="Proto.process-106"><a href="#Proto.process-106"><span class="linenos">106</span></a>        <span class="k">return</span> <span class="n">codes</span><span class="p">,</span> <span class="n">errors</span>
 </span></pre></div>
 
 
@@ -1124,17 +1121,17 @@
 
     </div>
     <a class="headerlink" href="#Proto.verify"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="Proto.verify-102"><a href="#Proto.verify-102"><span class="linenos">102</span></a>    <span class="k">def</span><span class="w"> </span><span class="nf">verify</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">codes</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="n">Path</span><span class="p">):</span>
-</span><span id="Proto.verify-103"><a href="#Proto.verify-103"><span class="linenos">103</span></a><span class="w">        </span><span class="sd">&quot;&quot;&quot;verify codes in codes file&quot;&quot;&quot;</span>
-</span><span id="Proto.verify-104"><a href="#Proto.verify-104"><span class="linenos">104</span></a>        <span class="n">conds</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([])</span>
-</span><span id="Proto.verify-105"><a href="#Proto.verify-105"><span class="linenos">105</span></a>
-</span><span id="Proto.verify-106"><a href="#Proto.verify-106"><span class="linenos">106</span></a>        <span class="c1"># Iter through each item in check.</span>
-</span><span id="Proto.verify-107"><a href="#Proto.verify-107"><span class="linenos">107</span></a>        <span class="k">for</span> <span class="n">msg</span><span class="p">,</span> <span class="n">cond</span><span class="p">,</span> <span class="n">process</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">checks</span><span class="p">:</span>
-</span><span id="Proto.verify-108"><a href="#Proto.verify-108"><span class="linenos">108</span></a>            <span class="c1"># run conditional check</span>
-</span><span id="Proto.verify-109"><a href="#Proto.verify-109"><span class="linenos">109</span></a>            <span class="n">out</span> <span class="o">=</span> <span class="n">cond</span><span class="p">(</span><span class="n">codes</span><span class="p">)</span>
-</span><span id="Proto.verify-110"><a href="#Proto.verify-110"><span class="linenos">110</span></a>            <span class="n">conds</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">conds</span><span class="p">,</span> <span class="n">out</span><span class="o">.</span><span class="n">all</span><span class="p">())</span>
+            <div class="pdoc-code codehilite"><pre><span></span><span id="Proto.verify-108"><a href="#Proto.verify-108"><span class="linenos">108</span></a>    <span class="k">def</span><span class="w"> </span><span class="nf">verify</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">codes</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="n">Path</span><span class="p">):</span>
+</span><span id="Proto.verify-109"><a href="#Proto.verify-109"><span class="linenos">109</span></a><span class="w">        </span><span class="sd">&quot;&quot;&quot;verify codes in codes file&quot;&quot;&quot;</span>
+</span><span id="Proto.verify-110"><a href="#Proto.verify-110"><span class="linenos">110</span></a>        <span class="n">conds</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([])</span>
 </span><span id="Proto.verify-111"><a href="#Proto.verify-111"><span class="linenos">111</span></a>
-</span><span id="Proto.verify-112"><a href="#Proto.verify-112"><span class="linenos">112</span></a>        <span class="k">return</span> <span class="n">conds</span>
+</span><span id="Proto.verify-112"><a href="#Proto.verify-112"><span class="linenos">112</span></a>        <span class="c1"># Iter through each item in check.</span>
+</span><span id="Proto.verify-113"><a href="#Proto.verify-113"><span class="linenos">113</span></a>        <span class="k">for</span> <span class="n">msg</span><span class="p">,</span> <span class="n">cond</span><span class="p">,</span> <span class="n">process</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">checks</span><span class="p">:</span>
+</span><span id="Proto.verify-114"><a href="#Proto.verify-114"><span class="linenos">114</span></a>            <span class="c1"># run conditional check</span>
+</span><span id="Proto.verify-115"><a href="#Proto.verify-115"><span class="linenos">115</span></a>            <span class="n">out</span> <span class="o">=</span> <span class="n">cond</span><span class="p">(</span><span class="n">codes</span><span class="p">)</span>
+</span><span id="Proto.verify-116"><a href="#Proto.verify-116"><span class="linenos">116</span></a>            <span class="n">conds</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">conds</span><span class="p">,</span> <span class="n">out</span><span class="o">.</span><span class="n">all</span><span class="p">())</span>
+</span><span id="Proto.verify-117"><a href="#Proto.verify-117"><span class="linenos">117</span></a>
+</span><span id="Proto.verify-118"><a href="#Proto.verify-118"><span class="linenos">118</span></a>        <span class="k">return</span> <span class="n">conds</span>
 </span></pre></div>
 
 
@@ -1155,77 +1152,77 @@
 
     </div>
     <a class="headerlink" href="#Read2"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="Read2-115"><a href="#Read2-115"><span class="linenos">115</span></a><span class="k">class</span><span class="w"> </span><span class="nc">Read2</span><span class="p">(</span><span class="n">Proto</span><span class="p">):</span>
-</span><span id="Read2-116"><a href="#Read2-116"><span class="linenos">116</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;This Read2 class extends Proto, adding custom validation checks for a dataset of &quot;Read2&quot; codes. It ensures that the dataset is loaded, validates the codes based on several rules, and applies corrections or logs errors when necessary.&quot;&quot;&quot;</span>
-</span><span id="Read2-117"><a href="#Read2-117"><span class="linenos">117</span></a>
-</span><span id="Read2-118"><a href="#Read2-118"><span class="linenos">118</span></a>    <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="Read2-119"><a href="#Read2-119"><span class="linenos">119</span></a>        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s2">&quot;read2&quot;</span><span class="p">,</span> <span class="n">trud</span><span class="o">.</span><span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;read2.parquet&quot;</span><span class="p">)</span>
-</span><span id="Read2-120"><a href="#Read2-120"><span class="linenos">120</span></a>
-</span><span id="Read2-121"><a href="#Read2-121"><span class="linenos">121</span></a>        <span class="c1"># validate checks</span>
-</span><span id="Read2-122"><a href="#Read2-122"><span class="linenos">122</span></a>        <span class="bp">self</span><span class="o">.</span><span class="n">checks</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="Read2-123"><a href="#Read2-123"><span class="linenos">123</span></a>            <span class="p">(</span>
-</span><span id="Read2-124"><a href="#Read2-124"><span class="linenos">124</span></a>                <span class="c1"># check codes are not empty, if empty throw an exception</span>
-</span><span id="Read2-125"><a href="#Read2-125"><span class="linenos">125</span></a>                <span class="s2">&quot;Not Empty&quot;</span><span class="p">,</span>
-</span><span id="Read2-126"><a href="#Read2-126"><span class="linenos">126</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">Series</span><span class="p">([</span><span class="nb">len</span><span class="p">(</span><span class="n">codes</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">]),</span>
-</span><span id="Read2-127"><a href="#Read2-127"><span class="linenos">127</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
-</span><span id="Read2-128"><a href="#Read2-128"><span class="linenos">128</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
-</span><span id="Read2-129"><a href="#Read2-129"><span class="linenos">129</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
-</span><span id="Read2-130"><a href="#Read2-130"><span class="linenos">130</span></a>                            <span class="sa">f</span><span class="s2">&quot;Code list is empty&quot;</span><span class="p">,</span>
-</span><span id="Read2-131"><a href="#Read2-131"><span class="linenos">131</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
-</span><span id="Read2-132"><a href="#Read2-132"><span class="linenos">132</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
-</span><span id="Read2-133"><a href="#Read2-133"><span class="linenos">133</span></a>                            <span class="n">mask</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-</span><span id="Read2-134"><a href="#Read2-134"><span class="linenos">134</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
-</span><span id="Read2-135"><a href="#Read2-135"><span class="linenos">135</span></a>                        <span class="p">)</span>
-</span><span id="Read2-136"><a href="#Read2-136"><span class="linenos">136</span></a>                    <span class="p">)</span>
-</span><span id="Read2-137"><a href="#Read2-137"><span class="linenos">137</span></a>                <span class="p">),</span>
-</span><span id="Read2-138"><a href="#Read2-138"><span class="linenos">138</span></a>            <span class="p">),</span>
-</span><span id="Read2-139"><a href="#Read2-139"><span class="linenos">139</span></a>            <span class="p">(</span>
-</span><span id="Read2-140"><a href="#Read2-140"><span class="linenos">140</span></a>                <span class="c1"># check codes &lt;5 characters, if too short pads it with . (dots) to reach 5 characters</span>
-</span><span id="Read2-141"><a href="#Read2-141"><span class="linenos">141</span></a>                <span class="s2">&quot;Too Short&quot;</span><span class="p">,</span>
-</span><span id="Read2-142"><a href="#Read2-142"><span class="linenos">142</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="o">~</span><span class="p">(</span><span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">len</span><span class="p">()</span> <span class="o">&lt;</span> <span class="mi">5</span><span class="p">),</span>
-</span><span id="Read2-143"><a href="#Read2-143"><span class="linenos">143</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">pad</span><span class="p">(</span>
-</span><span id="Read2-144"><a href="#Read2-144"><span class="linenos">144</span></a>                    <span class="n">width</span><span class="o">=</span><span class="mi">5</span><span class="p">,</span> <span class="n">side</span><span class="o">=</span><span class="s2">&quot;right&quot;</span><span class="p">,</span> <span class="n">fillchar</span><span class="o">=</span><span class="s2">&quot;.&quot;</span>
-</span><span id="Read2-145"><a href="#Read2-145"><span class="linenos">145</span></a>                <span class="p">),</span>
-</span><span id="Read2-146"><a href="#Read2-146"><span class="linenos">146</span></a>            <span class="p">),</span>
-</span><span id="Read2-147"><a href="#Read2-147"><span class="linenos">147</span></a>            <span class="p">(</span>
-</span><span id="Read2-148"><a href="#Read2-148"><span class="linenos">148</span></a>                <span class="c1"># check codes &gt; 5 characters, If too long, truncates them to 5 characters</span>
-</span><span id="Read2-149"><a href="#Read2-149"><span class="linenos">149</span></a>                <span class="s2">&quot;Too Long&quot;</span><span class="p">,</span>
-</span><span id="Read2-150"><a href="#Read2-150"><span class="linenos">150</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="o">~</span><span class="p">(</span><span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">len</span><span class="p">()</span> <span class="o">&gt;</span> <span class="mi">5</span><span class="p">),</span>
-</span><span id="Read2-151"><a href="#Read2-151"><span class="linenos">151</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="p">[:</span><span class="mi">5</span><span class="p">],</span>
+            <div class="pdoc-code codehilite"><pre><span></span><span id="Read2-121"><a href="#Read2-121"><span class="linenos">121</span></a><span class="k">class</span><span class="w"> </span><span class="nc">Read2</span><span class="p">(</span><span class="n">Proto</span><span class="p">):</span>
+</span><span id="Read2-122"><a href="#Read2-122"><span class="linenos">122</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;This Read2 class extends Proto, adding custom validation checks for a dataset of &quot;Read2&quot; codes. It ensures that the dataset is loaded, validates the codes based on several rules, and applies corrections or logs errors when necessary.&quot;&quot;&quot;</span>
+</span><span id="Read2-123"><a href="#Read2-123"><span class="linenos">123</span></a>
+</span><span id="Read2-124"><a href="#Read2-124"><span class="linenos">124</span></a>    <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="Read2-125"><a href="#Read2-125"><span class="linenos">125</span></a>        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s2">&quot;read2&quot;</span><span class="p">,</span> <span class="n">trud</span><span class="o">.</span><span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;read2.parquet&quot;</span><span class="p">)</span>
+</span><span id="Read2-126"><a href="#Read2-126"><span class="linenos">126</span></a>
+</span><span id="Read2-127"><a href="#Read2-127"><span class="linenos">127</span></a>        <span class="c1"># validate checks</span>
+</span><span id="Read2-128"><a href="#Read2-128"><span class="linenos">128</span></a>        <span class="bp">self</span><span class="o">.</span><span class="n">checks</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="Read2-129"><a href="#Read2-129"><span class="linenos">129</span></a>            <span class="p">(</span>
+</span><span id="Read2-130"><a href="#Read2-130"><span class="linenos">130</span></a>                <span class="c1"># check codes are not empty, if empty throw an exception</span>
+</span><span id="Read2-131"><a href="#Read2-131"><span class="linenos">131</span></a>                <span class="s2">&quot;Not Empty&quot;</span><span class="p">,</span>
+</span><span id="Read2-132"><a href="#Read2-132"><span class="linenos">132</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">Series</span><span class="p">([</span><span class="nb">len</span><span class="p">(</span><span class="n">codes</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">]),</span>
+</span><span id="Read2-133"><a href="#Read2-133"><span class="linenos">133</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
+</span><span id="Read2-134"><a href="#Read2-134"><span class="linenos">134</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
+</span><span id="Read2-135"><a href="#Read2-135"><span class="linenos">135</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
+</span><span id="Read2-136"><a href="#Read2-136"><span class="linenos">136</span></a>                            <span class="sa">f</span><span class="s2">&quot;Code list is empty&quot;</span><span class="p">,</span>
+</span><span id="Read2-137"><a href="#Read2-137"><span class="linenos">137</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
+</span><span id="Read2-138"><a href="#Read2-138"><span class="linenos">138</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
+</span><span id="Read2-139"><a href="#Read2-139"><span class="linenos">139</span></a>                            <span class="n">mask</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
+</span><span id="Read2-140"><a href="#Read2-140"><span class="linenos">140</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
+</span><span id="Read2-141"><a href="#Read2-141"><span class="linenos">141</span></a>                        <span class="p">)</span>
+</span><span id="Read2-142"><a href="#Read2-142"><span class="linenos">142</span></a>                    <span class="p">)</span>
+</span><span id="Read2-143"><a href="#Read2-143"><span class="linenos">143</span></a>                <span class="p">),</span>
+</span><span id="Read2-144"><a href="#Read2-144"><span class="linenos">144</span></a>            <span class="p">),</span>
+</span><span id="Read2-145"><a href="#Read2-145"><span class="linenos">145</span></a>            <span class="p">(</span>
+</span><span id="Read2-146"><a href="#Read2-146"><span class="linenos">146</span></a>                <span class="c1"># check codes &lt;5 characters, if too short pads it with . (dots) to reach 5 characters</span>
+</span><span id="Read2-147"><a href="#Read2-147"><span class="linenos">147</span></a>                <span class="s2">&quot;Too Short&quot;</span><span class="p">,</span>
+</span><span id="Read2-148"><a href="#Read2-148"><span class="linenos">148</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="o">~</span><span class="p">(</span><span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">len</span><span class="p">()</span> <span class="o">&lt;</span> <span class="mi">5</span><span class="p">),</span>
+</span><span id="Read2-149"><a href="#Read2-149"><span class="linenos">149</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">pad</span><span class="p">(</span>
+</span><span id="Read2-150"><a href="#Read2-150"><span class="linenos">150</span></a>                    <span class="n">width</span><span class="o">=</span><span class="mi">5</span><span class="p">,</span> <span class="n">side</span><span class="o">=</span><span class="s2">&quot;right&quot;</span><span class="p">,</span> <span class="n">fillchar</span><span class="o">=</span><span class="s2">&quot;.&quot;</span>
+</span><span id="Read2-151"><a href="#Read2-151"><span class="linenos">151</span></a>                <span class="p">),</span>
 </span><span id="Read2-152"><a href="#Read2-152"><span class="linenos">152</span></a>            <span class="p">),</span>
 </span><span id="Read2-153"><a href="#Read2-153"><span class="linenos">153</span></a>            <span class="p">(</span>
-</span><span id="Read2-154"><a href="#Read2-154"><span class="linenos">154</span></a>                <span class="c1"># checks codes contain numbers, or dots (.), if not logs invalid code error</span>
-</span><span id="Read2-155"><a href="#Read2-155"><span class="linenos">155</span></a>                <span class="s2">&quot;Alphanumeric Dot&quot;</span><span class="p">,</span>
-</span><span id="Read2-156"><a href="#Read2-156"><span class="linenos">156</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;^[a-zA-Z0-9.]+$&quot;</span><span class="p">),</span>
-</span><span id="Read2-157"><a href="#Read2-157"><span class="linenos">157</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
-</span><span id="Read2-158"><a href="#Read2-158"><span class="linenos">158</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
-</span><span id="Read2-159"><a href="#Read2-159"><span class="linenos">159</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
-</span><span id="Read2-160"><a href="#Read2-160"><span class="linenos">160</span></a>                            <span class="sa">f</span><span class="s2">&quot;Illegal code format, not alphanumeric dot&quot;</span><span class="p">,</span>
-</span><span id="Read2-161"><a href="#Read2-161"><span class="linenos">161</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
-</span><span id="Read2-162"><a href="#Read2-162"><span class="linenos">162</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
-</span><span id="Read2-163"><a href="#Read2-163"><span class="linenos">163</span></a>                            <span class="n">mask</span><span class="o">=</span><span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;^[a-zA-Z0-9.]+$&quot;</span><span class="p">),</span>
-</span><span id="Read2-164"><a href="#Read2-164"><span class="linenos">164</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
-</span><span id="Read2-165"><a href="#Read2-165"><span class="linenos">165</span></a>                        <span class="p">)</span>
-</span><span id="Read2-166"><a href="#Read2-166"><span class="linenos">166</span></a>                    <span class="p">)</span>
-</span><span id="Read2-167"><a href="#Read2-167"><span class="linenos">167</span></a>                <span class="p">),</span>
-</span><span id="Read2-168"><a href="#Read2-168"><span class="linenos">168</span></a>            <span class="p">),</span>
-</span><span id="Read2-169"><a href="#Read2-169"><span class="linenos">169</span></a>            <span class="p">(</span>
-</span><span id="Read2-170"><a href="#Read2-170"><span class="linenos">170</span></a>                <span class="c1"># checks code exists in self.db (the Read2 dataset). If missing log invalid codes.</span>
-</span><span id="Read2-171"><a href="#Read2-171"><span class="linenos">171</span></a>                <span class="s2">&quot;In Database&quot;</span><span class="p">,</span>
-</span><span id="Read2-172"><a href="#Read2-172"><span class="linenos">172</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">in_database</span><span class="p">(</span><span class="n">codes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">),</span>
-</span><span id="Read2-173"><a href="#Read2-173"><span class="linenos">173</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
-</span><span id="Read2-174"><a href="#Read2-174"><span class="linenos">174</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
-</span><span id="Read2-175"><a href="#Read2-175"><span class="linenos">175</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
-</span><span id="Read2-176"><a href="#Read2-176"><span class="linenos">176</span></a>                            <span class="sa">f</span><span class="s2">&quot;Codes do not exist in database&quot;</span><span class="p">,</span>
-</span><span id="Read2-177"><a href="#Read2-177"><span class="linenos">177</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
-</span><span id="Read2-178"><a href="#Read2-178"><span class="linenos">178</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
-</span><span id="Read2-179"><a href="#Read2-179"><span class="linenos">179</span></a>                            <span class="n">mask</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">in_database</span><span class="p">(</span><span class="n">codes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">),</span>
-</span><span id="Read2-180"><a href="#Read2-180"><span class="linenos">180</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
-</span><span id="Read2-181"><a href="#Read2-181"><span class="linenos">181</span></a>                        <span class="p">)</span>
-</span><span id="Read2-182"><a href="#Read2-182"><span class="linenos">182</span></a>                    <span class="p">)</span>
-</span><span id="Read2-183"><a href="#Read2-183"><span class="linenos">183</span></a>                <span class="p">),</span>
-</span><span id="Read2-184"><a href="#Read2-184"><span class="linenos">184</span></a>            <span class="p">),</span>
-</span><span id="Read2-185"><a href="#Read2-185"><span class="linenos">185</span></a>        <span class="p">]</span>
+</span><span id="Read2-154"><a href="#Read2-154"><span class="linenos">154</span></a>                <span class="c1"># check codes &gt; 5 characters, If too long, truncates them to 5 characters</span>
+</span><span id="Read2-155"><a href="#Read2-155"><span class="linenos">155</span></a>                <span class="s2">&quot;Too Long&quot;</span><span class="p">,</span>
+</span><span id="Read2-156"><a href="#Read2-156"><span class="linenos">156</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="o">~</span><span class="p">(</span><span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">len</span><span class="p">()</span> <span class="o">&gt;</span> <span class="mi">5</span><span class="p">),</span>
+</span><span id="Read2-157"><a href="#Read2-157"><span class="linenos">157</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="p">[:</span><span class="mi">5</span><span class="p">],</span>
+</span><span id="Read2-158"><a href="#Read2-158"><span class="linenos">158</span></a>            <span class="p">),</span>
+</span><span id="Read2-159"><a href="#Read2-159"><span class="linenos">159</span></a>            <span class="p">(</span>
+</span><span id="Read2-160"><a href="#Read2-160"><span class="linenos">160</span></a>                <span class="c1"># checks codes contain numbers, or dots (.), if not logs invalid code error</span>
+</span><span id="Read2-161"><a href="#Read2-161"><span class="linenos">161</span></a>                <span class="s2">&quot;Alphanumeric Dot&quot;</span><span class="p">,</span>
+</span><span id="Read2-162"><a href="#Read2-162"><span class="linenos">162</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;^[a-zA-Z0-9.]+$&quot;</span><span class="p">),</span>
+</span><span id="Read2-163"><a href="#Read2-163"><span class="linenos">163</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
+</span><span id="Read2-164"><a href="#Read2-164"><span class="linenos">164</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
+</span><span id="Read2-165"><a href="#Read2-165"><span class="linenos">165</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
+</span><span id="Read2-166"><a href="#Read2-166"><span class="linenos">166</span></a>                            <span class="sa">f</span><span class="s2">&quot;Illegal code format, not alphanumeric dot&quot;</span><span class="p">,</span>
+</span><span id="Read2-167"><a href="#Read2-167"><span class="linenos">167</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
+</span><span id="Read2-168"><a href="#Read2-168"><span class="linenos">168</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
+</span><span id="Read2-169"><a href="#Read2-169"><span class="linenos">169</span></a>                            <span class="n">mask</span><span class="o">=</span><span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;^[a-zA-Z0-9.]+$&quot;</span><span class="p">),</span>
+</span><span id="Read2-170"><a href="#Read2-170"><span class="linenos">170</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
+</span><span id="Read2-171"><a href="#Read2-171"><span class="linenos">171</span></a>                        <span class="p">)</span>
+</span><span id="Read2-172"><a href="#Read2-172"><span class="linenos">172</span></a>                    <span class="p">)</span>
+</span><span id="Read2-173"><a href="#Read2-173"><span class="linenos">173</span></a>                <span class="p">),</span>
+</span><span id="Read2-174"><a href="#Read2-174"><span class="linenos">174</span></a>            <span class="p">),</span>
+</span><span id="Read2-175"><a href="#Read2-175"><span class="linenos">175</span></a>            <span class="p">(</span>
+</span><span id="Read2-176"><a href="#Read2-176"><span class="linenos">176</span></a>                <span class="c1"># checks code exists in self.db (the Read2 dataset). If missing log invalid codes.</span>
+</span><span id="Read2-177"><a href="#Read2-177"><span class="linenos">177</span></a>                <span class="s2">&quot;In Database&quot;</span><span class="p">,</span>
+</span><span id="Read2-178"><a href="#Read2-178"><span class="linenos">178</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">in_database</span><span class="p">(</span><span class="n">codes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">),</span>
+</span><span id="Read2-179"><a href="#Read2-179"><span class="linenos">179</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
+</span><span id="Read2-180"><a href="#Read2-180"><span class="linenos">180</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
+</span><span id="Read2-181"><a href="#Read2-181"><span class="linenos">181</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
+</span><span id="Read2-182"><a href="#Read2-182"><span class="linenos">182</span></a>                            <span class="sa">f</span><span class="s2">&quot;Codes do not exist in database&quot;</span><span class="p">,</span>
+</span><span id="Read2-183"><a href="#Read2-183"><span class="linenos">183</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
+</span><span id="Read2-184"><a href="#Read2-184"><span class="linenos">184</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
+</span><span id="Read2-185"><a href="#Read2-185"><span class="linenos">185</span></a>                            <span class="n">mask</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">in_database</span><span class="p">(</span><span class="n">codes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">),</span>
+</span><span id="Read2-186"><a href="#Read2-186"><span class="linenos">186</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
+</span><span id="Read2-187"><a href="#Read2-187"><span class="linenos">187</span></a>                        <span class="p">)</span>
+</span><span id="Read2-188"><a href="#Read2-188"><span class="linenos">188</span></a>                    <span class="p">)</span>
+</span><span id="Read2-189"><a href="#Read2-189"><span class="linenos">189</span></a>                <span class="p">),</span>
+</span><span id="Read2-190"><a href="#Read2-190"><span class="linenos">190</span></a>            <span class="p">),</span>
+</span><span id="Read2-191"><a href="#Read2-191"><span class="linenos">191</span></a>        <span class="p">]</span>
 </span></pre></div>
 
 
@@ -1269,69 +1266,69 @@
 
     </div>
     <a class="headerlink" href="#Read3"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="Read3-188"><a href="#Read3-188"><span class="linenos">188</span></a><span class="k">class</span><span class="w"> </span><span class="nc">Read3</span><span class="p">(</span><span class="n">Proto</span><span class="p">):</span>
-</span><span id="Read3-189"><a href="#Read3-189"><span class="linenos">189</span></a>    <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="Read3-190"><a href="#Read3-190"><span class="linenos">190</span></a>        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s2">&quot;Read3&quot;</span><span class="p">,</span> <span class="n">trud</span><span class="o">.</span><span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;read3.parquet&quot;</span><span class="p">)</span>
-</span><span id="Read3-191"><a href="#Read3-191"><span class="linenos">191</span></a>
-</span><span id="Read3-192"><a href="#Read3-192"><span class="linenos">192</span></a>        <span class="bp">self</span><span class="o">.</span><span class="n">checks</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="Read3-193"><a href="#Read3-193"><span class="linenos">193</span></a>            <span class="p">(</span>
-</span><span id="Read3-194"><a href="#Read3-194"><span class="linenos">194</span></a>                <span class="s2">&quot;Not Empty&quot;</span><span class="p">,</span>
-</span><span id="Read3-195"><a href="#Read3-195"><span class="linenos">195</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">Series</span><span class="p">([</span><span class="nb">len</span><span class="p">(</span><span class="n">codes</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">]),</span>
-</span><span id="Read3-196"><a href="#Read3-196"><span class="linenos">196</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
-</span><span id="Read3-197"><a href="#Read3-197"><span class="linenos">197</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
-</span><span id="Read3-198"><a href="#Read3-198"><span class="linenos">198</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
-</span><span id="Read3-199"><a href="#Read3-199"><span class="linenos">199</span></a>                            <span class="sa">f</span><span class="s2">&quot;Code list is empty&quot;</span><span class="p">,</span>
-</span><span id="Read3-200"><a href="#Read3-200"><span class="linenos">200</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
-</span><span id="Read3-201"><a href="#Read3-201"><span class="linenos">201</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
-</span><span id="Read3-202"><a href="#Read3-202"><span class="linenos">202</span></a>                            <span class="n">mask</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-</span><span id="Read3-203"><a href="#Read3-203"><span class="linenos">203</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
-</span><span id="Read3-204"><a href="#Read3-204"><span class="linenos">204</span></a>                        <span class="p">)</span>
-</span><span id="Read3-205"><a href="#Read3-205"><span class="linenos">205</span></a>                    <span class="p">)</span>
-</span><span id="Read3-206"><a href="#Read3-206"><span class="linenos">206</span></a>                <span class="p">),</span>
-</span><span id="Read3-207"><a href="#Read3-207"><span class="linenos">207</span></a>            <span class="p">),</span>
-</span><span id="Read3-208"><a href="#Read3-208"><span class="linenos">208</span></a>            <span class="p">(</span>
-</span><span id="Read3-209"><a href="#Read3-209"><span class="linenos">209</span></a>                <span class="s2">&quot;Too Short&quot;</span><span class="p">,</span>
-</span><span id="Read3-210"><a href="#Read3-210"><span class="linenos">210</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="o">~</span><span class="p">(</span><span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">len</span><span class="p">()</span> <span class="o">&lt;</span> <span class="mi">5</span><span class="p">),</span>
-</span><span id="Read3-211"><a href="#Read3-211"><span class="linenos">211</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">pad</span><span class="p">(</span>
-</span><span id="Read3-212"><a href="#Read3-212"><span class="linenos">212</span></a>                    <span class="n">width</span><span class="o">=</span><span class="mi">5</span><span class="p">,</span> <span class="n">side</span><span class="o">=</span><span class="s2">&quot;right&quot;</span><span class="p">,</span> <span class="n">fillchar</span><span class="o">=</span><span class="s2">&quot;.&quot;</span>
-</span><span id="Read3-213"><a href="#Read3-213"><span class="linenos">213</span></a>                <span class="p">),</span>
-</span><span id="Read3-214"><a href="#Read3-214"><span class="linenos">214</span></a>            <span class="p">),</span>
-</span><span id="Read3-215"><a href="#Read3-215"><span class="linenos">215</span></a>            <span class="p">(</span>
-</span><span id="Read3-216"><a href="#Read3-216"><span class="linenos">216</span></a>                <span class="s2">&quot;Too Long&quot;</span><span class="p">,</span>
-</span><span id="Read3-217"><a href="#Read3-217"><span class="linenos">217</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="o">~</span><span class="p">(</span><span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">len</span><span class="p">()</span> <span class="o">&gt;</span> <span class="mi">5</span><span class="p">),</span>
-</span><span id="Read3-218"><a href="#Read3-218"><span class="linenos">218</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="p">[:</span><span class="mi">5</span><span class="p">],</span>
-</span><span id="Read3-219"><a href="#Read3-219"><span class="linenos">219</span></a>            <span class="p">),</span>
-</span><span id="Read3-220"><a href="#Read3-220"><span class="linenos">220</span></a>            <span class="p">(</span>
-</span><span id="Read3-221"><a href="#Read3-221"><span class="linenos">221</span></a>                <span class="s2">&quot;Alphanumeric Dot&quot;</span><span class="p">,</span>
-</span><span id="Read3-222"><a href="#Read3-222"><span class="linenos">222</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;^[a-zA-Z0-9.]+$&quot;</span><span class="p">),</span>
-</span><span id="Read3-223"><a href="#Read3-223"><span class="linenos">223</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
-</span><span id="Read3-224"><a href="#Read3-224"><span class="linenos">224</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
-</span><span id="Read3-225"><a href="#Read3-225"><span class="linenos">225</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
-</span><span id="Read3-226"><a href="#Read3-226"><span class="linenos">226</span></a>                            <span class="sa">f</span><span class="s2">&quot;QA Alphanumeric Dot&quot;</span><span class="p">,</span>
-</span><span id="Read3-227"><a href="#Read3-227"><span class="linenos">227</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
-</span><span id="Read3-228"><a href="#Read3-228"><span class="linenos">228</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
-</span><span id="Read3-229"><a href="#Read3-229"><span class="linenos">229</span></a>                            <span class="n">check_regex</span><span class="o">=</span><span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;^[a-zA-Z0-9.]+$&quot;</span><span class="p">),</span>
-</span><span id="Read3-230"><a href="#Read3-230"><span class="linenos">230</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
-</span><span id="Read3-231"><a href="#Read3-231"><span class="linenos">231</span></a>                        <span class="p">)</span>
-</span><span id="Read3-232"><a href="#Read3-232"><span class="linenos">232</span></a>                    <span class="p">)</span>
-</span><span id="Read3-233"><a href="#Read3-233"><span class="linenos">233</span></a>                <span class="p">),</span>
-</span><span id="Read3-234"><a href="#Read3-234"><span class="linenos">234</span></a>            <span class="p">),</span>
-</span><span id="Read3-235"><a href="#Read3-235"><span class="linenos">235</span></a>            <span class="p">(</span>
-</span><span id="Read3-236"><a href="#Read3-236"><span class="linenos">236</span></a>                <span class="s2">&quot;In Database&quot;</span><span class="p">,</span>
-</span><span id="Read3-237"><a href="#Read3-237"><span class="linenos">237</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">in_database</span><span class="p">(</span><span class="n">codes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">),</span>
-</span><span id="Read3-238"><a href="#Read3-238"><span class="linenos">238</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
-</span><span id="Read3-239"><a href="#Read3-239"><span class="linenos">239</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
-</span><span id="Read3-240"><a href="#Read3-240"><span class="linenos">240</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
-</span><span id="Read3-241"><a href="#Read3-241"><span class="linenos">241</span></a>                            <span class="sa">f</span><span class="s2">&quot;QA In Database&quot;</span><span class="p">,</span>
-</span><span id="Read3-242"><a href="#Read3-242"><span class="linenos">242</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
-</span><span id="Read3-243"><a href="#Read3-243"><span class="linenos">243</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
-</span><span id="Read3-244"><a href="#Read3-244"><span class="linenos">244</span></a>                            <span class="n">check_regex</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">in_database</span><span class="p">(</span><span class="n">codes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">),</span>
-</span><span id="Read3-245"><a href="#Read3-245"><span class="linenos">245</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
-</span><span id="Read3-246"><a href="#Read3-246"><span class="linenos">246</span></a>                        <span class="p">)</span>
-</span><span id="Read3-247"><a href="#Read3-247"><span class="linenos">247</span></a>                    <span class="p">)</span>
-</span><span id="Read3-248"><a href="#Read3-248"><span class="linenos">248</span></a>                <span class="p">),</span>
-</span><span id="Read3-249"><a href="#Read3-249"><span class="linenos">249</span></a>            <span class="p">),</span>
-</span><span id="Read3-250"><a href="#Read3-250"><span class="linenos">250</span></a>        <span class="p">]</span>
+            <div class="pdoc-code codehilite"><pre><span></span><span id="Read3-194"><a href="#Read3-194"><span class="linenos">194</span></a><span class="k">class</span><span class="w"> </span><span class="nc">Read3</span><span class="p">(</span><span class="n">Proto</span><span class="p">):</span>
+</span><span id="Read3-195"><a href="#Read3-195"><span class="linenos">195</span></a>    <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="Read3-196"><a href="#Read3-196"><span class="linenos">196</span></a>        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s2">&quot;Read3&quot;</span><span class="p">,</span> <span class="n">trud</span><span class="o">.</span><span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;read3.parquet&quot;</span><span class="p">)</span>
+</span><span id="Read3-197"><a href="#Read3-197"><span class="linenos">197</span></a>
+</span><span id="Read3-198"><a href="#Read3-198"><span class="linenos">198</span></a>        <span class="bp">self</span><span class="o">.</span><span class="n">checks</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="Read3-199"><a href="#Read3-199"><span class="linenos">199</span></a>            <span class="p">(</span>
+</span><span id="Read3-200"><a href="#Read3-200"><span class="linenos">200</span></a>                <span class="s2">&quot;Not Empty&quot;</span><span class="p">,</span>
+</span><span id="Read3-201"><a href="#Read3-201"><span class="linenos">201</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">Series</span><span class="p">([</span><span class="nb">len</span><span class="p">(</span><span class="n">codes</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">]),</span>
+</span><span id="Read3-202"><a href="#Read3-202"><span class="linenos">202</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
+</span><span id="Read3-203"><a href="#Read3-203"><span class="linenos">203</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
+</span><span id="Read3-204"><a href="#Read3-204"><span class="linenos">204</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
+</span><span id="Read3-205"><a href="#Read3-205"><span class="linenos">205</span></a>                            <span class="sa">f</span><span class="s2">&quot;Code list is empty&quot;</span><span class="p">,</span>
+</span><span id="Read3-206"><a href="#Read3-206"><span class="linenos">206</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
+</span><span id="Read3-207"><a href="#Read3-207"><span class="linenos">207</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
+</span><span id="Read3-208"><a href="#Read3-208"><span class="linenos">208</span></a>                            <span class="n">mask</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
+</span><span id="Read3-209"><a href="#Read3-209"><span class="linenos">209</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
+</span><span id="Read3-210"><a href="#Read3-210"><span class="linenos">210</span></a>                        <span class="p">)</span>
+</span><span id="Read3-211"><a href="#Read3-211"><span class="linenos">211</span></a>                    <span class="p">)</span>
+</span><span id="Read3-212"><a href="#Read3-212"><span class="linenos">212</span></a>                <span class="p">),</span>
+</span><span id="Read3-213"><a href="#Read3-213"><span class="linenos">213</span></a>            <span class="p">),</span>
+</span><span id="Read3-214"><a href="#Read3-214"><span class="linenos">214</span></a>            <span class="p">(</span>
+</span><span id="Read3-215"><a href="#Read3-215"><span class="linenos">215</span></a>                <span class="s2">&quot;Too Short&quot;</span><span class="p">,</span>
+</span><span id="Read3-216"><a href="#Read3-216"><span class="linenos">216</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="o">~</span><span class="p">(</span><span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">len</span><span class="p">()</span> <span class="o">&lt;</span> <span class="mi">5</span><span class="p">),</span>
+</span><span id="Read3-217"><a href="#Read3-217"><span class="linenos">217</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">pad</span><span class="p">(</span>
+</span><span id="Read3-218"><a href="#Read3-218"><span class="linenos">218</span></a>                    <span class="n">width</span><span class="o">=</span><span class="mi">5</span><span class="p">,</span> <span class="n">side</span><span class="o">=</span><span class="s2">&quot;right&quot;</span><span class="p">,</span> <span class="n">fillchar</span><span class="o">=</span><span class="s2">&quot;.&quot;</span>
+</span><span id="Read3-219"><a href="#Read3-219"><span class="linenos">219</span></a>                <span class="p">),</span>
+</span><span id="Read3-220"><a href="#Read3-220"><span class="linenos">220</span></a>            <span class="p">),</span>
+</span><span id="Read3-221"><a href="#Read3-221"><span class="linenos">221</span></a>            <span class="p">(</span>
+</span><span id="Read3-222"><a href="#Read3-222"><span class="linenos">222</span></a>                <span class="s2">&quot;Too Long&quot;</span><span class="p">,</span>
+</span><span id="Read3-223"><a href="#Read3-223"><span class="linenos">223</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="o">~</span><span class="p">(</span><span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">len</span><span class="p">()</span> <span class="o">&gt;</span> <span class="mi">5</span><span class="p">),</span>
+</span><span id="Read3-224"><a href="#Read3-224"><span class="linenos">224</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="p">[:</span><span class="mi">5</span><span class="p">],</span>
+</span><span id="Read3-225"><a href="#Read3-225"><span class="linenos">225</span></a>            <span class="p">),</span>
+</span><span id="Read3-226"><a href="#Read3-226"><span class="linenos">226</span></a>            <span class="p">(</span>
+</span><span id="Read3-227"><a href="#Read3-227"><span class="linenos">227</span></a>                <span class="s2">&quot;Alphanumeric Dot&quot;</span><span class="p">,</span>
+</span><span id="Read3-228"><a href="#Read3-228"><span class="linenos">228</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;^[a-zA-Z0-9.]+$&quot;</span><span class="p">),</span>
+</span><span id="Read3-229"><a href="#Read3-229"><span class="linenos">229</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
+</span><span id="Read3-230"><a href="#Read3-230"><span class="linenos">230</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
+</span><span id="Read3-231"><a href="#Read3-231"><span class="linenos">231</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
+</span><span id="Read3-232"><a href="#Read3-232"><span class="linenos">232</span></a>                            <span class="sa">f</span><span class="s2">&quot;QA Alphanumeric Dot&quot;</span><span class="p">,</span>
+</span><span id="Read3-233"><a href="#Read3-233"><span class="linenos">233</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
+</span><span id="Read3-234"><a href="#Read3-234"><span class="linenos">234</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
+</span><span id="Read3-235"><a href="#Read3-235"><span class="linenos">235</span></a>                            <span class="n">check_regex</span><span class="o">=</span><span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;^[a-zA-Z0-9.]+$&quot;</span><span class="p">),</span>
+</span><span id="Read3-236"><a href="#Read3-236"><span class="linenos">236</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
+</span><span id="Read3-237"><a href="#Read3-237"><span class="linenos">237</span></a>                        <span class="p">)</span>
+</span><span id="Read3-238"><a href="#Read3-238"><span class="linenos">238</span></a>                    <span class="p">)</span>
+</span><span id="Read3-239"><a href="#Read3-239"><span class="linenos">239</span></a>                <span class="p">),</span>
+</span><span id="Read3-240"><a href="#Read3-240"><span class="linenos">240</span></a>            <span class="p">),</span>
+</span><span id="Read3-241"><a href="#Read3-241"><span class="linenos">241</span></a>            <span class="p">(</span>
+</span><span id="Read3-242"><a href="#Read3-242"><span class="linenos">242</span></a>                <span class="s2">&quot;In Database&quot;</span><span class="p">,</span>
+</span><span id="Read3-243"><a href="#Read3-243"><span class="linenos">243</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">in_database</span><span class="p">(</span><span class="n">codes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">),</span>
+</span><span id="Read3-244"><a href="#Read3-244"><span class="linenos">244</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
+</span><span id="Read3-245"><a href="#Read3-245"><span class="linenos">245</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
+</span><span id="Read3-246"><a href="#Read3-246"><span class="linenos">246</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
+</span><span id="Read3-247"><a href="#Read3-247"><span class="linenos">247</span></a>                            <span class="sa">f</span><span class="s2">&quot;QA In Database&quot;</span><span class="p">,</span>
+</span><span id="Read3-248"><a href="#Read3-248"><span class="linenos">248</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
+</span><span id="Read3-249"><a href="#Read3-249"><span class="linenos">249</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
+</span><span id="Read3-250"><a href="#Read3-250"><span class="linenos">250</span></a>                            <span class="n">check_regex</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">in_database</span><span class="p">(</span><span class="n">codes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">),</span>
+</span><span id="Read3-251"><a href="#Read3-251"><span class="linenos">251</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
+</span><span id="Read3-252"><a href="#Read3-252"><span class="linenos">252</span></a>                        <span class="p">)</span>
+</span><span id="Read3-253"><a href="#Read3-253"><span class="linenos">253</span></a>                    <span class="p">)</span>
+</span><span id="Read3-254"><a href="#Read3-254"><span class="linenos">254</span></a>                <span class="p">),</span>
+</span><span id="Read3-255"><a href="#Read3-255"><span class="linenos">255</span></a>            <span class="p">),</span>
+</span><span id="Read3-256"><a href="#Read3-256"><span class="linenos">256</span></a>        <span class="p">]</span>
 </span></pre></div>
 
 
@@ -1381,94 +1378,94 @@
 
     </div>
     <a class="headerlink" href="#Icd10"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="Icd10-253"><a href="#Icd10-253"><span class="linenos">253</span></a><span class="k">class</span><span class="w"> </span><span class="nc">Icd10</span><span class="p">(</span><span class="n">Proto</span><span class="p">):</span>
-</span><span id="Icd10-254"><a href="#Icd10-254"><span class="linenos">254</span></a>    <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="Icd10-255"><a href="#Icd10-255"><span class="linenos">255</span></a>        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s2">&quot;icd10&quot;</span><span class="p">,</span> <span class="n">trud</span><span class="o">.</span><span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;icd10.parquet&quot;</span><span class="p">)</span>
-</span><span id="Icd10-256"><a href="#Icd10-256"><span class="linenos">256</span></a>
-</span><span id="Icd10-257"><a href="#Icd10-257"><span class="linenos">257</span></a>        <span class="bp">self</span><span class="o">.</span><span class="n">checks</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="Icd10-258"><a href="#Icd10-258"><span class="linenos">258</span></a>            <span class="p">(</span>
-</span><span id="Icd10-259"><a href="#Icd10-259"><span class="linenos">259</span></a>                <span class="s2">&quot;Not Empty&quot;</span><span class="p">,</span>
-</span><span id="Icd10-260"><a href="#Icd10-260"><span class="linenos">260</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">Series</span><span class="p">([</span><span class="nb">len</span><span class="p">(</span><span class="n">codes</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">]),</span>
-</span><span id="Icd10-261"><a href="#Icd10-261"><span class="linenos">261</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
-</span><span id="Icd10-262"><a href="#Icd10-262"><span class="linenos">262</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
-</span><span id="Icd10-263"><a href="#Icd10-263"><span class="linenos">263</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
-</span><span id="Icd10-264"><a href="#Icd10-264"><span class="linenos">264</span></a>                            <span class="sa">f</span><span class="s2">&quot;Code list is empty </span><span class="si">{</span><span class="n">codes_file</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
-</span><span id="Icd10-265"><a href="#Icd10-265"><span class="linenos">265</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
-</span><span id="Icd10-266"><a href="#Icd10-266"><span class="linenos">266</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
-</span><span id="Icd10-267"><a href="#Icd10-267"><span class="linenos">267</span></a>                            <span class="n">mask</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-</span><span id="Icd10-268"><a href="#Icd10-268"><span class="linenos">268</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
-</span><span id="Icd10-269"><a href="#Icd10-269"><span class="linenos">269</span></a>                        <span class="p">)</span>
-</span><span id="Icd10-270"><a href="#Icd10-270"><span class="linenos">270</span></a>                    <span class="p">)</span>
-</span><span id="Icd10-271"><a href="#Icd10-271"><span class="linenos">271</span></a>                <span class="p">),</span>
-</span><span id="Icd10-272"><a href="#Icd10-272"><span class="linenos">272</span></a>            <span class="p">),</span>
-</span><span id="Icd10-273"><a href="#Icd10-273"><span class="linenos">273</span></a>            <span class="p">(</span>
-</span><span id="Icd10-274"><a href="#Icd10-274"><span class="linenos">274</span></a>                <span class="s2">&quot;Too Short&quot;</span><span class="p">,</span>
-</span><span id="Icd10-275"><a href="#Icd10-275"><span class="linenos">275</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="o">~</span><span class="p">(</span><span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">len</span><span class="p">()</span> <span class="o">&lt;</span> <span class="mi">3</span><span class="p">),</span>
-</span><span id="Icd10-276"><a href="#Icd10-276"><span class="linenos">276</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
-</span><span id="Icd10-277"><a href="#Icd10-277"><span class="linenos">277</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
-</span><span id="Icd10-278"><a href="#Icd10-278"><span class="linenos">278</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
-</span><span id="Icd10-279"><a href="#Icd10-279"><span class="linenos">279</span></a>                            <span class="sa">f</span><span class="s2">&quot;QA Too Short&quot;</span><span class="p">,</span>
-</span><span id="Icd10-280"><a href="#Icd10-280"><span class="linenos">280</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
-</span><span id="Icd10-281"><a href="#Icd10-281"><span class="linenos">281</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
-</span><span id="Icd10-282"><a href="#Icd10-282"><span class="linenos">282</span></a>                            <span class="n">mask</span><span class="o">=~</span><span class="p">(</span><span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">len</span><span class="p">()</span> <span class="o">&lt;</span> <span class="mi">3</span><span class="p">),</span>
-</span><span id="Icd10-283"><a href="#Icd10-283"><span class="linenos">283</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
-</span><span id="Icd10-284"><a href="#Icd10-284"><span class="linenos">284</span></a>                        <span class="p">)</span>
-</span><span id="Icd10-285"><a href="#Icd10-285"><span class="linenos">285</span></a>                    <span class="p">)</span>
-</span><span id="Icd10-286"><a href="#Icd10-286"><span class="linenos">286</span></a>                <span class="p">),</span>
-</span><span id="Icd10-287"><a href="#Icd10-287"><span class="linenos">287</span></a>            <span class="p">),</span>
-</span><span id="Icd10-288"><a href="#Icd10-288"><span class="linenos">288</span></a>            <span class="p">(</span>
-</span><span id="Icd10-289"><a href="#Icd10-289"><span class="linenos">289</span></a>                <span class="s2">&quot;Has Dot&quot;</span><span class="p">,</span>
-</span><span id="Icd10-290"><a href="#Icd10-290"><span class="linenos">290</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="o">~</span><span class="p">(</span><span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;.*\..*&quot;</span><span class="p">)),</span>  <span class="c1"># check if contains dot</span>
-</span><span id="Icd10-291"><a href="#Icd10-291"><span class="linenos">291</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span>
-</span><span id="Icd10-292"><a href="#Icd10-292"><span class="linenos">292</span></a>                    <span class="s2">&quot;.&quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span>
-</span><span id="Icd10-293"><a href="#Icd10-293"><span class="linenos">293</span></a>                <span class="p">),</span>  <span class="c1"># delete any dots in string</span>
-</span><span id="Icd10-294"><a href="#Icd10-294"><span class="linenos">294</span></a>                <span class="c1"># lambda codes : codes.str.split(&#39;\.&#39;).apply(lambda ls: ls[0]) #only get part before dot</span>
-</span><span id="Icd10-295"><a href="#Icd10-295"><span class="linenos">295</span></a>            <span class="p">),</span>
-</span><span id="Icd10-296"><a href="#Icd10-296"><span class="linenos">296</span></a>            <span class="p">(</span>
-</span><span id="Icd10-297"><a href="#Icd10-297"><span class="linenos">297</span></a>                <span class="s2">&quot;Alphanumeric Capital&quot;</span><span class="p">,</span>
-</span><span id="Icd10-298"><a href="#Icd10-298"><span class="linenos">298</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;^[A-Z0-9]+$&quot;</span><span class="p">),</span>
-</span><span id="Icd10-299"><a href="#Icd10-299"><span class="linenos">299</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
-</span><span id="Icd10-300"><a href="#Icd10-300"><span class="linenos">300</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
-</span><span id="Icd10-301"><a href="#Icd10-301"><span class="linenos">301</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
-</span><span id="Icd10-302"><a href="#Icd10-302"><span class="linenos">302</span></a>                            <span class="sa">f</span><span class="s2">&quot;QA Alphanumeric Capital&quot;</span><span class="p">,</span>
-</span><span id="Icd10-303"><a href="#Icd10-303"><span class="linenos">303</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
-</span><span id="Icd10-304"><a href="#Icd10-304"><span class="linenos">304</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
-</span><span id="Icd10-305"><a href="#Icd10-305"><span class="linenos">305</span></a>                            <span class="n">mask</span><span class="o">=</span><span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;^[A-Z0-9]+$&quot;</span><span class="p">),</span>
-</span><span id="Icd10-306"><a href="#Icd10-306"><span class="linenos">306</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
-</span><span id="Icd10-307"><a href="#Icd10-307"><span class="linenos">307</span></a>                        <span class="p">)</span>
-</span><span id="Icd10-308"><a href="#Icd10-308"><span class="linenos">308</span></a>                    <span class="p">)</span>
-</span><span id="Icd10-309"><a href="#Icd10-309"><span class="linenos">309</span></a>                <span class="p">),</span>
-</span><span id="Icd10-310"><a href="#Icd10-310"><span class="linenos">310</span></a>            <span class="p">),</span>
-</span><span id="Icd10-311"><a href="#Icd10-311"><span class="linenos">311</span></a>            <span class="p">(</span>
-</span><span id="Icd10-312"><a href="#Icd10-312"><span class="linenos">312</span></a>                <span class="s2">&quot;In Database&quot;</span><span class="p">,</span>
-</span><span id="Icd10-313"><a href="#Icd10-313"><span class="linenos">313</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="o">~</span><span class="p">(</span>
-</span><span id="Icd10-314"><a href="#Icd10-314"><span class="linenos">314</span></a>                    <span class="o">~</span><span class="bp">self</span><span class="o">.</span><span class="n">in_database</span><span class="p">(</span><span class="n">codes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
-</span><span id="Icd10-315"><a href="#Icd10-315"><span class="linenos">315</span></a>                    <span class="o">&amp;</span> <span class="o">~</span><span class="bp">self</span><span class="o">.</span><span class="n">in_database</span><span class="p">(</span><span class="n">codes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_alt&quot;</span><span class="p">)</span>
-</span><span id="Icd10-316"><a href="#Icd10-316"><span class="linenos">316</span></a>                <span class="p">),</span>
-</span><span id="Icd10-317"><a href="#Icd10-317"><span class="linenos">317</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
-</span><span id="Icd10-318"><a href="#Icd10-318"><span class="linenos">318</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
-</span><span id="Icd10-319"><a href="#Icd10-319"><span class="linenos">319</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
-</span><span id="Icd10-320"><a href="#Icd10-320"><span class="linenos">320</span></a>                            <span class="sa">f</span><span class="s2">&quot;QA In Database&quot;</span><span class="p">,</span>
-</span><span id="Icd10-321"><a href="#Icd10-321"><span class="linenos">321</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
-</span><span id="Icd10-322"><a href="#Icd10-322"><span class="linenos">322</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
-</span><span id="Icd10-323"><a href="#Icd10-323"><span class="linenos">323</span></a>                            <span class="n">mask</span><span class="o">=~</span><span class="p">(</span>
-</span><span id="Icd10-324"><a href="#Icd10-324"><span class="linenos">324</span></a>                                <span class="o">~</span><span class="bp">self</span><span class="o">.</span><span class="n">in_database</span><span class="p">(</span><span class="n">codes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
-</span><span id="Icd10-325"><a href="#Icd10-325"><span class="linenos">325</span></a>                                <span class="o">&amp;</span> <span class="o">~</span><span class="bp">self</span><span class="o">.</span><span class="n">in_database</span><span class="p">(</span><span class="n">codes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_alt&quot;</span><span class="p">)</span>
-</span><span id="Icd10-326"><a href="#Icd10-326"><span class="linenos">326</span></a>                            <span class="p">),</span>
-</span><span id="Icd10-327"><a href="#Icd10-327"><span class="linenos">327</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
-</span><span id="Icd10-328"><a href="#Icd10-328"><span class="linenos">328</span></a>                        <span class="p">)</span>
-</span><span id="Icd10-329"><a href="#Icd10-329"><span class="linenos">329</span></a>                    <span class="p">)</span>
-</span><span id="Icd10-330"><a href="#Icd10-330"><span class="linenos">330</span></a>                <span class="p">),</span>
-</span><span id="Icd10-331"><a href="#Icd10-331"><span class="linenos">331</span></a>            <span class="p">),</span>
-</span><span id="Icd10-332"><a href="#Icd10-332"><span class="linenos">332</span></a>            <span class="c1"># 			(</span>
-</span><span id="Icd10-333"><a href="#Icd10-333"><span class="linenos">333</span></a>            <span class="c1"># 				&quot;ICD10 Regex&quot;,</span>
-</span><span id="Icd10-334"><a href="#Icd10-334"><span class="linenos">334</span></a>            <span class="c1"># 				lambda codes : codes.str.match(&quot;[a-zA-Z][0-9][0-9]\.?[a-zA-Z0-9]*$&quot;), #Alpha, Num, Num , Dot?, 4xAlphNum*</span>
-</span><span id="Icd10-335"><a href="#Icd10-335"><span class="linenos">335</span></a>            <span class="c1"># 				lambda codes : lc.log_invalid_code(codes,</span>
-</span><span id="Icd10-336"><a href="#Icd10-336"><span class="linenos">336</span></a>            <span class="c1"># 												codes.str.match(&quot;[a-zA-Z][0-9][0-9]\.?[a-zA-Z0-9]*$&quot;), #Log non-matching rows</span>
-</span><span id="Icd10-337"><a href="#Icd10-337"><span class="linenos">337</span></a>            <span class="c1"># 												code_type=&quot;icd10&quot;,</span>
-</span><span id="Icd10-338"><a href="#Icd10-338"><span class="linenos">338</span></a>            <span class="c1">#</span>
-</span><span id="Icd10-339"><a href="#Icd10-339"><span class="linenos">339</span></a>            <span class="c1"># 			)</span>
-</span><span id="Icd10-340"><a href="#Icd10-340"><span class="linenos">340</span></a>        <span class="p">]</span>
+            <div class="pdoc-code codehilite"><pre><span></span><span id="Icd10-259"><a href="#Icd10-259"><span class="linenos">259</span></a><span class="k">class</span><span class="w"> </span><span class="nc">Icd10</span><span class="p">(</span><span class="n">Proto</span><span class="p">):</span>
+</span><span id="Icd10-260"><a href="#Icd10-260"><span class="linenos">260</span></a>    <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="Icd10-261"><a href="#Icd10-261"><span class="linenos">261</span></a>        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s2">&quot;icd10&quot;</span><span class="p">,</span> <span class="n">trud</span><span class="o">.</span><span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;icd10.parquet&quot;</span><span class="p">)</span>
+</span><span id="Icd10-262"><a href="#Icd10-262"><span class="linenos">262</span></a>
+</span><span id="Icd10-263"><a href="#Icd10-263"><span class="linenos">263</span></a>        <span class="bp">self</span><span class="o">.</span><span class="n">checks</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="Icd10-264"><a href="#Icd10-264"><span class="linenos">264</span></a>            <span class="p">(</span>
+</span><span id="Icd10-265"><a href="#Icd10-265"><span class="linenos">265</span></a>                <span class="s2">&quot;Not Empty&quot;</span><span class="p">,</span>
+</span><span id="Icd10-266"><a href="#Icd10-266"><span class="linenos">266</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">Series</span><span class="p">([</span><span class="nb">len</span><span class="p">(</span><span class="n">codes</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">]),</span>
+</span><span id="Icd10-267"><a href="#Icd10-267"><span class="linenos">267</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
+</span><span id="Icd10-268"><a href="#Icd10-268"><span class="linenos">268</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
+</span><span id="Icd10-269"><a href="#Icd10-269"><span class="linenos">269</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
+</span><span id="Icd10-270"><a href="#Icd10-270"><span class="linenos">270</span></a>                            <span class="sa">f</span><span class="s2">&quot;Code list is empty </span><span class="si">{</span><span class="n">codes_file</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
+</span><span id="Icd10-271"><a href="#Icd10-271"><span class="linenos">271</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
+</span><span id="Icd10-272"><a href="#Icd10-272"><span class="linenos">272</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
+</span><span id="Icd10-273"><a href="#Icd10-273"><span class="linenos">273</span></a>                            <span class="n">mask</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
+</span><span id="Icd10-274"><a href="#Icd10-274"><span class="linenos">274</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
+</span><span id="Icd10-275"><a href="#Icd10-275"><span class="linenos">275</span></a>                        <span class="p">)</span>
+</span><span id="Icd10-276"><a href="#Icd10-276"><span class="linenos">276</span></a>                    <span class="p">)</span>
+</span><span id="Icd10-277"><a href="#Icd10-277"><span class="linenos">277</span></a>                <span class="p">),</span>
+</span><span id="Icd10-278"><a href="#Icd10-278"><span class="linenos">278</span></a>            <span class="p">),</span>
+</span><span id="Icd10-279"><a href="#Icd10-279"><span class="linenos">279</span></a>            <span class="p">(</span>
+</span><span id="Icd10-280"><a href="#Icd10-280"><span class="linenos">280</span></a>                <span class="s2">&quot;Too Short&quot;</span><span class="p">,</span>
+</span><span id="Icd10-281"><a href="#Icd10-281"><span class="linenos">281</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="o">~</span><span class="p">(</span><span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">len</span><span class="p">()</span> <span class="o">&lt;</span> <span class="mi">3</span><span class="p">),</span>
+</span><span id="Icd10-282"><a href="#Icd10-282"><span class="linenos">282</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
+</span><span id="Icd10-283"><a href="#Icd10-283"><span class="linenos">283</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
+</span><span id="Icd10-284"><a href="#Icd10-284"><span class="linenos">284</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
+</span><span id="Icd10-285"><a href="#Icd10-285"><span class="linenos">285</span></a>                            <span class="sa">f</span><span class="s2">&quot;QA Too Short&quot;</span><span class="p">,</span>
+</span><span id="Icd10-286"><a href="#Icd10-286"><span class="linenos">286</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
+</span><span id="Icd10-287"><a href="#Icd10-287"><span class="linenos">287</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
+</span><span id="Icd10-288"><a href="#Icd10-288"><span class="linenos">288</span></a>                            <span class="n">mask</span><span class="o">=~</span><span class="p">(</span><span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">len</span><span class="p">()</span> <span class="o">&lt;</span> <span class="mi">3</span><span class="p">),</span>
+</span><span id="Icd10-289"><a href="#Icd10-289"><span class="linenos">289</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
+</span><span id="Icd10-290"><a href="#Icd10-290"><span class="linenos">290</span></a>                        <span class="p">)</span>
+</span><span id="Icd10-291"><a href="#Icd10-291"><span class="linenos">291</span></a>                    <span class="p">)</span>
+</span><span id="Icd10-292"><a href="#Icd10-292"><span class="linenos">292</span></a>                <span class="p">),</span>
+</span><span id="Icd10-293"><a href="#Icd10-293"><span class="linenos">293</span></a>            <span class="p">),</span>
+</span><span id="Icd10-294"><a href="#Icd10-294"><span class="linenos">294</span></a>            <span class="p">(</span>
+</span><span id="Icd10-295"><a href="#Icd10-295"><span class="linenos">295</span></a>                <span class="s2">&quot;Has Dot&quot;</span><span class="p">,</span>
+</span><span id="Icd10-296"><a href="#Icd10-296"><span class="linenos">296</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="o">~</span><span class="p">(</span><span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;.*\..*&quot;</span><span class="p">)),</span>  <span class="c1"># check if contains dot</span>
+</span><span id="Icd10-297"><a href="#Icd10-297"><span class="linenos">297</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span>
+</span><span id="Icd10-298"><a href="#Icd10-298"><span class="linenos">298</span></a>                    <span class="s2">&quot;.&quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span>
+</span><span id="Icd10-299"><a href="#Icd10-299"><span class="linenos">299</span></a>                <span class="p">),</span>  <span class="c1"># delete any dots in string</span>
+</span><span id="Icd10-300"><a href="#Icd10-300"><span class="linenos">300</span></a>                <span class="c1"># lambda codes : codes.str.split(&#39;\.&#39;).apply(lambda ls: ls[0]) #only get part before dot</span>
+</span><span id="Icd10-301"><a href="#Icd10-301"><span class="linenos">301</span></a>            <span class="p">),</span>
+</span><span id="Icd10-302"><a href="#Icd10-302"><span class="linenos">302</span></a>            <span class="p">(</span>
+</span><span id="Icd10-303"><a href="#Icd10-303"><span class="linenos">303</span></a>                <span class="s2">&quot;Alphanumeric Capital&quot;</span><span class="p">,</span>
+</span><span id="Icd10-304"><a href="#Icd10-304"><span class="linenos">304</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;^[A-Z0-9]+$&quot;</span><span class="p">),</span>
+</span><span id="Icd10-305"><a href="#Icd10-305"><span class="linenos">305</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
+</span><span id="Icd10-306"><a href="#Icd10-306"><span class="linenos">306</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
+</span><span id="Icd10-307"><a href="#Icd10-307"><span class="linenos">307</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
+</span><span id="Icd10-308"><a href="#Icd10-308"><span class="linenos">308</span></a>                            <span class="sa">f</span><span class="s2">&quot;QA Alphanumeric Capital&quot;</span><span class="p">,</span>
+</span><span id="Icd10-309"><a href="#Icd10-309"><span class="linenos">309</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
+</span><span id="Icd10-310"><a href="#Icd10-310"><span class="linenos">310</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
+</span><span id="Icd10-311"><a href="#Icd10-311"><span class="linenos">311</span></a>                            <span class="n">mask</span><span class="o">=</span><span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;^[A-Z0-9]+$&quot;</span><span class="p">),</span>
+</span><span id="Icd10-312"><a href="#Icd10-312"><span class="linenos">312</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
+</span><span id="Icd10-313"><a href="#Icd10-313"><span class="linenos">313</span></a>                        <span class="p">)</span>
+</span><span id="Icd10-314"><a href="#Icd10-314"><span class="linenos">314</span></a>                    <span class="p">)</span>
+</span><span id="Icd10-315"><a href="#Icd10-315"><span class="linenos">315</span></a>                <span class="p">),</span>
+</span><span id="Icd10-316"><a href="#Icd10-316"><span class="linenos">316</span></a>            <span class="p">),</span>
+</span><span id="Icd10-317"><a href="#Icd10-317"><span class="linenos">317</span></a>            <span class="p">(</span>
+</span><span id="Icd10-318"><a href="#Icd10-318"><span class="linenos">318</span></a>                <span class="s2">&quot;In Database&quot;</span><span class="p">,</span>
+</span><span id="Icd10-319"><a href="#Icd10-319"><span class="linenos">319</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="o">~</span><span class="p">(</span>
+</span><span id="Icd10-320"><a href="#Icd10-320"><span class="linenos">320</span></a>                    <span class="o">~</span><span class="bp">self</span><span class="o">.</span><span class="n">in_database</span><span class="p">(</span><span class="n">codes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
+</span><span id="Icd10-321"><a href="#Icd10-321"><span class="linenos">321</span></a>                    <span class="o">&amp;</span> <span class="o">~</span><span class="bp">self</span><span class="o">.</span><span class="n">in_database</span><span class="p">(</span><span class="n">codes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_alt&quot;</span><span class="p">)</span>
+</span><span id="Icd10-322"><a href="#Icd10-322"><span class="linenos">322</span></a>                <span class="p">),</span>
+</span><span id="Icd10-323"><a href="#Icd10-323"><span class="linenos">323</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
+</span><span id="Icd10-324"><a href="#Icd10-324"><span class="linenos">324</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
+</span><span id="Icd10-325"><a href="#Icd10-325"><span class="linenos">325</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
+</span><span id="Icd10-326"><a href="#Icd10-326"><span class="linenos">326</span></a>                            <span class="sa">f</span><span class="s2">&quot;QA In Database&quot;</span><span class="p">,</span>
+</span><span id="Icd10-327"><a href="#Icd10-327"><span class="linenos">327</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
+</span><span id="Icd10-328"><a href="#Icd10-328"><span class="linenos">328</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
+</span><span id="Icd10-329"><a href="#Icd10-329"><span class="linenos">329</span></a>                            <span class="n">mask</span><span class="o">=~</span><span class="p">(</span>
+</span><span id="Icd10-330"><a href="#Icd10-330"><span class="linenos">330</span></a>                                <span class="o">~</span><span class="bp">self</span><span class="o">.</span><span class="n">in_database</span><span class="p">(</span><span class="n">codes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
+</span><span id="Icd10-331"><a href="#Icd10-331"><span class="linenos">331</span></a>                                <span class="o">&amp;</span> <span class="o">~</span><span class="bp">self</span><span class="o">.</span><span class="n">in_database</span><span class="p">(</span><span class="n">codes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&quot;_alt&quot;</span><span class="p">)</span>
+</span><span id="Icd10-332"><a href="#Icd10-332"><span class="linenos">332</span></a>                            <span class="p">),</span>
+</span><span id="Icd10-333"><a href="#Icd10-333"><span class="linenos">333</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
+</span><span id="Icd10-334"><a href="#Icd10-334"><span class="linenos">334</span></a>                        <span class="p">)</span>
+</span><span id="Icd10-335"><a href="#Icd10-335"><span class="linenos">335</span></a>                    <span class="p">)</span>
+</span><span id="Icd10-336"><a href="#Icd10-336"><span class="linenos">336</span></a>                <span class="p">),</span>
+</span><span id="Icd10-337"><a href="#Icd10-337"><span class="linenos">337</span></a>            <span class="p">),</span>
+</span><span id="Icd10-338"><a href="#Icd10-338"><span class="linenos">338</span></a>            <span class="c1"># 			(</span>
+</span><span id="Icd10-339"><a href="#Icd10-339"><span class="linenos">339</span></a>            <span class="c1"># 				&quot;ICD10 Regex&quot;,</span>
+</span><span id="Icd10-340"><a href="#Icd10-340"><span class="linenos">340</span></a>            <span class="c1"># 				lambda codes : codes.str.match(&quot;[a-zA-Z][0-9][0-9]\.?[a-zA-Z0-9]*$&quot;), #Alpha, Num, Num , Dot?, 4xAlphNum*</span>
+</span><span id="Icd10-341"><a href="#Icd10-341"><span class="linenos">341</span></a>            <span class="c1"># 				lambda codes : lc.log_invalid_code(codes,</span>
+</span><span id="Icd10-342"><a href="#Icd10-342"><span class="linenos">342</span></a>            <span class="c1"># 												codes.str.match(&quot;[a-zA-Z][0-9][0-9]\.?[a-zA-Z0-9]*$&quot;), #Log non-matching rows</span>
+</span><span id="Icd10-343"><a href="#Icd10-343"><span class="linenos">343</span></a>            <span class="c1"># 												code_type=&quot;icd10&quot;,</span>
+</span><span id="Icd10-344"><a href="#Icd10-344"><span class="linenos">344</span></a>            <span class="c1">#</span>
+</span><span id="Icd10-345"><a href="#Icd10-345"><span class="linenos">345</span></a>            <span class="c1"># 			)</span>
+</span><span id="Icd10-346"><a href="#Icd10-346"><span class="linenos">346</span></a>        <span class="p">]</span>
 </span></pre></div>
 
 
@@ -1518,82 +1515,82 @@
 
     </div>
     <a class="headerlink" href="#Snomed"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="Snomed-343"><a href="#Snomed-343"><span class="linenos">343</span></a><span class="k">class</span><span class="w"> </span><span class="nc">Snomed</span><span class="p">(</span><span class="n">Proto</span><span class="p">):</span>
-</span><span id="Snomed-344"><a href="#Snomed-344"><span class="linenos">344</span></a>    <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="Snomed-345"><a href="#Snomed-345"><span class="linenos">345</span></a>        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s2">&quot;snomed&quot;</span><span class="p">,</span> <span class="n">trud</span><span class="o">.</span><span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;snomed.parquet&quot;</span><span class="p">)</span>
-</span><span id="Snomed-346"><a href="#Snomed-346"><span class="linenos">346</span></a>
-</span><span id="Snomed-347"><a href="#Snomed-347"><span class="linenos">347</span></a>        <span class="bp">self</span><span class="o">.</span><span class="n">checks</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="Snomed-348"><a href="#Snomed-348"><span class="linenos">348</span></a>            <span class="c1"># (</span>
-</span><span id="Snomed-349"><a href="#Snomed-349"><span class="linenos">349</span></a>            <span class="c1"># 	&quot;Not Empty&quot;,</span>
-</span><span id="Snomed-350"><a href="#Snomed-350"><span class="linenos">350</span></a>            <span class="c1"># 	lambda codes : pd.Series([len(codes) &gt; 0]),</span>
-</span><span id="Snomed-351"><a href="#Snomed-351"><span class="linenos">351</span></a>            <span class="c1"># 	lambda codes : raise_exception(Exception(&quot;Code List is Empty&quot;))</span>
-</span><span id="Snomed-352"><a href="#Snomed-352"><span class="linenos">352</span></a>            <span class="c1"># ),</span>
-</span><span id="Snomed-353"><a href="#Snomed-353"><span class="linenos">353</span></a>            <span class="p">(</span>
-</span><span id="Snomed-354"><a href="#Snomed-354"><span class="linenos">354</span></a>                <span class="s2">&quot;Too Short&quot;</span><span class="p">,</span>
-</span><span id="Snomed-355"><a href="#Snomed-355"><span class="linenos">355</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="o">~</span><span class="p">(</span><span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">len</span><span class="p">()</span> <span class="o">&lt;</span> <span class="mi">6</span><span class="p">),</span>
-</span><span id="Snomed-356"><a href="#Snomed-356"><span class="linenos">356</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
-</span><span id="Snomed-357"><a href="#Snomed-357"><span class="linenos">357</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
-</span><span id="Snomed-358"><a href="#Snomed-358"><span class="linenos">358</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
-</span><span id="Snomed-359"><a href="#Snomed-359"><span class="linenos">359</span></a>                            <span class="sa">f</span><span class="s2">&quot;QA Too Short&quot;</span><span class="p">,</span>
-</span><span id="Snomed-360"><a href="#Snomed-360"><span class="linenos">360</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
-</span><span id="Snomed-361"><a href="#Snomed-361"><span class="linenos">361</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
-</span><span id="Snomed-362"><a href="#Snomed-362"><span class="linenos">362</span></a>                            <span class="n">mask</span><span class="o">=~</span><span class="p">(</span><span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">len</span><span class="p">()</span> <span class="o">&lt;</span> <span class="mi">6</span><span class="p">),</span>
-</span><span id="Snomed-363"><a href="#Snomed-363"><span class="linenos">363</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
-</span><span id="Snomed-364"><a href="#Snomed-364"><span class="linenos">364</span></a>                        <span class="p">)</span>
-</span><span id="Snomed-365"><a href="#Snomed-365"><span class="linenos">365</span></a>                    <span class="p">)</span>
-</span><span id="Snomed-366"><a href="#Snomed-366"><span class="linenos">366</span></a>                <span class="p">),</span>
-</span><span id="Snomed-367"><a href="#Snomed-367"><span class="linenos">367</span></a>            <span class="p">),</span>
-</span><span id="Snomed-368"><a href="#Snomed-368"><span class="linenos">368</span></a>            <span class="p">(</span>
-</span><span id="Snomed-369"><a href="#Snomed-369"><span class="linenos">369</span></a>                <span class="s2">&quot;Too Long&quot;</span><span class="p">,</span>
-</span><span id="Snomed-370"><a href="#Snomed-370"><span class="linenos">370</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="o">~</span><span class="p">(</span><span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">len</span><span class="p">()</span> <span class="o">&gt;</span> <span class="mi">18</span><span class="p">),</span>
-</span><span id="Snomed-371"><a href="#Snomed-371"><span class="linenos">371</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
-</span><span id="Snomed-372"><a href="#Snomed-372"><span class="linenos">372</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
-</span><span id="Snomed-373"><a href="#Snomed-373"><span class="linenos">373</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
-</span><span id="Snomed-374"><a href="#Snomed-374"><span class="linenos">374</span></a>                            <span class="sa">f</span><span class="s2">&quot;QA Too Long&quot;</span><span class="p">,</span>
-</span><span id="Snomed-375"><a href="#Snomed-375"><span class="linenos">375</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
-</span><span id="Snomed-376"><a href="#Snomed-376"><span class="linenos">376</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
-</span><span id="Snomed-377"><a href="#Snomed-377"><span class="linenos">377</span></a>                            <span class="n">mask</span><span class="o">=~</span><span class="p">(</span><span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">len</span><span class="p">()</span> <span class="o">&gt;</span> <span class="mi">18</span><span class="p">),</span>
-</span><span id="Snomed-378"><a href="#Snomed-378"><span class="linenos">378</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
-</span><span id="Snomed-379"><a href="#Snomed-379"><span class="linenos">379</span></a>                        <span class="p">)</span>
-</span><span id="Snomed-380"><a href="#Snomed-380"><span class="linenos">380</span></a>                    <span class="p">)</span>
-</span><span id="Snomed-381"><a href="#Snomed-381"><span class="linenos">381</span></a>                <span class="p">),</span>
-</span><span id="Snomed-382"><a href="#Snomed-382"><span class="linenos">382</span></a>            <span class="p">),</span>
-</span><span id="Snomed-383"><a href="#Snomed-383"><span class="linenos">383</span></a>            <span class="p">(</span>
-</span><span id="Snomed-384"><a href="#Snomed-384"><span class="linenos">384</span></a>                <span class="s2">&quot;Numeric&quot;</span><span class="p">,</span>
-</span><span id="Snomed-385"><a href="#Snomed-385"><span class="linenos">385</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;[0-9]+$&quot;</span><span class="p">),</span>
-</span><span id="Snomed-386"><a href="#Snomed-386"><span class="linenos">386</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
-</span><span id="Snomed-387"><a href="#Snomed-387"><span class="linenos">387</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
-</span><span id="Snomed-388"><a href="#Snomed-388"><span class="linenos">388</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
-</span><span id="Snomed-389"><a href="#Snomed-389"><span class="linenos">389</span></a>                            <span class="sa">f</span><span class="s2">&quot;QA Numeric&quot;</span><span class="p">,</span>
-</span><span id="Snomed-390"><a href="#Snomed-390"><span class="linenos">390</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
-</span><span id="Snomed-391"><a href="#Snomed-391"><span class="linenos">391</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
-</span><span id="Snomed-392"><a href="#Snomed-392"><span class="linenos">392</span></a>                            <span class="n">mask</span><span class="o">=</span><span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;[0-9]+$&quot;</span><span class="p">),</span>
-</span><span id="Snomed-393"><a href="#Snomed-393"><span class="linenos">393</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
-</span><span id="Snomed-394"><a href="#Snomed-394"><span class="linenos">394</span></a>                        <span class="p">)</span>
-</span><span id="Snomed-395"><a href="#Snomed-395"><span class="linenos">395</span></a>                    <span class="p">)</span>
-</span><span id="Snomed-396"><a href="#Snomed-396"><span class="linenos">396</span></a>                <span class="p">),</span>
-</span><span id="Snomed-397"><a href="#Snomed-397"><span class="linenos">397</span></a>            <span class="p">),</span>
-</span><span id="Snomed-398"><a href="#Snomed-398"><span class="linenos">398</span></a>            <span class="c1"># (</span>
-</span><span id="Snomed-399"><a href="#Snomed-399"><span class="linenos">399</span></a>            <span class="c1"># 	&quot;Is Integer&quot;,</span>
-</span><span id="Snomed-400"><a href="#Snomed-400"><span class="linenos">400</span></a>            <span class="c1"># 	lambda codes : codes.dtype == int,</span>
-</span><span id="Snomed-401"><a href="#Snomed-401"><span class="linenos">401</span></a>            <span class="c1"># 	lambda codes : codes.astype(int) #Convert to integer</span>
-</span><span id="Snomed-402"><a href="#Snomed-402"><span class="linenos">402</span></a>            <span class="c1"># ),</span>
-</span><span id="Snomed-403"><a href="#Snomed-403"><span class="linenos">403</span></a>            <span class="p">(</span>
-</span><span id="Snomed-404"><a href="#Snomed-404"><span class="linenos">404</span></a>                <span class="s2">&quot;In Database&quot;</span><span class="p">,</span>
-</span><span id="Snomed-405"><a href="#Snomed-405"><span class="linenos">405</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">in_database</span><span class="p">(</span><span class="n">codes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">),</span>
-</span><span id="Snomed-406"><a href="#Snomed-406"><span class="linenos">406</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
-</span><span id="Snomed-407"><a href="#Snomed-407"><span class="linenos">407</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
-</span><span id="Snomed-408"><a href="#Snomed-408"><span class="linenos">408</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
-</span><span id="Snomed-409"><a href="#Snomed-409"><span class="linenos">409</span></a>                            <span class="sa">f</span><span class="s2">&quot;QA In Database&quot;</span><span class="p">,</span>
-</span><span id="Snomed-410"><a href="#Snomed-410"><span class="linenos">410</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
-</span><span id="Snomed-411"><a href="#Snomed-411"><span class="linenos">411</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
-</span><span id="Snomed-412"><a href="#Snomed-412"><span class="linenos">412</span></a>                            <span class="n">mask</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">in_database</span><span class="p">(</span><span class="n">codes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">),</span>
-</span><span id="Snomed-413"><a href="#Snomed-413"><span class="linenos">413</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
-</span><span id="Snomed-414"><a href="#Snomed-414"><span class="linenos">414</span></a>                        <span class="p">)</span>
-</span><span id="Snomed-415"><a href="#Snomed-415"><span class="linenos">415</span></a>                    <span class="p">)</span>
-</span><span id="Snomed-416"><a href="#Snomed-416"><span class="linenos">416</span></a>                <span class="p">),</span>
-</span><span id="Snomed-417"><a href="#Snomed-417"><span class="linenos">417</span></a>            <span class="p">),</span>
-</span><span id="Snomed-418"><a href="#Snomed-418"><span class="linenos">418</span></a>        <span class="p">]</span>
+            <div class="pdoc-code codehilite"><pre><span></span><span id="Snomed-349"><a href="#Snomed-349"><span class="linenos">349</span></a><span class="k">class</span><span class="w"> </span><span class="nc">Snomed</span><span class="p">(</span><span class="n">Proto</span><span class="p">):</span>
+</span><span id="Snomed-350"><a href="#Snomed-350"><span class="linenos">350</span></a>    <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="Snomed-351"><a href="#Snomed-351"><span class="linenos">351</span></a>        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s2">&quot;snomed&quot;</span><span class="p">,</span> <span class="n">trud</span><span class="o">.</span><span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;snomed.parquet&quot;</span><span class="p">)</span>
+</span><span id="Snomed-352"><a href="#Snomed-352"><span class="linenos">352</span></a>
+</span><span id="Snomed-353"><a href="#Snomed-353"><span class="linenos">353</span></a>        <span class="bp">self</span><span class="o">.</span><span class="n">checks</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="Snomed-354"><a href="#Snomed-354"><span class="linenos">354</span></a>            <span class="c1"># (</span>
+</span><span id="Snomed-355"><a href="#Snomed-355"><span class="linenos">355</span></a>            <span class="c1"># 	&quot;Not Empty&quot;,</span>
+</span><span id="Snomed-356"><a href="#Snomed-356"><span class="linenos">356</span></a>            <span class="c1"># 	lambda codes : pd.Series([len(codes) &gt; 0]),</span>
+</span><span id="Snomed-357"><a href="#Snomed-357"><span class="linenos">357</span></a>            <span class="c1"># 	lambda codes : raise_exception(Exception(&quot;Code List is Empty&quot;))</span>
+</span><span id="Snomed-358"><a href="#Snomed-358"><span class="linenos">358</span></a>            <span class="c1"># ),</span>
+</span><span id="Snomed-359"><a href="#Snomed-359"><span class="linenos">359</span></a>            <span class="p">(</span>
+</span><span id="Snomed-360"><a href="#Snomed-360"><span class="linenos">360</span></a>                <span class="s2">&quot;Too Short&quot;</span><span class="p">,</span>
+</span><span id="Snomed-361"><a href="#Snomed-361"><span class="linenos">361</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="o">~</span><span class="p">(</span><span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">len</span><span class="p">()</span> <span class="o">&lt;</span> <span class="mi">6</span><span class="p">),</span>
+</span><span id="Snomed-362"><a href="#Snomed-362"><span class="linenos">362</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
+</span><span id="Snomed-363"><a href="#Snomed-363"><span class="linenos">363</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
+</span><span id="Snomed-364"><a href="#Snomed-364"><span class="linenos">364</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
+</span><span id="Snomed-365"><a href="#Snomed-365"><span class="linenos">365</span></a>                            <span class="sa">f</span><span class="s2">&quot;QA Too Short&quot;</span><span class="p">,</span>
+</span><span id="Snomed-366"><a href="#Snomed-366"><span class="linenos">366</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
+</span><span id="Snomed-367"><a href="#Snomed-367"><span class="linenos">367</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
+</span><span id="Snomed-368"><a href="#Snomed-368"><span class="linenos">368</span></a>                            <span class="n">mask</span><span class="o">=~</span><span class="p">(</span><span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">len</span><span class="p">()</span> <span class="o">&lt;</span> <span class="mi">6</span><span class="p">),</span>
+</span><span id="Snomed-369"><a href="#Snomed-369"><span class="linenos">369</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
+</span><span id="Snomed-370"><a href="#Snomed-370"><span class="linenos">370</span></a>                        <span class="p">)</span>
+</span><span id="Snomed-371"><a href="#Snomed-371"><span class="linenos">371</span></a>                    <span class="p">)</span>
+</span><span id="Snomed-372"><a href="#Snomed-372"><span class="linenos">372</span></a>                <span class="p">),</span>
+</span><span id="Snomed-373"><a href="#Snomed-373"><span class="linenos">373</span></a>            <span class="p">),</span>
+</span><span id="Snomed-374"><a href="#Snomed-374"><span class="linenos">374</span></a>            <span class="p">(</span>
+</span><span id="Snomed-375"><a href="#Snomed-375"><span class="linenos">375</span></a>                <span class="s2">&quot;Too Long&quot;</span><span class="p">,</span>
+</span><span id="Snomed-376"><a href="#Snomed-376"><span class="linenos">376</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="o">~</span><span class="p">(</span><span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">len</span><span class="p">()</span> <span class="o">&gt;</span> <span class="mi">18</span><span class="p">),</span>
+</span><span id="Snomed-377"><a href="#Snomed-377"><span class="linenos">377</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
+</span><span id="Snomed-378"><a href="#Snomed-378"><span class="linenos">378</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
+</span><span id="Snomed-379"><a href="#Snomed-379"><span class="linenos">379</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
+</span><span id="Snomed-380"><a href="#Snomed-380"><span class="linenos">380</span></a>                            <span class="sa">f</span><span class="s2">&quot;QA Too Long&quot;</span><span class="p">,</span>
+</span><span id="Snomed-381"><a href="#Snomed-381"><span class="linenos">381</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
+</span><span id="Snomed-382"><a href="#Snomed-382"><span class="linenos">382</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
+</span><span id="Snomed-383"><a href="#Snomed-383"><span class="linenos">383</span></a>                            <span class="n">mask</span><span class="o">=~</span><span class="p">(</span><span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">len</span><span class="p">()</span> <span class="o">&gt;</span> <span class="mi">18</span><span class="p">),</span>
+</span><span id="Snomed-384"><a href="#Snomed-384"><span class="linenos">384</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
+</span><span id="Snomed-385"><a href="#Snomed-385"><span class="linenos">385</span></a>                        <span class="p">)</span>
+</span><span id="Snomed-386"><a href="#Snomed-386"><span class="linenos">386</span></a>                    <span class="p">)</span>
+</span><span id="Snomed-387"><a href="#Snomed-387"><span class="linenos">387</span></a>                <span class="p">),</span>
+</span><span id="Snomed-388"><a href="#Snomed-388"><span class="linenos">388</span></a>            <span class="p">),</span>
+</span><span id="Snomed-389"><a href="#Snomed-389"><span class="linenos">389</span></a>            <span class="p">(</span>
+</span><span id="Snomed-390"><a href="#Snomed-390"><span class="linenos">390</span></a>                <span class="s2">&quot;Numeric&quot;</span><span class="p">,</span>
+</span><span id="Snomed-391"><a href="#Snomed-391"><span class="linenos">391</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;[0-9]+$&quot;</span><span class="p">),</span>
+</span><span id="Snomed-392"><a href="#Snomed-392"><span class="linenos">392</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
+</span><span id="Snomed-393"><a href="#Snomed-393"><span class="linenos">393</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
+</span><span id="Snomed-394"><a href="#Snomed-394"><span class="linenos">394</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
+</span><span id="Snomed-395"><a href="#Snomed-395"><span class="linenos">395</span></a>                            <span class="sa">f</span><span class="s2">&quot;QA Numeric&quot;</span><span class="p">,</span>
+</span><span id="Snomed-396"><a href="#Snomed-396"><span class="linenos">396</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
+</span><span id="Snomed-397"><a href="#Snomed-397"><span class="linenos">397</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
+</span><span id="Snomed-398"><a href="#Snomed-398"><span class="linenos">398</span></a>                            <span class="n">mask</span><span class="o">=</span><span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;[0-9]+$&quot;</span><span class="p">),</span>
+</span><span id="Snomed-399"><a href="#Snomed-399"><span class="linenos">399</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
+</span><span id="Snomed-400"><a href="#Snomed-400"><span class="linenos">400</span></a>                        <span class="p">)</span>
+</span><span id="Snomed-401"><a href="#Snomed-401"><span class="linenos">401</span></a>                    <span class="p">)</span>
+</span><span id="Snomed-402"><a href="#Snomed-402"><span class="linenos">402</span></a>                <span class="p">),</span>
+</span><span id="Snomed-403"><a href="#Snomed-403"><span class="linenos">403</span></a>            <span class="p">),</span>
+</span><span id="Snomed-404"><a href="#Snomed-404"><span class="linenos">404</span></a>            <span class="c1"># (</span>
+</span><span id="Snomed-405"><a href="#Snomed-405"><span class="linenos">405</span></a>            <span class="c1"># 	&quot;Is Integer&quot;,</span>
+</span><span id="Snomed-406"><a href="#Snomed-406"><span class="linenos">406</span></a>            <span class="c1"># 	lambda codes : codes.dtype == int,</span>
+</span><span id="Snomed-407"><a href="#Snomed-407"><span class="linenos">407</span></a>            <span class="c1"># 	lambda codes : codes.astype(int) #Convert to integer</span>
+</span><span id="Snomed-408"><a href="#Snomed-408"><span class="linenos">408</span></a>            <span class="c1"># ),</span>
+</span><span id="Snomed-409"><a href="#Snomed-409"><span class="linenos">409</span></a>            <span class="p">(</span>
+</span><span id="Snomed-410"><a href="#Snomed-410"><span class="linenos">410</span></a>                <span class="s2">&quot;In Database&quot;</span><span class="p">,</span>
+</span><span id="Snomed-411"><a href="#Snomed-411"><span class="linenos">411</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">in_database</span><span class="p">(</span><span class="n">codes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">),</span>
+</span><span id="Snomed-412"><a href="#Snomed-412"><span class="linenos">412</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
+</span><span id="Snomed-413"><a href="#Snomed-413"><span class="linenos">413</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
+</span><span id="Snomed-414"><a href="#Snomed-414"><span class="linenos">414</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
+</span><span id="Snomed-415"><a href="#Snomed-415"><span class="linenos">415</span></a>                            <span class="sa">f</span><span class="s2">&quot;QA In Database&quot;</span><span class="p">,</span>
+</span><span id="Snomed-416"><a href="#Snomed-416"><span class="linenos">416</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
+</span><span id="Snomed-417"><a href="#Snomed-417"><span class="linenos">417</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
+</span><span id="Snomed-418"><a href="#Snomed-418"><span class="linenos">418</span></a>                            <span class="n">mask</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">in_database</span><span class="p">(</span><span class="n">codes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">),</span>
+</span><span id="Snomed-419"><a href="#Snomed-419"><span class="linenos">419</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
+</span><span id="Snomed-420"><a href="#Snomed-420"><span class="linenos">420</span></a>                        <span class="p">)</span>
+</span><span id="Snomed-421"><a href="#Snomed-421"><span class="linenos">421</span></a>                    <span class="p">)</span>
+</span><span id="Snomed-422"><a href="#Snomed-422"><span class="linenos">422</span></a>                <span class="p">),</span>
+</span><span id="Snomed-423"><a href="#Snomed-423"><span class="linenos">423</span></a>            <span class="p">),</span>
+</span><span id="Snomed-424"><a href="#Snomed-424"><span class="linenos">424</span></a>        <span class="p">]</span>
 </span></pre></div>
 
 
@@ -1643,42 +1640,42 @@
 
     </div>
     <a class="headerlink" href="#Opcs4"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="Opcs4-421"><a href="#Opcs4-421"><span class="linenos">421</span></a><span class="k">class</span><span class="w"> </span><span class="nc">Opcs4</span><span class="p">(</span><span class="n">Proto</span><span class="p">):</span>
-</span><span id="Opcs4-422"><a href="#Opcs4-422"><span class="linenos">422</span></a>    <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="Opcs4-423"><a href="#Opcs4-423"><span class="linenos">423</span></a>        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s2">&quot;opcs4&quot;</span><span class="p">,</span> <span class="n">trud</span><span class="o">.</span><span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;opcs4.parquet&quot;</span><span class="p">)</span>
-</span><span id="Opcs4-424"><a href="#Opcs4-424"><span class="linenos">424</span></a>
-</span><span id="Opcs4-425"><a href="#Opcs4-425"><span class="linenos">425</span></a>        <span class="bp">self</span><span class="o">.</span><span class="n">checks</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="Opcs4-426"><a href="#Opcs4-426"><span class="linenos">426</span></a>            <span class="p">(</span>
-</span><span id="Opcs4-427"><a href="#Opcs4-427"><span class="linenos">427</span></a>                <span class="s2">&quot;Not Empty&quot;</span><span class="p">,</span>
-</span><span id="Opcs4-428"><a href="#Opcs4-428"><span class="linenos">428</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">Series</span><span class="p">([</span><span class="nb">len</span><span class="p">(</span><span class="n">codes</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">]),</span>
-</span><span id="Opcs4-429"><a href="#Opcs4-429"><span class="linenos">429</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
-</span><span id="Opcs4-430"><a href="#Opcs4-430"><span class="linenos">430</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
-</span><span id="Opcs4-431"><a href="#Opcs4-431"><span class="linenos">431</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
-</span><span id="Opcs4-432"><a href="#Opcs4-432"><span class="linenos">432</span></a>                            <span class="sa">f</span><span class="s2">&quot;Code list is empty&quot;</span><span class="p">,</span>
-</span><span id="Opcs4-433"><a href="#Opcs4-433"><span class="linenos">433</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
-</span><span id="Opcs4-434"><a href="#Opcs4-434"><span class="linenos">434</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
-</span><span id="Opcs4-435"><a href="#Opcs4-435"><span class="linenos">435</span></a>                            <span class="n">mask</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-</span><span id="Opcs4-436"><a href="#Opcs4-436"><span class="linenos">436</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
-</span><span id="Opcs4-437"><a href="#Opcs4-437"><span class="linenos">437</span></a>                        <span class="p">)</span>
-</span><span id="Opcs4-438"><a href="#Opcs4-438"><span class="linenos">438</span></a>                    <span class="p">)</span>
-</span><span id="Opcs4-439"><a href="#Opcs4-439"><span class="linenos">439</span></a>                <span class="p">),</span>
-</span><span id="Opcs4-440"><a href="#Opcs4-440"><span class="linenos">440</span></a>            <span class="p">),</span>
-</span><span id="Opcs4-441"><a href="#Opcs4-441"><span class="linenos">441</span></a>            <span class="p">(</span>
-</span><span id="Opcs4-442"><a href="#Opcs4-442"><span class="linenos">442</span></a>                <span class="s2">&quot;In Database&quot;</span><span class="p">,</span>
-</span><span id="Opcs4-443"><a href="#Opcs4-443"><span class="linenos">443</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">in_database</span><span class="p">(</span><span class="n">codes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">),</span>
-</span><span id="Opcs4-444"><a href="#Opcs4-444"><span class="linenos">444</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
-</span><span id="Opcs4-445"><a href="#Opcs4-445"><span class="linenos">445</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
-</span><span id="Opcs4-446"><a href="#Opcs4-446"><span class="linenos">446</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
-</span><span id="Opcs4-447"><a href="#Opcs4-447"><span class="linenos">447</span></a>                            <span class="sa">f</span><span class="s2">&quot;QA In Database&quot;</span><span class="p">,</span>
-</span><span id="Opcs4-448"><a href="#Opcs4-448"><span class="linenos">448</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
-</span><span id="Opcs4-449"><a href="#Opcs4-449"><span class="linenos">449</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
-</span><span id="Opcs4-450"><a href="#Opcs4-450"><span class="linenos">450</span></a>                            <span class="n">mask</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">in_database</span><span class="p">(</span><span class="n">codes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">),</span>
-</span><span id="Opcs4-451"><a href="#Opcs4-451"><span class="linenos">451</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
-</span><span id="Opcs4-452"><a href="#Opcs4-452"><span class="linenos">452</span></a>                        <span class="p">)</span>
-</span><span id="Opcs4-453"><a href="#Opcs4-453"><span class="linenos">453</span></a>                    <span class="p">)</span>
-</span><span id="Opcs4-454"><a href="#Opcs4-454"><span class="linenos">454</span></a>                <span class="p">),</span>
-</span><span id="Opcs4-455"><a href="#Opcs4-455"><span class="linenos">455</span></a>            <span class="p">),</span>
-</span><span id="Opcs4-456"><a href="#Opcs4-456"><span class="linenos">456</span></a>        <span class="p">]</span>
+            <div class="pdoc-code codehilite"><pre><span></span><span id="Opcs4-427"><a href="#Opcs4-427"><span class="linenos">427</span></a><span class="k">class</span><span class="w"> </span><span class="nc">Opcs4</span><span class="p">(</span><span class="n">Proto</span><span class="p">):</span>
+</span><span id="Opcs4-428"><a href="#Opcs4-428"><span class="linenos">428</span></a>    <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="Opcs4-429"><a href="#Opcs4-429"><span class="linenos">429</span></a>        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s2">&quot;opcs4&quot;</span><span class="p">,</span> <span class="n">trud</span><span class="o">.</span><span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;opcs4.parquet&quot;</span><span class="p">)</span>
+</span><span id="Opcs4-430"><a href="#Opcs4-430"><span class="linenos">430</span></a>
+</span><span id="Opcs4-431"><a href="#Opcs4-431"><span class="linenos">431</span></a>        <span class="bp">self</span><span class="o">.</span><span class="n">checks</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="Opcs4-432"><a href="#Opcs4-432"><span class="linenos">432</span></a>            <span class="p">(</span>
+</span><span id="Opcs4-433"><a href="#Opcs4-433"><span class="linenos">433</span></a>                <span class="s2">&quot;Not Empty&quot;</span><span class="p">,</span>
+</span><span id="Opcs4-434"><a href="#Opcs4-434"><span class="linenos">434</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">Series</span><span class="p">([</span><span class="nb">len</span><span class="p">(</span><span class="n">codes</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">]),</span>
+</span><span id="Opcs4-435"><a href="#Opcs4-435"><span class="linenos">435</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
+</span><span id="Opcs4-436"><a href="#Opcs4-436"><span class="linenos">436</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
+</span><span id="Opcs4-437"><a href="#Opcs4-437"><span class="linenos">437</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
+</span><span id="Opcs4-438"><a href="#Opcs4-438"><span class="linenos">438</span></a>                            <span class="sa">f</span><span class="s2">&quot;Code list is empty&quot;</span><span class="p">,</span>
+</span><span id="Opcs4-439"><a href="#Opcs4-439"><span class="linenos">439</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
+</span><span id="Opcs4-440"><a href="#Opcs4-440"><span class="linenos">440</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
+</span><span id="Opcs4-441"><a href="#Opcs4-441"><span class="linenos">441</span></a>                            <span class="n">mask</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
+</span><span id="Opcs4-442"><a href="#Opcs4-442"><span class="linenos">442</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
+</span><span id="Opcs4-443"><a href="#Opcs4-443"><span class="linenos">443</span></a>                        <span class="p">)</span>
+</span><span id="Opcs4-444"><a href="#Opcs4-444"><span class="linenos">444</span></a>                    <span class="p">)</span>
+</span><span id="Opcs4-445"><a href="#Opcs4-445"><span class="linenos">445</span></a>                <span class="p">),</span>
+</span><span id="Opcs4-446"><a href="#Opcs4-446"><span class="linenos">446</span></a>            <span class="p">),</span>
+</span><span id="Opcs4-447"><a href="#Opcs4-447"><span class="linenos">447</span></a>            <span class="p">(</span>
+</span><span id="Opcs4-448"><a href="#Opcs4-448"><span class="linenos">448</span></a>                <span class="s2">&quot;In Database&quot;</span><span class="p">,</span>
+</span><span id="Opcs4-449"><a href="#Opcs4-449"><span class="linenos">449</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">in_database</span><span class="p">(</span><span class="n">codes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">),</span>
+</span><span id="Opcs4-450"><a href="#Opcs4-450"><span class="linenos">450</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
+</span><span id="Opcs4-451"><a href="#Opcs4-451"><span class="linenos">451</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
+</span><span id="Opcs4-452"><a href="#Opcs4-452"><span class="linenos">452</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
+</span><span id="Opcs4-453"><a href="#Opcs4-453"><span class="linenos">453</span></a>                            <span class="sa">f</span><span class="s2">&quot;QA In Database&quot;</span><span class="p">,</span>
+</span><span id="Opcs4-454"><a href="#Opcs4-454"><span class="linenos">454</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
+</span><span id="Opcs4-455"><a href="#Opcs4-455"><span class="linenos">455</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
+</span><span id="Opcs4-456"><a href="#Opcs4-456"><span class="linenos">456</span></a>                            <span class="n">mask</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">in_database</span><span class="p">(</span><span class="n">codes</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">),</span>
+</span><span id="Opcs4-457"><a href="#Opcs4-457"><span class="linenos">457</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
+</span><span id="Opcs4-458"><a href="#Opcs4-458"><span class="linenos">458</span></a>                        <span class="p">)</span>
+</span><span id="Opcs4-459"><a href="#Opcs4-459"><span class="linenos">459</span></a>                    <span class="p">)</span>
+</span><span id="Opcs4-460"><a href="#Opcs4-460"><span class="linenos">460</span></a>                <span class="p">),</span>
+</span><span id="Opcs4-461"><a href="#Opcs4-461"><span class="linenos">461</span></a>            <span class="p">),</span>
+</span><span id="Opcs4-462"><a href="#Opcs4-462"><span class="linenos">462</span></a>        <span class="p">]</span>
 </span></pre></div>
 
 
@@ -1728,41 +1725,41 @@
 
     </div>
     <a class="headerlink" href="#Atc"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="Atc-459"><a href="#Atc-459"><span class="linenos">459</span></a><span class="k">class</span><span class="w"> </span><span class="nc">Atc</span><span class="p">(</span><span class="n">Proto</span><span class="p">):</span>
-</span><span id="Atc-460"><a href="#Atc-460"><span class="linenos">460</span></a>    <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="Atc-461"><a href="#Atc-461"><span class="linenos">461</span></a>        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s2">&quot;atc&quot;</span><span class="p">,</span> <span class="n">trud_codes_path</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
-</span><span id="Atc-462"><a href="#Atc-462"><span class="linenos">462</span></a>        <span class="bp">self</span><span class="o">.</span><span class="n">checks</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="Atc-463"><a href="#Atc-463"><span class="linenos">463</span></a>            <span class="p">(</span>
-</span><span id="Atc-464"><a href="#Atc-464"><span class="linenos">464</span></a>                <span class="s2">&quot;Not Empty&quot;</span><span class="p">,</span>
-</span><span id="Atc-465"><a href="#Atc-465"><span class="linenos">465</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">Series</span><span class="p">([</span><span class="nb">len</span><span class="p">(</span><span class="n">codes</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">]),</span>
-</span><span id="Atc-466"><a href="#Atc-466"><span class="linenos">466</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
-</span><span id="Atc-467"><a href="#Atc-467"><span class="linenos">467</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
-</span><span id="Atc-468"><a href="#Atc-468"><span class="linenos">468</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
-</span><span id="Atc-469"><a href="#Atc-469"><span class="linenos">469</span></a>                            <span class="sa">f</span><span class="s2">&quot;Code list is empty&quot;</span><span class="p">,</span>
-</span><span id="Atc-470"><a href="#Atc-470"><span class="linenos">470</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
-</span><span id="Atc-471"><a href="#Atc-471"><span class="linenos">471</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
-</span><span id="Atc-472"><a href="#Atc-472"><span class="linenos">472</span></a>                            <span class="n">mask</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-</span><span id="Atc-473"><a href="#Atc-473"><span class="linenos">473</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
-</span><span id="Atc-474"><a href="#Atc-474"><span class="linenos">474</span></a>                        <span class="p">)</span>
-</span><span id="Atc-475"><a href="#Atc-475"><span class="linenos">475</span></a>                    <span class="p">)</span>
-</span><span id="Atc-476"><a href="#Atc-476"><span class="linenos">476</span></a>                <span class="p">),</span>
-</span><span id="Atc-477"><a href="#Atc-477"><span class="linenos">477</span></a>            <span class="p">),</span>
-</span><span id="Atc-478"><a href="#Atc-478"><span class="linenos">478</span></a>            <span class="p">(</span>
-</span><span id="Atc-479"><a href="#Atc-479"><span class="linenos">479</span></a>                <span class="s2">&quot;Alphanumeric Capital&quot;</span><span class="p">,</span>
-</span><span id="Atc-480"><a href="#Atc-480"><span class="linenos">480</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;^[A-Z0-9]+$&quot;</span><span class="p">),</span>
-</span><span id="Atc-481"><a href="#Atc-481"><span class="linenos">481</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
-</span><span id="Atc-482"><a href="#Atc-482"><span class="linenos">482</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
-</span><span id="Atc-483"><a href="#Atc-483"><span class="linenos">483</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
-</span><span id="Atc-484"><a href="#Atc-484"><span class="linenos">484</span></a>                            <span class="sa">f</span><span class="s2">&quot;QA Alphanumeric Capital&quot;</span><span class="p">,</span>
-</span><span id="Atc-485"><a href="#Atc-485"><span class="linenos">485</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
-</span><span id="Atc-486"><a href="#Atc-486"><span class="linenos">486</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
-</span><span id="Atc-487"><a href="#Atc-487"><span class="linenos">487</span></a>                            <span class="n">mask</span><span class="o">=</span><span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;^[A-Z0-9]+$&quot;</span><span class="p">),</span>
-</span><span id="Atc-488"><a href="#Atc-488"><span class="linenos">488</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
-</span><span id="Atc-489"><a href="#Atc-489"><span class="linenos">489</span></a>                        <span class="p">)</span>
-</span><span id="Atc-490"><a href="#Atc-490"><span class="linenos">490</span></a>                    <span class="p">)</span>
-</span><span id="Atc-491"><a href="#Atc-491"><span class="linenos">491</span></a>                <span class="p">),</span>
-</span><span id="Atc-492"><a href="#Atc-492"><span class="linenos">492</span></a>            <span class="p">),</span>
-</span><span id="Atc-493"><a href="#Atc-493"><span class="linenos">493</span></a>        <span class="p">]</span>
+            <div class="pdoc-code codehilite"><pre><span></span><span id="Atc-465"><a href="#Atc-465"><span class="linenos">465</span></a><span class="k">class</span><span class="w"> </span><span class="nc">Atc</span><span class="p">(</span><span class="n">Proto</span><span class="p">):</span>
+</span><span id="Atc-466"><a href="#Atc-466"><span class="linenos">466</span></a>    <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="Atc-467"><a href="#Atc-467"><span class="linenos">467</span></a>        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s2">&quot;atc&quot;</span><span class="p">,</span> <span class="n">trud_codes_path</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
+</span><span id="Atc-468"><a href="#Atc-468"><span class="linenos">468</span></a>        <span class="bp">self</span><span class="o">.</span><span class="n">checks</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="Atc-469"><a href="#Atc-469"><span class="linenos">469</span></a>            <span class="p">(</span>
+</span><span id="Atc-470"><a href="#Atc-470"><span class="linenos">470</span></a>                <span class="s2">&quot;Not Empty&quot;</span><span class="p">,</span>
+</span><span id="Atc-471"><a href="#Atc-471"><span class="linenos">471</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">Series</span><span class="p">([</span><span class="nb">len</span><span class="p">(</span><span class="n">codes</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">]),</span>
+</span><span id="Atc-472"><a href="#Atc-472"><span class="linenos">472</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
+</span><span id="Atc-473"><a href="#Atc-473"><span class="linenos">473</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
+</span><span id="Atc-474"><a href="#Atc-474"><span class="linenos">474</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
+</span><span id="Atc-475"><a href="#Atc-475"><span class="linenos">475</span></a>                            <span class="sa">f</span><span class="s2">&quot;Code list is empty&quot;</span><span class="p">,</span>
+</span><span id="Atc-476"><a href="#Atc-476"><span class="linenos">476</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
+</span><span id="Atc-477"><a href="#Atc-477"><span class="linenos">477</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
+</span><span id="Atc-478"><a href="#Atc-478"><span class="linenos">478</span></a>                            <span class="n">mask</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
+</span><span id="Atc-479"><a href="#Atc-479"><span class="linenos">479</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
+</span><span id="Atc-480"><a href="#Atc-480"><span class="linenos">480</span></a>                        <span class="p">)</span>
+</span><span id="Atc-481"><a href="#Atc-481"><span class="linenos">481</span></a>                    <span class="p">)</span>
+</span><span id="Atc-482"><a href="#Atc-482"><span class="linenos">482</span></a>                <span class="p">),</span>
+</span><span id="Atc-483"><a href="#Atc-483"><span class="linenos">483</span></a>            <span class="p">),</span>
+</span><span id="Atc-484"><a href="#Atc-484"><span class="linenos">484</span></a>            <span class="p">(</span>
+</span><span id="Atc-485"><a href="#Atc-485"><span class="linenos">485</span></a>                <span class="s2">&quot;Alphanumeric Capital&quot;</span><span class="p">,</span>
+</span><span id="Atc-486"><a href="#Atc-486"><span class="linenos">486</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;^[A-Z0-9]+$&quot;</span><span class="p">),</span>
+</span><span id="Atc-487"><a href="#Atc-487"><span class="linenos">487</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
+</span><span id="Atc-488"><a href="#Atc-488"><span class="linenos">488</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
+</span><span id="Atc-489"><a href="#Atc-489"><span class="linenos">489</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
+</span><span id="Atc-490"><a href="#Atc-490"><span class="linenos">490</span></a>                            <span class="sa">f</span><span class="s2">&quot;QA Alphanumeric Capital&quot;</span><span class="p">,</span>
+</span><span id="Atc-491"><a href="#Atc-491"><span class="linenos">491</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
+</span><span id="Atc-492"><a href="#Atc-492"><span class="linenos">492</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
+</span><span id="Atc-493"><a href="#Atc-493"><span class="linenos">493</span></a>                            <span class="n">mask</span><span class="o">=</span><span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;^[A-Z0-9]+$&quot;</span><span class="p">),</span>
+</span><span id="Atc-494"><a href="#Atc-494"><span class="linenos">494</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
+</span><span id="Atc-495"><a href="#Atc-495"><span class="linenos">495</span></a>                        <span class="p">)</span>
+</span><span id="Atc-496"><a href="#Atc-496"><span class="linenos">496</span></a>                    <span class="p">)</span>
+</span><span id="Atc-497"><a href="#Atc-497"><span class="linenos">497</span></a>                <span class="p">),</span>
+</span><span id="Atc-498"><a href="#Atc-498"><span class="linenos">498</span></a>            <span class="p">),</span>
+</span><span id="Atc-499"><a href="#Atc-499"><span class="linenos">499</span></a>        <span class="p">]</span>
 </span></pre></div>
 
 
@@ -1812,26 +1809,26 @@
 
     </div>
     <a class="headerlink" href="#Med"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="Med-496"><a href="#Med-496"><span class="linenos">496</span></a><span class="k">class</span><span class="w"> </span><span class="nc">Med</span><span class="p">(</span><span class="n">Proto</span><span class="p">):</span>
-</span><span id="Med-497"><a href="#Med-497"><span class="linenos">497</span></a>    <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="Med-498"><a href="#Med-498"><span class="linenos">498</span></a>        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s2">&quot;med&quot;</span><span class="p">,</span> <span class="n">trud_codes_path</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
-</span><span id="Med-499"><a href="#Med-499"><span class="linenos">499</span></a>        <span class="bp">self</span><span class="o">.</span><span class="n">checks</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="Med-500"><a href="#Med-500"><span class="linenos">500</span></a>            <span class="p">(</span>
-</span><span id="Med-501"><a href="#Med-501"><span class="linenos">501</span></a>                <span class="s2">&quot;Not Empty&quot;</span><span class="p">,</span>
-</span><span id="Med-502"><a href="#Med-502"><span class="linenos">502</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">Series</span><span class="p">([</span><span class="nb">len</span><span class="p">(</span><span class="n">codes</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">]),</span>
-</span><span id="Med-503"><a href="#Med-503"><span class="linenos">503</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
-</span><span id="Med-504"><a href="#Med-504"><span class="linenos">504</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
-</span><span id="Med-505"><a href="#Med-505"><span class="linenos">505</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
-</span><span id="Med-506"><a href="#Med-506"><span class="linenos">506</span></a>                            <span class="sa">f</span><span class="s2">&quot;Code list is empty&quot;</span><span class="p">,</span>
-</span><span id="Med-507"><a href="#Med-507"><span class="linenos">507</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
-</span><span id="Med-508"><a href="#Med-508"><span class="linenos">508</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
-</span><span id="Med-509"><a href="#Med-509"><span class="linenos">509</span></a>                            <span class="n">mask</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-</span><span id="Med-510"><a href="#Med-510"><span class="linenos">510</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
-</span><span id="Med-511"><a href="#Med-511"><span class="linenos">511</span></a>                        <span class="p">)</span>
-</span><span id="Med-512"><a href="#Med-512"><span class="linenos">512</span></a>                    <span class="p">)</span>
-</span><span id="Med-513"><a href="#Med-513"><span class="linenos">513</span></a>                <span class="p">),</span>
-</span><span id="Med-514"><a href="#Med-514"><span class="linenos">514</span></a>            <span class="p">)</span>
-</span><span id="Med-515"><a href="#Med-515"><span class="linenos">515</span></a>        <span class="p">]</span>
+            <div class="pdoc-code codehilite"><pre><span></span><span id="Med-502"><a href="#Med-502"><span class="linenos">502</span></a><span class="k">class</span><span class="w"> </span><span class="nc">Med</span><span class="p">(</span><span class="n">Proto</span><span class="p">):</span>
+</span><span id="Med-503"><a href="#Med-503"><span class="linenos">503</span></a>    <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="Med-504"><a href="#Med-504"><span class="linenos">504</span></a>        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s2">&quot;med&quot;</span><span class="p">,</span> <span class="n">trud_codes_path</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
+</span><span id="Med-505"><a href="#Med-505"><span class="linenos">505</span></a>        <span class="bp">self</span><span class="o">.</span><span class="n">checks</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="Med-506"><a href="#Med-506"><span class="linenos">506</span></a>            <span class="p">(</span>
+</span><span id="Med-507"><a href="#Med-507"><span class="linenos">507</span></a>                <span class="s2">&quot;Not Empty&quot;</span><span class="p">,</span>
+</span><span id="Med-508"><a href="#Med-508"><span class="linenos">508</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">Series</span><span class="p">([</span><span class="nb">len</span><span class="p">(</span><span class="n">codes</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">]),</span>
+</span><span id="Med-509"><a href="#Med-509"><span class="linenos">509</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
+</span><span id="Med-510"><a href="#Med-510"><span class="linenos">510</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
+</span><span id="Med-511"><a href="#Med-511"><span class="linenos">511</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
+</span><span id="Med-512"><a href="#Med-512"><span class="linenos">512</span></a>                            <span class="sa">f</span><span class="s2">&quot;Code list is empty&quot;</span><span class="p">,</span>
+</span><span id="Med-513"><a href="#Med-513"><span class="linenos">513</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
+</span><span id="Med-514"><a href="#Med-514"><span class="linenos">514</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
+</span><span id="Med-515"><a href="#Med-515"><span class="linenos">515</span></a>                            <span class="n">mask</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
+</span><span id="Med-516"><a href="#Med-516"><span class="linenos">516</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
+</span><span id="Med-517"><a href="#Med-517"><span class="linenos">517</span></a>                        <span class="p">)</span>
+</span><span id="Med-518"><a href="#Med-518"><span class="linenos">518</span></a>                    <span class="p">)</span>
+</span><span id="Med-519"><a href="#Med-519"><span class="linenos">519</span></a>                <span class="p">),</span>
+</span><span id="Med-520"><a href="#Med-520"><span class="linenos">520</span></a>            <span class="p">)</span>
+</span><span id="Med-521"><a href="#Med-521"><span class="linenos">521</span></a>        <span class="p">]</span>
 </span></pre></div>
 
 
@@ -1881,26 +1878,26 @@
 
     </div>
     <a class="headerlink" href="#Cprd"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="Cprd-518"><a href="#Cprd-518"><span class="linenos">518</span></a><span class="k">class</span><span class="w"> </span><span class="nc">Cprd</span><span class="p">(</span><span class="n">Proto</span><span class="p">):</span>
-</span><span id="Cprd-519"><a href="#Cprd-519"><span class="linenos">519</span></a>    <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
-</span><span id="Cprd-520"><a href="#Cprd-520"><span class="linenos">520</span></a>        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s2">&quot;cprd&quot;</span><span class="p">,</span> <span class="n">trud_codes_path</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
-</span><span id="Cprd-521"><a href="#Cprd-521"><span class="linenos">521</span></a>        <span class="bp">self</span><span class="o">.</span><span class="n">checks</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="Cprd-522"><a href="#Cprd-522"><span class="linenos">522</span></a>            <span class="p">(</span>
-</span><span id="Cprd-523"><a href="#Cprd-523"><span class="linenos">523</span></a>                <span class="s2">&quot;Not Empty&quot;</span><span class="p">,</span>
-</span><span id="Cprd-524"><a href="#Cprd-524"><span class="linenos">524</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">Series</span><span class="p">([</span><span class="nb">len</span><span class="p">(</span><span class="n">codes</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">]),</span>
-</span><span id="Cprd-525"><a href="#Cprd-525"><span class="linenos">525</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
-</span><span id="Cprd-526"><a href="#Cprd-526"><span class="linenos">526</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
-</span><span id="Cprd-527"><a href="#Cprd-527"><span class="linenos">527</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
-</span><span id="Cprd-528"><a href="#Cprd-528"><span class="linenos">528</span></a>                            <span class="sa">f</span><span class="s2">&quot;Code list is empty&quot;</span><span class="p">,</span>
-</span><span id="Cprd-529"><a href="#Cprd-529"><span class="linenos">529</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
-</span><span id="Cprd-530"><a href="#Cprd-530"><span class="linenos">530</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
-</span><span id="Cprd-531"><a href="#Cprd-531"><span class="linenos">531</span></a>                            <span class="n">mask</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-</span><span id="Cprd-532"><a href="#Cprd-532"><span class="linenos">532</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
-</span><span id="Cprd-533"><a href="#Cprd-533"><span class="linenos">533</span></a>                        <span class="p">)</span>
-</span><span id="Cprd-534"><a href="#Cprd-534"><span class="linenos">534</span></a>                    <span class="p">)</span>
-</span><span id="Cprd-535"><a href="#Cprd-535"><span class="linenos">535</span></a>                <span class="p">),</span>
-</span><span id="Cprd-536"><a href="#Cprd-536"><span class="linenos">536</span></a>            <span class="p">)</span>
-</span><span id="Cprd-537"><a href="#Cprd-537"><span class="linenos">537</span></a>        <span class="p">]</span>
+            <div class="pdoc-code codehilite"><pre><span></span><span id="Cprd-524"><a href="#Cprd-524"><span class="linenos">524</span></a><span class="k">class</span><span class="w"> </span><span class="nc">Cprd</span><span class="p">(</span><span class="n">Proto</span><span class="p">):</span>
+</span><span id="Cprd-525"><a href="#Cprd-525"><span class="linenos">525</span></a>    <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+</span><span id="Cprd-526"><a href="#Cprd-526"><span class="linenos">526</span></a>        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s2">&quot;cprd&quot;</span><span class="p">,</span> <span class="n">trud_codes_path</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
+</span><span id="Cprd-527"><a href="#Cprd-527"><span class="linenos">527</span></a>        <span class="bp">self</span><span class="o">.</span><span class="n">checks</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="Cprd-528"><a href="#Cprd-528"><span class="linenos">528</span></a>            <span class="p">(</span>
+</span><span id="Cprd-529"><a href="#Cprd-529"><span class="linenos">529</span></a>                <span class="s2">&quot;Not Empty&quot;</span><span class="p">,</span>
+</span><span id="Cprd-530"><a href="#Cprd-530"><span class="linenos">530</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">Series</span><span class="p">([</span><span class="nb">len</span><span class="p">(</span><span class="n">codes</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">]),</span>
+</span><span id="Cprd-531"><a href="#Cprd-531"><span class="linenos">531</span></a>                <span class="k">lambda</span> <span class="n">codes</span><span class="p">,</span> <span class="n">codes_file</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">raise_exception</span><span class="p">(</span>
+</span><span id="Cprd-532"><a href="#Cprd-532"><span class="linenos">532</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
+</span><span id="Cprd-533"><a href="#Cprd-533"><span class="linenos">533</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
+</span><span id="Cprd-534"><a href="#Cprd-534"><span class="linenos">534</span></a>                            <span class="sa">f</span><span class="s2">&quot;Code list is empty&quot;</span><span class="p">,</span>
+</span><span id="Cprd-535"><a href="#Cprd-535"><span class="linenos">535</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
+</span><span id="Cprd-536"><a href="#Cprd-536"><span class="linenos">536</span></a>                            <span class="n">codes_file</span><span class="o">=</span><span class="n">codes_file</span><span class="p">,</span>
+</span><span id="Cprd-537"><a href="#Cprd-537"><span class="linenos">537</span></a>                            <span class="n">mask</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
+</span><span id="Cprd-538"><a href="#Cprd-538"><span class="linenos">538</span></a>                            <span class="n">code_type</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
+</span><span id="Cprd-539"><a href="#Cprd-539"><span class="linenos">539</span></a>                        <span class="p">)</span>
+</span><span id="Cprd-540"><a href="#Cprd-540"><span class="linenos">540</span></a>                    <span class="p">)</span>
+</span><span id="Cprd-541"><a href="#Cprd-541"><span class="linenos">541</span></a>                <span class="p">),</span>
+</span><span id="Cprd-542"><a href="#Cprd-542"><span class="linenos">542</span></a>            <span class="p">)</span>
+</span><span id="Cprd-543"><a href="#Cprd-543"><span class="linenos">543</span></a>        <span class="p">]</span>
 </span></pre></div>
 
 
@@ -1950,25 +1947,25 @@
 
     </div>
     <a class="headerlink" href="#CodeTypeParser"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="CodeTypeParser-540"><a href="#CodeTypeParser-540"><span class="linenos">540</span></a><span class="k">class</span><span class="w"> </span><span class="nc">CodeTypeParser</span><span class="p">:</span>
-</span><span id="CodeTypeParser-541"><a href="#CodeTypeParser-541"><span class="linenos">541</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;A class used in InvalidCodesException to report an error if a code parser check fails&quot;&quot;&quot;</span>
-</span><span id="CodeTypeParser-542"><a href="#CodeTypeParser-542"><span class="linenos">542</span></a>
-</span><span id="CodeTypeParser-543"><a href="#CodeTypeParser-543"><span class="linenos">543</span></a>    <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">trud_processed_dir</span><span class="p">:</span> <span class="n">Path</span> <span class="o">=</span> <span class="n">trud</span><span class="o">.</span><span class="n">PROCESSED_PATH</span><span class="p">):</span>
-</span><span id="CodeTypeParser-544"><a href="#CodeTypeParser-544"><span class="linenos">544</span></a>        <span class="k">if</span> <span class="ow">not</span> <span class="n">trud_processed_dir</span><span class="o">.</span><span class="n">exists</span><span class="p">()</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">trud_processed_dir</span><span class="o">.</span><span class="n">is_dir</span><span class="p">():</span>
-</span><span id="CodeTypeParser-545"><a href="#CodeTypeParser-545"><span class="linenos">545</span></a>            <span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span>
-</span><span id="CodeTypeParser-546"><a href="#CodeTypeParser-546"><span class="linenos">546</span></a>                <span class="sa">f</span><span class="s2">&quot;Cannot initialise parsers as the TRUD processed directory </span><span class="si">{</span><span class="n">trud_processed_dir</span><span class="si">}</span><span class="s2"> does not exist, please check that TRUD has been installed: acmc trud install&quot;</span>
-</span><span id="CodeTypeParser-547"><a href="#CodeTypeParser-547"><span class="linenos">547</span></a>            <span class="p">)</span>
+            <div class="pdoc-code codehilite"><pre><span></span><span id="CodeTypeParser-546"><a href="#CodeTypeParser-546"><span class="linenos">546</span></a><span class="k">class</span><span class="w"> </span><span class="nc">CodeTypeParser</span><span class="p">:</span>
+</span><span id="CodeTypeParser-547"><a href="#CodeTypeParser-547"><span class="linenos">547</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;A class used in InvalidCodesException to report an error if a code parser check fails&quot;&quot;&quot;</span>
 </span><span id="CodeTypeParser-548"><a href="#CodeTypeParser-548"><span class="linenos">548</span></a>
-</span><span id="CodeTypeParser-549"><a href="#CodeTypeParser-549"><span class="linenos">549</span></a>        <span class="bp">self</span><span class="o">.</span><span class="n">code_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="CodeTypeParser-550"><a href="#CodeTypeParser-550"><span class="linenos">550</span></a>            <span class="s2">&quot;read2&quot;</span><span class="p">:</span> <span class="n">Read2</span><span class="p">(),</span>
-</span><span id="CodeTypeParser-551"><a href="#CodeTypeParser-551"><span class="linenos">551</span></a>            <span class="s2">&quot;read3&quot;</span><span class="p">:</span> <span class="n">Read3</span><span class="p">(),</span>
-</span><span id="CodeTypeParser-552"><a href="#CodeTypeParser-552"><span class="linenos">552</span></a>            <span class="s2">&quot;icd10&quot;</span><span class="p">:</span> <span class="n">Icd10</span><span class="p">(),</span>
-</span><span id="CodeTypeParser-553"><a href="#CodeTypeParser-553"><span class="linenos">553</span></a>            <span class="s2">&quot;snomed&quot;</span><span class="p">:</span> <span class="n">Snomed</span><span class="p">(),</span>
-</span><span id="CodeTypeParser-554"><a href="#CodeTypeParser-554"><span class="linenos">554</span></a>            <span class="s2">&quot;opcs4&quot;</span><span class="p">:</span> <span class="n">Opcs4</span><span class="p">(),</span>
-</span><span id="CodeTypeParser-555"><a href="#CodeTypeParser-555"><span class="linenos">555</span></a>            <span class="s2">&quot;atc&quot;</span><span class="p">:</span> <span class="n">Atc</span><span class="p">(),</span>
-</span><span id="CodeTypeParser-556"><a href="#CodeTypeParser-556"><span class="linenos">556</span></a>            <span class="s2">&quot;med&quot;</span><span class="p">:</span> <span class="n">Med</span><span class="p">(),</span>
-</span><span id="CodeTypeParser-557"><a href="#CodeTypeParser-557"><span class="linenos">557</span></a>            <span class="s2">&quot;cprd&quot;</span><span class="p">:</span> <span class="n">Cprd</span><span class="p">(),</span>
-</span><span id="CodeTypeParser-558"><a href="#CodeTypeParser-558"><span class="linenos">558</span></a>        <span class="p">}</span>
+</span><span id="CodeTypeParser-549"><a href="#CodeTypeParser-549"><span class="linenos">549</span></a>    <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">trud_processed_dir</span><span class="p">:</span> <span class="n">Path</span> <span class="o">=</span> <span class="n">trud</span><span class="o">.</span><span class="n">PROCESSED_PATH</span><span class="p">):</span>
+</span><span id="CodeTypeParser-550"><a href="#CodeTypeParser-550"><span class="linenos">550</span></a>        <span class="k">if</span> <span class="ow">not</span> <span class="n">trud_processed_dir</span><span class="o">.</span><span class="n">exists</span><span class="p">()</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">trud_processed_dir</span><span class="o">.</span><span class="n">is_dir</span><span class="p">():</span>
+</span><span id="CodeTypeParser-551"><a href="#CodeTypeParser-551"><span class="linenos">551</span></a>            <span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span>
+</span><span id="CodeTypeParser-552"><a href="#CodeTypeParser-552"><span class="linenos">552</span></a>                <span class="sa">f</span><span class="s2">&quot;Cannot initialise parsers as the TRUD processed directory </span><span class="si">{</span><span class="n">trud_processed_dir</span><span class="si">}</span><span class="s2"> does not exist, please check that TRUD has been installed: acmc trud install&quot;</span>
+</span><span id="CodeTypeParser-553"><a href="#CodeTypeParser-553"><span class="linenos">553</span></a>            <span class="p">)</span>
+</span><span id="CodeTypeParser-554"><a href="#CodeTypeParser-554"><span class="linenos">554</span></a>
+</span><span id="CodeTypeParser-555"><a href="#CodeTypeParser-555"><span class="linenos">555</span></a>        <span class="bp">self</span><span class="o">.</span><span class="n">code_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="CodeTypeParser-556"><a href="#CodeTypeParser-556"><span class="linenos">556</span></a>            <span class="s2">&quot;read2&quot;</span><span class="p">:</span> <span class="n">Read2</span><span class="p">(),</span>
+</span><span id="CodeTypeParser-557"><a href="#CodeTypeParser-557"><span class="linenos">557</span></a>            <span class="s2">&quot;read3&quot;</span><span class="p">:</span> <span class="n">Read3</span><span class="p">(),</span>
+</span><span id="CodeTypeParser-558"><a href="#CodeTypeParser-558"><span class="linenos">558</span></a>            <span class="s2">&quot;icd10&quot;</span><span class="p">:</span> <span class="n">Icd10</span><span class="p">(),</span>
+</span><span id="CodeTypeParser-559"><a href="#CodeTypeParser-559"><span class="linenos">559</span></a>            <span class="s2">&quot;snomed&quot;</span><span class="p">:</span> <span class="n">Snomed</span><span class="p">(),</span>
+</span><span id="CodeTypeParser-560"><a href="#CodeTypeParser-560"><span class="linenos">560</span></a>            <span class="s2">&quot;opcs4&quot;</span><span class="p">:</span> <span class="n">Opcs4</span><span class="p">(),</span>
+</span><span id="CodeTypeParser-561"><a href="#CodeTypeParser-561"><span class="linenos">561</span></a>            <span class="s2">&quot;atc&quot;</span><span class="p">:</span> <span class="n">Atc</span><span class="p">(),</span>
+</span><span id="CodeTypeParser-562"><a href="#CodeTypeParser-562"><span class="linenos">562</span></a>            <span class="s2">&quot;med&quot;</span><span class="p">:</span> <span class="n">Med</span><span class="p">(),</span>
+</span><span id="CodeTypeParser-563"><a href="#CodeTypeParser-563"><span class="linenos">563</span></a>            <span class="s2">&quot;cprd&quot;</span><span class="p">:</span> <span class="n">Cprd</span><span class="p">(),</span>
+</span><span id="CodeTypeParser-564"><a href="#CodeTypeParser-564"><span class="linenos">564</span></a>        <span class="p">}</span>
 </span></pre></div>
 
 
@@ -1986,22 +1983,22 @@
 
     </div>
     <a class="headerlink" href="#CodeTypeParser.__init__"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="CodeTypeParser.__init__-543"><a href="#CodeTypeParser.__init__-543"><span class="linenos">543</span></a>    <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">trud_processed_dir</span><span class="p">:</span> <span class="n">Path</span> <span class="o">=</span> <span class="n">trud</span><span class="o">.</span><span class="n">PROCESSED_PATH</span><span class="p">):</span>
-</span><span id="CodeTypeParser.__init__-544"><a href="#CodeTypeParser.__init__-544"><span class="linenos">544</span></a>        <span class="k">if</span> <span class="ow">not</span> <span class="n">trud_processed_dir</span><span class="o">.</span><span class="n">exists</span><span class="p">()</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">trud_processed_dir</span><span class="o">.</span><span class="n">is_dir</span><span class="p">():</span>
-</span><span id="CodeTypeParser.__init__-545"><a href="#CodeTypeParser.__init__-545"><span class="linenos">545</span></a>            <span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span>
-</span><span id="CodeTypeParser.__init__-546"><a href="#CodeTypeParser.__init__-546"><span class="linenos">546</span></a>                <span class="sa">f</span><span class="s2">&quot;Cannot initialise parsers as the TRUD processed directory </span><span class="si">{</span><span class="n">trud_processed_dir</span><span class="si">}</span><span class="s2"> does not exist, please check that TRUD has been installed: acmc trud install&quot;</span>
-</span><span id="CodeTypeParser.__init__-547"><a href="#CodeTypeParser.__init__-547"><span class="linenos">547</span></a>            <span class="p">)</span>
-</span><span id="CodeTypeParser.__init__-548"><a href="#CodeTypeParser.__init__-548"><span class="linenos">548</span></a>
-</span><span id="CodeTypeParser.__init__-549"><a href="#CodeTypeParser.__init__-549"><span class="linenos">549</span></a>        <span class="bp">self</span><span class="o">.</span><span class="n">code_types</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="CodeTypeParser.__init__-550"><a href="#CodeTypeParser.__init__-550"><span class="linenos">550</span></a>            <span class="s2">&quot;read2&quot;</span><span class="p">:</span> <span class="n">Read2</span><span class="p">(),</span>
-</span><span id="CodeTypeParser.__init__-551"><a href="#CodeTypeParser.__init__-551"><span class="linenos">551</span></a>            <span class="s2">&quot;read3&quot;</span><span class="p">:</span> <span class="n">Read3</span><span class="p">(),</span>
-</span><span id="CodeTypeParser.__init__-552"><a href="#CodeTypeParser.__init__-552"><span class="linenos">552</span></a>            <span class="s2">&quot;icd10&quot;</span><span class="p">:</span> <span class="n">Icd10</span><span class="p">(),</span>
-</span><span id="CodeTypeParser.__init__-553"><a href="#CodeTypeParser.__init__-553"><span class="linenos">553</span></a>            <span class="s2">&quot;snomed&quot;</span><span class="p">:</span> <span class="n">Snomed</span><span class="p">(),</span>
-</span><span id="CodeTypeParser.__init__-554"><a href="#CodeTypeParser.__init__-554"><span class="linenos">554</span></a>            <span class="s2">&quot;opcs4&quot;</span><span class="p">:</span> <span class="n">Opcs4</span><span class="p">(),</span>
-</span><span id="CodeTypeParser.__init__-555"><a href="#CodeTypeParser.__init__-555"><span class="linenos">555</span></a>            <span class="s2">&quot;atc&quot;</span><span class="p">:</span> <span class="n">Atc</span><span class="p">(),</span>
-</span><span id="CodeTypeParser.__init__-556"><a href="#CodeTypeParser.__init__-556"><span class="linenos">556</span></a>            <span class="s2">&quot;med&quot;</span><span class="p">:</span> <span class="n">Med</span><span class="p">(),</span>
-</span><span id="CodeTypeParser.__init__-557"><a href="#CodeTypeParser.__init__-557"><span class="linenos">557</span></a>            <span class="s2">&quot;cprd&quot;</span><span class="p">:</span> <span class="n">Cprd</span><span class="p">(),</span>
-</span><span id="CodeTypeParser.__init__-558"><a href="#CodeTypeParser.__init__-558"><span class="linenos">558</span></a>        <span class="p">}</span>
+            <div class="pdoc-code codehilite"><pre><span></span><span id="CodeTypeParser.__init__-549"><a href="#CodeTypeParser.__init__-549"><span class="linenos">549</span></a>    <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">trud_processed_dir</span><span class="p">:</span> <span class="n">Path</span> <span class="o">=</span> <span class="n">trud</span><span class="o">.</span><span class="n">PROCESSED_PATH</span><span class="p">):</span>
+</span><span id="CodeTypeParser.__init__-550"><a href="#CodeTypeParser.__init__-550"><span class="linenos">550</span></a>        <span class="k">if</span> <span class="ow">not</span> <span class="n">trud_processed_dir</span><span class="o">.</span><span class="n">exists</span><span class="p">()</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">trud_processed_dir</span><span class="o">.</span><span class="n">is_dir</span><span class="p">():</span>
+</span><span id="CodeTypeParser.__init__-551"><a href="#CodeTypeParser.__init__-551"><span class="linenos">551</span></a>            <span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span>
+</span><span id="CodeTypeParser.__init__-552"><a href="#CodeTypeParser.__init__-552"><span class="linenos">552</span></a>                <span class="sa">f</span><span class="s2">&quot;Cannot initialise parsers as the TRUD processed directory </span><span class="si">{</span><span class="n">trud_processed_dir</span><span class="si">}</span><span class="s2"> does not exist, please check that TRUD has been installed: acmc trud install&quot;</span>
+</span><span id="CodeTypeParser.__init__-553"><a href="#CodeTypeParser.__init__-553"><span class="linenos">553</span></a>            <span class="p">)</span>
+</span><span id="CodeTypeParser.__init__-554"><a href="#CodeTypeParser.__init__-554"><span class="linenos">554</span></a>
+</span><span id="CodeTypeParser.__init__-555"><a href="#CodeTypeParser.__init__-555"><span class="linenos">555</span></a>        <span class="bp">self</span><span class="o">.</span><span class="n">code_types</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="CodeTypeParser.__init__-556"><a href="#CodeTypeParser.__init__-556"><span class="linenos">556</span></a>            <span class="s2">&quot;read2&quot;</span><span class="p">:</span> <span class="n">Read2</span><span class="p">(),</span>
+</span><span id="CodeTypeParser.__init__-557"><a href="#CodeTypeParser.__init__-557"><span class="linenos">557</span></a>            <span class="s2">&quot;read3&quot;</span><span class="p">:</span> <span class="n">Read3</span><span class="p">(),</span>
+</span><span id="CodeTypeParser.__init__-558"><a href="#CodeTypeParser.__init__-558"><span class="linenos">558</span></a>            <span class="s2">&quot;icd10&quot;</span><span class="p">:</span> <span class="n">Icd10</span><span class="p">(),</span>
+</span><span id="CodeTypeParser.__init__-559"><a href="#CodeTypeParser.__init__-559"><span class="linenos">559</span></a>            <span class="s2">&quot;snomed&quot;</span><span class="p">:</span> <span class="n">Snomed</span><span class="p">(),</span>
+</span><span id="CodeTypeParser.__init__-560"><a href="#CodeTypeParser.__init__-560"><span class="linenos">560</span></a>            <span class="s2">&quot;opcs4&quot;</span><span class="p">:</span> <span class="n">Opcs4</span><span class="p">(),</span>
+</span><span id="CodeTypeParser.__init__-561"><a href="#CodeTypeParser.__init__-561"><span class="linenos">561</span></a>            <span class="s2">&quot;atc&quot;</span><span class="p">:</span> <span class="n">Atc</span><span class="p">(),</span>
+</span><span id="CodeTypeParser.__init__-562"><a href="#CodeTypeParser.__init__-562"><span class="linenos">562</span></a>            <span class="s2">&quot;med&quot;</span><span class="p">:</span> <span class="n">Med</span><span class="p">(),</span>
+</span><span id="CodeTypeParser.__init__-563"><a href="#CodeTypeParser.__init__-563"><span class="linenos">563</span></a>            <span class="s2">&quot;cprd&quot;</span><span class="p">:</span> <span class="n">Cprd</span><span class="p">(),</span>
+</span><span id="CodeTypeParser.__init__-564"><a href="#CodeTypeParser.__init__-564"><span class="linenos">564</span></a>        <span class="p">}</span>
 </span></pre></div>
 
 
diff --git a/docs/api/acmc/phen.html b/docs/api/acmc/phen.html
index 85d58941eba1e31627669c6adf2f7ea36413063d..87c83ba1dc5bce550b4bbbbd6f238dcb5ddb489d 100644
--- a/docs/api/acmc/phen.html
+++ b/docs/api/acmc/phen.html
@@ -26,18 +26,10 @@
             <input type="search" placeholder="Search..." role="searchbox" aria-label="search"
                    pattern=".+" required>
 
-            <h2>Contents</h2>
-            <ul>
-  <li><a href="#phenotype-module">Phenotype Module</a></li>
-</ul>
-
 
 
             <h2>API Documentation</h2>
                 <ul class="memberlist">
-            <li>
-                    <a class="variable" href="#logger">logger</a>
-            </li>
             <li>
                     <a class="variable" href="#PHEN_DIR">PHEN_DIR</a>
             </li>
@@ -92,12 +84,6 @@
             <li>
                     <a class="variable" href="#CODE_FILE_TYPES">CODE_FILE_TYPES</a>
             </li>
-            <li>
-                    <a class="variable" href="#SOURCE_COL_SUFFIX">SOURCE_COL_SUFFIX</a>
-            </li>
-            <li>
-                    <a class="variable" href="#TARGET_COL_SUFFIX">TARGET_COL_SUFFIX</a>
-            </li>
             <li>
                     <a class="variable" href="#CONFIG_SCHEMA">CONFIG_SCHEMA</a>
             </li>
@@ -114,56 +100,23 @@
 
             </li>
             <li>
-                    <a class="function" href="#construct_git_url">construct_git_url</a>
-            </li>
-            <li>
-                    <a class="function" href="#create_empty_git_dir">create_empty_git_dir</a>
-            </li>
-            <li>
-                    <a class="function" href="#check_delete_dir">check_delete_dir</a>
+                    <a class="function" href="#init">init</a>
             </li>
             <li>
                     <a class="function" href="#fork">fork</a>
             </li>
-            <li>
-                    <a class="function" href="#init">init</a>
-            </li>
             <li>
                     <a class="function" href="#validate">validate</a>
             </li>
-            <li>
-                    <a class="function" href="#read_table_file">read_table_file</a>
-            </li>
-            <li>
-                    <a class="function" href="#process_actions">process_actions</a>
-            </li>
-            <li>
-                    <a class="function" href="#preprocess_source_concepts">preprocess_source_concepts</a>
-            </li>
-            <li>
-                    <a class="function" href="#get_code_type_from_col_name">get_code_type_from_col_name</a>
-            </li>
             <li>
                     <a class="function" href="#translate_codes">translate_codes</a>
             </li>
-            <li>
-                    <a class="function" href="#sql_row_exist">sql_row_exist</a>
-            </li>
-            <li>
-                    <a class="function" href="#write_code_errors">write_code_errors</a>
-            </li>
             <li>
                     <a class="function" href="#write_vocab_version">write_vocab_version</a>
             </li>
             <li>
                     <a class="function" href="#map">map</a>
             </li>
-            <li>
-                    <a class="function" href="#map_target_code_type">map_target_code_type</a>
-            </li>
-            <li>
-                    <a class="function" href="#generate_version_tag">generate_version_tag</a>
-            </li>
             <li>
                     <a class="function" href="#publish">publish</a>
             </li>
@@ -176,9 +129,6 @@
             <li>
                     <a class="function" href="#extract_concepts">extract_concepts</a>
             </li>
-            <li>
-                    <a class="function" href="#extract_clean_deepdiff_keys">extract_clean_deepdiff_keys</a>
-            </li>
             <li>
                     <a class="function" href="#diff_config">diff_config</a>
             </li>
@@ -207,7 +157,7 @@
                     <h1 class="modulename">
 <a href="./../acmc.html">acmc</a><wbr>.phen    </h1>
 
-                        <div class="docstring"><h1 id="phenotype-module">Phenotype Module</h1>
+                        <div class="docstring"><p>phenotype.py module</p>
 
 <p>This module provides functionality for managing phenotypes.</p>
 </div>
@@ -217,8 +167,8 @@
                         <label class="view-source-button" for="mod-phen-view-source"><span>View Source</span></label>
 
                         <div class="pdoc-code codehilite"><pre><span></span><span id="L-1"><a href="#L-1"><span class="linenos">   1</span></a><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-2"><a href="#L-2"><span class="linenos">   2</span></a><span class="sd">Phenotype Module</span>
-</span><span id="L-3"><a href="#L-3"><span class="linenos">   3</span></a><span class="sd">================</span>
+</span><span id="L-2"><a href="#L-2"><span class="linenos">   2</span></a><span class="sd">phenotype.py module</span>
+</span><span id="L-3"><a href="#L-3"><span class="linenos">   3</span></a>
 </span><span id="L-4"><a href="#L-4"><span class="linenos">   4</span></a><span class="sd">This module provides functionality for managing phenotypes.</span>
 </span><span id="L-5"><a href="#L-5"><span class="linenos">   5</span></a><span class="sd">&quot;&quot;&quot;</span>
 </span><span id="L-6"><a href="#L-6"><span class="linenos">   6</span></a>
@@ -243,1426 +193,1426 @@
 </span><span id="L-25"><a href="#L-25"><span class="linenos">  25</span></a><span class="kn">from</span><span class="w"> </span><span class="nn">pathlib</span><span class="w"> </span><span class="kn">import</span> <span class="n">Path</span>
 </span><span id="L-26"><a href="#L-26"><span class="linenos">  26</span></a><span class="kn">from</span><span class="w"> </span><span class="nn">urllib.parse</span><span class="w"> </span><span class="kn">import</span> <span class="n">urlparse</span><span class="p">,</span> <span class="n">urlunparse</span>
 </span><span id="L-27"><a href="#L-27"><span class="linenos">  27</span></a><span class="kn">from</span><span class="w"> </span><span class="nn">typing</span><span class="w"> </span><span class="kn">import</span> <span class="n">Tuple</span><span class="p">,</span> <span class="n">Set</span><span class="p">,</span> <span class="n">Any</span>
-</span><span id="L-28"><a href="#L-28"><span class="linenos">  28</span></a>
-</span><span id="L-29"><a href="#L-29"><span class="linenos">  29</span></a><span class="kn">import</span><span class="w"> </span><span class="nn">acmc</span>
-</span><span id="L-30"><a href="#L-30"><span class="linenos">  30</span></a><span class="kn">from</span><span class="w"> </span><span class="nn">acmc</span><span class="w"> </span><span class="kn">import</span> <span class="n">trud</span><span class="p">,</span> <span class="n">omop</span><span class="p">,</span> <span class="n">parse</span><span class="p">,</span> <span class="n">util</span>
-</span><span id="L-31"><a href="#L-31"><span class="linenos">  31</span></a>
-</span><span id="L-32"><a href="#L-32"><span class="linenos">  32</span></a><span class="c1"># setup logging</span>
-</span><span id="L-33"><a href="#L-33"><span class="linenos">  33</span></a><span class="kn">import</span><span class="w"> </span><span class="nn">acmc.logging_config</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">lc</span>
-</span><span id="L-34"><a href="#L-34"><span class="linenos">  34</span></a>
-</span><span id="L-35"><a href="#L-35"><span class="linenos">  35</span></a><span class="n">logger</span> <span class="o">=</span> <span class="n">lc</span><span class="o">.</span><span class="n">setup_logger</span><span class="p">()</span>
-</span><span id="L-36"><a href="#L-36"><span class="linenos">  36</span></a>
-</span><span id="L-37"><a href="#L-37"><span class="linenos">  37</span></a><span class="n">pd</span><span class="o">.</span><span class="n">set_option</span><span class="p">(</span><span class="s2">&quot;mode.chained_assignment&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
+</span><span id="L-28"><a href="#L-28"><span class="linenos">  28</span></a><span class="kn">import</span><span class="w"> </span><span class="nn">acmc</span>
+</span><span id="L-29"><a href="#L-29"><span class="linenos">  29</span></a><span class="kn">from</span><span class="w"> </span><span class="nn">acmc</span><span class="w"> </span><span class="kn">import</span> <span class="n">trud</span><span class="p">,</span> <span class="n">omop</span><span class="p">,</span> <span class="n">parse</span><span class="p">,</span> <span class="n">util</span><span class="p">,</span> <span class="n">logging_config</span> <span class="k">as</span> <span class="n">lc</span>
+</span><span id="L-30"><a href="#L-30"><span class="linenos">  30</span></a>
+</span><span id="L-31"><a href="#L-31"><span class="linenos">  31</span></a><span class="c1"># set up logging</span>
+</span><span id="L-32"><a href="#L-32"><span class="linenos">  32</span></a><span class="n">_logger</span> <span class="o">=</span> <span class="n">lc</span><span class="o">.</span><span class="n">setup_logger</span><span class="p">()</span>
+</span><span id="L-33"><a href="#L-33"><span class="linenos">  33</span></a>
+</span><span id="L-34"><a href="#L-34"><span class="linenos">  34</span></a><span class="n">pd</span><span class="o">.</span><span class="n">set_option</span><span class="p">(</span><span class="s2">&quot;mode.chained_assignment&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
+</span><span id="L-35"><a href="#L-35"><span class="linenos">  35</span></a>
+</span><span id="L-36"><a href="#L-36"><span class="linenos">  36</span></a><span class="n">PHEN_DIR</span> <span class="o">=</span> <span class="s2">&quot;phen&quot;</span>
+</span><span id="L-37"><a href="#L-37"><span class="linenos">  37</span></a><span class="sd">&quot;&quot;&quot;Default phenotype directory name&quot;&quot;&quot;</span>
 </span><span id="L-38"><a href="#L-38"><span class="linenos">  38</span></a>
-</span><span id="L-39"><a href="#L-39"><span class="linenos">  39</span></a><span class="n">PHEN_DIR</span> <span class="o">=</span> <span class="s2">&quot;phen&quot;</span>
-</span><span id="L-40"><a href="#L-40"><span class="linenos">  40</span></a><span class="n">DEFAULT_PHEN_PATH</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="s2">&quot;./workspace&quot;</span><span class="p">)</span> <span class="o">/</span> <span class="n">PHEN_DIR</span>
+</span><span id="L-39"><a href="#L-39"><span class="linenos">  39</span></a><span class="n">DEFAULT_PHEN_PATH</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="s2">&quot;./workspace&quot;</span><span class="p">)</span> <span class="o">/</span> <span class="n">PHEN_DIR</span>
+</span><span id="L-40"><a href="#L-40"><span class="linenos">  40</span></a><span class="sd">&quot;&quot;&quot;Default phenotype directory path&quot;&quot;&quot;</span>
 </span><span id="L-41"><a href="#L-41"><span class="linenos">  41</span></a>
 </span><span id="L-42"><a href="#L-42"><span class="linenos">  42</span></a><span class="n">CONCEPTS_DIR</span> <span class="o">=</span> <span class="s2">&quot;concepts&quot;</span>
-</span><span id="L-43"><a href="#L-43"><span class="linenos">  43</span></a><span class="n">MAP_DIR</span> <span class="o">=</span> <span class="s2">&quot;map&quot;</span>
-</span><span id="L-44"><a href="#L-44"><span class="linenos">  44</span></a><span class="n">CONCEPT_SET_DIR</span> <span class="o">=</span> <span class="s2">&quot;concept-sets&quot;</span>
-</span><span id="L-45"><a href="#L-45"><span class="linenos">  45</span></a><span class="n">CSV_PATH</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="n">CONCEPT_SET_DIR</span><span class="p">)</span> <span class="o">/</span> <span class="s2">&quot;csv&quot;</span>
-</span><span id="L-46"><a href="#L-46"><span class="linenos">  46</span></a><span class="n">OMOP_PATH</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="n">CONCEPT_SET_DIR</span><span class="p">)</span> <span class="o">/</span> <span class="s2">&quot;omop&quot;</span>
-</span><span id="L-47"><a href="#L-47"><span class="linenos">  47</span></a><span class="n">DEFAULT_PHEN_DIR_LIST</span> <span class="o">=</span> <span class="p">[</span><span class="n">CONCEPTS_DIR</span><span class="p">,</span> <span class="n">MAP_DIR</span><span class="p">,</span> <span class="n">CONCEPT_SET_DIR</span><span class="p">]</span>
-</span><span id="L-48"><a href="#L-48"><span class="linenos">  48</span></a><span class="n">CONFIG_FILE</span> <span class="o">=</span> <span class="s2">&quot;config.yml&quot;</span>
-</span><span id="L-49"><a href="#L-49"><span class="linenos">  49</span></a><span class="n">VOCAB_VERSION_FILE</span> <span class="o">=</span> <span class="s2">&quot;vocab_version.yml&quot;</span>
-</span><span id="L-50"><a href="#L-50"><span class="linenos">  50</span></a><span class="n">SEMANTIC_VERSION_TYPES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;major&quot;</span><span class="p">,</span> <span class="s2">&quot;minor&quot;</span><span class="p">,</span> <span class="s2">&quot;patch&quot;</span><span class="p">]</span>
-</span><span id="L-51"><a href="#L-51"><span class="linenos">  51</span></a><span class="n">DEFAULT_VERSION_INC</span> <span class="o">=</span> <span class="s2">&quot;patch&quot;</span>
-</span><span id="L-52"><a href="#L-52"><span class="linenos">  52</span></a>
-</span><span id="L-53"><a href="#L-53"><span class="linenos">  53</span></a><span class="n">DEFAULT_GIT_BRANCH</span> <span class="o">=</span> <span class="s2">&quot;main&quot;</span>
-</span><span id="L-54"><a href="#L-54"><span class="linenos">  54</span></a>
-</span><span id="L-55"><a href="#L-55"><span class="linenos">  55</span></a><span class="n">SPLIT_COL_ACTION</span> <span class="o">=</span> <span class="s2">&quot;split_col&quot;</span>
-</span><span id="L-56"><a href="#L-56"><span class="linenos">  56</span></a><span class="n">CODES_COL_ACTION</span> <span class="o">=</span> <span class="s2">&quot;codes_col&quot;</span>
-</span><span id="L-57"><a href="#L-57"><span class="linenos">  57</span></a><span class="n">DIVIDE_COL_ACTION</span> <span class="o">=</span> <span class="s2">&quot;divide_col&quot;</span>
-</span><span id="L-58"><a href="#L-58"><span class="linenos">  58</span></a><span class="n">COL_ACTIONS</span> <span class="o">=</span> <span class="p">[</span><span class="n">SPLIT_COL_ACTION</span><span class="p">,</span> <span class="n">CODES_COL_ACTION</span><span class="p">,</span> <span class="n">DIVIDE_COL_ACTION</span><span class="p">]</span>
+</span><span id="L-43"><a href="#L-43"><span class="linenos">  43</span></a><span class="sd">&quot;&quot;&quot;Default concepts directory name&quot;&quot;&quot;</span>
+</span><span id="L-44"><a href="#L-44"><span class="linenos">  44</span></a>
+</span><span id="L-45"><a href="#L-45"><span class="linenos">  45</span></a><span class="n">MAP_DIR</span> <span class="o">=</span> <span class="s2">&quot;map&quot;</span>
+</span><span id="L-46"><a href="#L-46"><span class="linenos">  46</span></a><span class="sd">&quot;&quot;&quot;Default map directory name&quot;&quot;&quot;</span>
+</span><span id="L-47"><a href="#L-47"><span class="linenos">  47</span></a>
+</span><span id="L-48"><a href="#L-48"><span class="linenos">  48</span></a><span class="n">CONCEPT_SET_DIR</span> <span class="o">=</span> <span class="s2">&quot;concept-sets&quot;</span>
+</span><span id="L-49"><a href="#L-49"><span class="linenos">  49</span></a><span class="sd">&quot;&quot;&quot;Default concept set directory name&quot;&quot;&quot;</span>
+</span><span id="L-50"><a href="#L-50"><span class="linenos">  50</span></a>
+</span><span id="L-51"><a href="#L-51"><span class="linenos">  51</span></a><span class="n">CSV_PATH</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="n">CONCEPT_SET_DIR</span><span class="p">)</span> <span class="o">/</span> <span class="s2">&quot;csv&quot;</span>
+</span><span id="L-52"><a href="#L-52"><span class="linenos">  52</span></a><span class="sd">&quot;&quot;&quot;Default CSV concept set directory path&quot;&quot;&quot;</span>
+</span><span id="L-53"><a href="#L-53"><span class="linenos">  53</span></a>
+</span><span id="L-54"><a href="#L-54"><span class="linenos">  54</span></a><span class="n">OMOP_PATH</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="n">CONCEPT_SET_DIR</span><span class="p">)</span> <span class="o">/</span> <span class="s2">&quot;omop&quot;</span>
+</span><span id="L-55"><a href="#L-55"><span class="linenos">  55</span></a><span class="sd">&quot;&quot;&quot;Default OMOP concept set directory path&quot;&quot;&quot;</span>
+</span><span id="L-56"><a href="#L-56"><span class="linenos">  56</span></a>
+</span><span id="L-57"><a href="#L-57"><span class="linenos">  57</span></a><span class="n">DEFAULT_PHEN_DIR_LIST</span> <span class="o">=</span> <span class="p">[</span><span class="n">CONCEPTS_DIR</span><span class="p">,</span> <span class="n">MAP_DIR</span><span class="p">,</span> <span class="n">CONCEPT_SET_DIR</span><span class="p">]</span>
+</span><span id="L-58"><a href="#L-58"><span class="linenos">  58</span></a><span class="sd">&quot;&quot;&quot;List of default phenotype directories&quot;&quot;&quot;</span>
 </span><span id="L-59"><a href="#L-59"><span class="linenos">  59</span></a>
-</span><span id="L-60"><a href="#L-60"><span class="linenos">  60</span></a><span class="n">CODE_FILE_TYPES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;.xlsx&quot;</span><span class="p">,</span> <span class="s2">&quot;.xls&quot;</span><span class="p">,</span> <span class="s2">&quot;.csv&quot;</span><span class="p">]</span>
-</span><span id="L-61"><a href="#L-61"><span class="linenos">  61</span></a><span class="n">SOURCE_COL_SUFFIX</span> <span class="o">=</span> <span class="s2">&quot;_acmc_source&quot;</span>
-</span><span id="L-62"><a href="#L-62"><span class="linenos">  62</span></a><span class="n">TARGET_COL_SUFFIX</span> <span class="o">=</span> <span class="s2">&quot;_acmc_target&quot;</span>
-</span><span id="L-63"><a href="#L-63"><span class="linenos">  63</span></a>
-</span><span id="L-64"><a href="#L-64"><span class="linenos">  64</span></a><span class="c1"># config.yaml schema</span>
-</span><span id="L-65"><a href="#L-65"><span class="linenos">  65</span></a><span class="n">CONFIG_SCHEMA</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-66"><a href="#L-66"><span class="linenos">  66</span></a>    <span class="s2">&quot;phenotype&quot;</span><span class="p">:</span> <span class="p">{</span>
-</span><span id="L-67"><a href="#L-67"><span class="linenos">  67</span></a>        <span class="s2">&quot;type&quot;</span><span class="p">:</span> <span class="s2">&quot;dict&quot;</span><span class="p">,</span>
-</span><span id="L-68"><a href="#L-68"><span class="linenos">  68</span></a>        <span class="s2">&quot;required&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="L-69"><a href="#L-69"><span class="linenos">  69</span></a>        <span class="s2">&quot;schema&quot;</span><span class="p">:</span> <span class="p">{</span>
-</span><span id="L-70"><a href="#L-70"><span class="linenos">  70</span></a>            <span class="s2">&quot;version&quot;</span><span class="p">:</span> <span class="p">{</span>
-</span><span id="L-71"><a href="#L-71"><span class="linenos">  71</span></a>                <span class="s2">&quot;type&quot;</span><span class="p">:</span> <span class="s2">&quot;string&quot;</span><span class="p">,</span>
-</span><span id="L-72"><a href="#L-72"><span class="linenos">  72</span></a>                <span class="s2">&quot;required&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="L-73"><a href="#L-73"><span class="linenos">  73</span></a>                <span class="s2">&quot;regex&quot;</span><span class="p">:</span> <span class="sa">r</span><span class="s2">&quot;^\d+\.\d+\.\d+$&quot;</span><span class="p">,</span>  <span class="c1"># Enforces &#39;vN.N.N&#39; format</span>
-</span><span id="L-74"><a href="#L-74"><span class="linenos">  74</span></a>            <span class="p">},</span>
-</span><span id="L-75"><a href="#L-75"><span class="linenos">  75</span></a>            <span class="s2">&quot;omop&quot;</span><span class="p">:</span> <span class="p">{</span>
-</span><span id="L-76"><a href="#L-76"><span class="linenos">  76</span></a>                <span class="s2">&quot;type&quot;</span><span class="p">:</span> <span class="s2">&quot;dict&quot;</span><span class="p">,</span>
-</span><span id="L-77"><a href="#L-77"><span class="linenos">  77</span></a>                <span class="s2">&quot;required&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="L-78"><a href="#L-78"><span class="linenos">  78</span></a>                <span class="s2">&quot;schema&quot;</span><span class="p">:</span> <span class="p">{</span>
-</span><span id="L-79"><a href="#L-79"><span class="linenos">  79</span></a>                    <span class="s2">&quot;vocabulary_id&quot;</span><span class="p">:</span> <span class="p">{</span><span class="s2">&quot;type&quot;</span><span class="p">:</span> <span class="s2">&quot;string&quot;</span><span class="p">,</span> <span class="s2">&quot;required&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">},</span>
-</span><span id="L-80"><a href="#L-80"><span class="linenos">  80</span></a>                    <span class="s2">&quot;vocabulary_name&quot;</span><span class="p">:</span> <span class="p">{</span><span class="s2">&quot;type&quot;</span><span class="p">:</span> <span class="s2">&quot;string&quot;</span><span class="p">,</span> <span class="s2">&quot;required&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">},</span>
-</span><span id="L-81"><a href="#L-81"><span class="linenos">  81</span></a>                    <span class="s2">&quot;vocabulary_reference&quot;</span><span class="p">:</span> <span class="p">{</span>
-</span><span id="L-82"><a href="#L-82"><span class="linenos">  82</span></a>                        <span class="s2">&quot;type&quot;</span><span class="p">:</span> <span class="s2">&quot;string&quot;</span><span class="p">,</span>
-</span><span id="L-83"><a href="#L-83"><span class="linenos">  83</span></a>                        <span class="s2">&quot;required&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="L-84"><a href="#L-84"><span class="linenos">  84</span></a>                        <span class="s2">&quot;regex&quot;</span><span class="p">:</span> <span class="sa">r</span><span class="s2">&quot;^https?://.*&quot;</span><span class="p">,</span>  <span class="c1"># Ensures it&#39;s a URL</span>
-</span><span id="L-85"><a href="#L-85"><span class="linenos">  85</span></a>                    <span class="p">},</span>
-</span><span id="L-86"><a href="#L-86"><span class="linenos">  86</span></a>                <span class="p">},</span>
-</span><span id="L-87"><a href="#L-87"><span class="linenos">  87</span></a>            <span class="p">},</span>
-</span><span id="L-88"><a href="#L-88"><span class="linenos">  88</span></a>            <span class="s2">&quot;map&quot;</span><span class="p">:</span> <span class="p">{</span>
-</span><span id="L-89"><a href="#L-89"><span class="linenos">  89</span></a>                <span class="s2">&quot;type&quot;</span><span class="p">:</span> <span class="s2">&quot;list&quot;</span><span class="p">,</span>
-</span><span id="L-90"><a href="#L-90"><span class="linenos">  90</span></a>                <span class="s2">&quot;schema&quot;</span><span class="p">:</span> <span class="p">{</span>
-</span><span id="L-91"><a href="#L-91"><span class="linenos">  91</span></a>                    <span class="s2">&quot;type&quot;</span><span class="p">:</span> <span class="s2">&quot;string&quot;</span><span class="p">,</span>
-</span><span id="L-92"><a href="#L-92"><span class="linenos">  92</span></a>                    <span class="s2">&quot;allowed&quot;</span><span class="p">:</span> <span class="nb">list</span><span class="p">(</span>
-</span><span id="L-93"><a href="#L-93"><span class="linenos">  93</span></a>                        <span class="n">parse</span><span class="o">.</span><span class="n">SUPPORTED_CODE_TYPES</span>
-</span><span id="L-94"><a href="#L-94"><span class="linenos">  94</span></a>                    <span class="p">),</span>  <span class="c1"># Ensure only predefined values are allowed</span>
-</span><span id="L-95"><a href="#L-95"><span class="linenos">  95</span></a>                <span class="p">},</span>
-</span><span id="L-96"><a href="#L-96"><span class="linenos">  96</span></a>            <span class="p">},</span>
-</span><span id="L-97"><a href="#L-97"><span class="linenos">  97</span></a>            <span class="s2">&quot;concept_sets&quot;</span><span class="p">:</span> <span class="p">{</span>
-</span><span id="L-98"><a href="#L-98"><span class="linenos">  98</span></a>                <span class="s2">&quot;type&quot;</span><span class="p">:</span> <span class="s2">&quot;list&quot;</span><span class="p">,</span>
-</span><span id="L-99"><a href="#L-99"><span class="linenos">  99</span></a>                <span class="s2">&quot;required&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
-</span><span id="L-100"><a href="#L-100"><span class="linenos"> 100</span></a>                <span class="s2">&quot;schema&quot;</span><span class="p">:</span> <span class="p">{</span>
-</span><span id="L-101"><a href="#L-101"><span class="linenos"> 101</span></a>                    <span class="s2">&quot;type&quot;</span><span class="p">:</span> <span class="s2">&quot;dict&quot;</span><span class="p">,</span>
-</span><span id="L-102"><a href="#L-102"><span class="linenos"> 102</span></a>                    <span class="s2">&quot;schema&quot;</span><span class="p">:</span> <span class="p">{</span>
-</span><span id="L-103"><a href="#L-103"><span class="linenos"> 103</span></a>                        <span class="s2">&quot;name&quot;</span><span class="p">:</span> <span class="p">{</span><span class="s2">&quot;type&quot;</span><span class="p">:</span> <span class="s2">&quot;string&quot;</span><span class="p">,</span> <span class="s2">&quot;required&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">},</span>
-</span><span id="L-104"><a href="#L-104"><span class="linenos"> 104</span></a>                        <span class="s2">&quot;file&quot;</span><span class="p">:</span> <span class="p">{</span>
-</span><span id="L-105"><a href="#L-105"><span class="linenos"> 105</span></a>                            <span class="s2">&quot;type&quot;</span><span class="p">:</span> <span class="s2">&quot;dict&quot;</span><span class="p">,</span>
-</span><span id="L-106"><a href="#L-106"><span class="linenos"> 106</span></a>                            <span class="s2">&quot;required&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
-</span><span id="L-107"><a href="#L-107"><span class="linenos"> 107</span></a>                            <span class="s2">&quot;schema&quot;</span><span class="p">:</span> <span class="p">{</span>
-</span><span id="L-108"><a href="#L-108"><span class="linenos"> 108</span></a>                                <span class="s2">&quot;path&quot;</span><span class="p">:</span> <span class="p">{</span><span class="s2">&quot;type&quot;</span><span class="p">:</span> <span class="s2">&quot;string&quot;</span><span class="p">,</span> <span class="s2">&quot;required&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">},</span>
-</span><span id="L-109"><a href="#L-109"><span class="linenos"> 109</span></a>                                <span class="s2">&quot;columns&quot;</span><span class="p">:</span> <span class="p">{</span><span class="s2">&quot;type&quot;</span><span class="p">:</span> <span class="s2">&quot;dict&quot;</span><span class="p">,</span> <span class="s2">&quot;required&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">},</span>
-</span><span id="L-110"><a href="#L-110"><span class="linenos"> 110</span></a>                                <span class="s2">&quot;category&quot;</span><span class="p">:</span> <span class="p">{</span>
-</span><span id="L-111"><a href="#L-111"><span class="linenos"> 111</span></a>                                    <span class="s2">&quot;type&quot;</span><span class="p">:</span> <span class="s2">&quot;string&quot;</span>
-</span><span id="L-112"><a href="#L-112"><span class="linenos"> 112</span></a>                                <span class="p">},</span>  <span class="c1"># Optional but must be string if present</span>
-</span><span id="L-113"><a href="#L-113"><span class="linenos"> 113</span></a>                                <span class="s2">&quot;actions&quot;</span><span class="p">:</span> <span class="p">{</span>
-</span><span id="L-114"><a href="#L-114"><span class="linenos"> 114</span></a>                                    <span class="s2">&quot;type&quot;</span><span class="p">:</span> <span class="s2">&quot;dict&quot;</span><span class="p">,</span>
-</span><span id="L-115"><a href="#L-115"><span class="linenos"> 115</span></a>                                    <span class="s2">&quot;schema&quot;</span><span class="p">:</span> <span class="p">{</span><span class="s2">&quot;divide_col&quot;</span><span class="p">:</span> <span class="p">{</span><span class="s2">&quot;type&quot;</span><span class="p">:</span> <span class="s2">&quot;string&quot;</span><span class="p">}},</span>
-</span><span id="L-116"><a href="#L-116"><span class="linenos"> 116</span></a>                                <span class="p">},</span>
-</span><span id="L-117"><a href="#L-117"><span class="linenos"> 117</span></a>                            <span class="p">},</span>
-</span><span id="L-118"><a href="#L-118"><span class="linenos"> 118</span></a>                        <span class="p">},</span>
-</span><span id="L-119"><a href="#L-119"><span class="linenos"> 119</span></a>                        <span class="s2">&quot;metadata&quot;</span><span class="p">:</span> <span class="p">{</span><span class="s2">&quot;type&quot;</span><span class="p">:</span> <span class="s2">&quot;dict&quot;</span><span class="p">,</span> <span class="s2">&quot;required&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">},</span>
-</span><span id="L-120"><a href="#L-120"><span class="linenos"> 120</span></a>                    <span class="p">},</span>
+</span><span id="L-60"><a href="#L-60"><span class="linenos">  60</span></a><span class="n">CONFIG_FILE</span> <span class="o">=</span> <span class="s2">&quot;config.yml&quot;</span>
+</span><span id="L-61"><a href="#L-61"><span class="linenos">  61</span></a><span class="sd">&quot;&quot;&quot;Default configuration filename&quot;&quot;&quot;</span>
+</span><span id="L-62"><a href="#L-62"><span class="linenos">  62</span></a>
+</span><span id="L-63"><a href="#L-63"><span class="linenos">  63</span></a><span class="n">VOCAB_VERSION_FILE</span> <span class="o">=</span> <span class="s2">&quot;vocab_version.yml&quot;</span>
+</span><span id="L-64"><a href="#L-64"><span class="linenos">  64</span></a><span class="sd">&quot;&quot;&quot;Default vocabulary version filename&quot;&quot;&quot;</span>
+</span><span id="L-65"><a href="#L-65"><span class="linenos">  65</span></a>
+</span><span id="L-66"><a href="#L-66"><span class="linenos">  66</span></a><span class="n">SEMANTIC_VERSION_TYPES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;major&quot;</span><span class="p">,</span> <span class="s2">&quot;minor&quot;</span><span class="p">,</span> <span class="s2">&quot;patch&quot;</span><span class="p">]</span>
+</span><span id="L-67"><a href="#L-67"><span class="linenos">  67</span></a><span class="sd">&quot;&quot;&quot;List of semantic version increment types&quot;&quot;&quot;</span>
+</span><span id="L-68"><a href="#L-68"><span class="linenos">  68</span></a>
+</span><span id="L-69"><a href="#L-69"><span class="linenos">  69</span></a><span class="n">DEFAULT_VERSION_INC</span> <span class="o">=</span> <span class="s2">&quot;patch&quot;</span>
+</span><span id="L-70"><a href="#L-70"><span class="linenos">  70</span></a><span class="sd">&quot;&quot;&quot;Default semantic version increment type&quot;&quot;&quot;</span>
+</span><span id="L-71"><a href="#L-71"><span class="linenos">  71</span></a>
+</span><span id="L-72"><a href="#L-72"><span class="linenos">  72</span></a><span class="n">DEFAULT_GIT_BRANCH</span> <span class="o">=</span> <span class="s2">&quot;main&quot;</span>
+</span><span id="L-73"><a href="#L-73"><span class="linenos">  73</span></a><span class="sd">&quot;&quot;&quot;Default phenotype repo branch name&quot;&quot;&quot;</span>
+</span><span id="L-74"><a href="#L-74"><span class="linenos">  74</span></a>
+</span><span id="L-75"><a href="#L-75"><span class="linenos">  75</span></a><span class="n">SPLIT_COL_ACTION</span> <span class="o">=</span> <span class="s2">&quot;split_col&quot;</span>
+</span><span id="L-76"><a href="#L-76"><span class="linenos">  76</span></a><span class="sd">&quot;&quot;&quot;Split column preprocessing action type&quot;&quot;&quot;</span>
+</span><span id="L-77"><a href="#L-77"><span class="linenos">  77</span></a>
+</span><span id="L-78"><a href="#L-78"><span class="linenos">  78</span></a><span class="n">CODES_COL_ACTION</span> <span class="o">=</span> <span class="s2">&quot;codes_col&quot;</span>
+</span><span id="L-79"><a href="#L-79"><span class="linenos">  79</span></a><span class="sd">&quot;&quot;&quot;Codes column preprocessing action type&quot;&quot;&quot;</span>
+</span><span id="L-80"><a href="#L-80"><span class="linenos">  80</span></a>
+</span><span id="L-81"><a href="#L-81"><span class="linenos">  81</span></a><span class="n">DIVIDE_COL_ACTION</span> <span class="o">=</span> <span class="s2">&quot;divide_col&quot;</span>
+</span><span id="L-82"><a href="#L-82"><span class="linenos">  82</span></a><span class="sd">&quot;&quot;&quot;Divide column preprocessing action type&quot;&quot;&quot;</span>
+</span><span id="L-83"><a href="#L-83"><span class="linenos">  83</span></a>
+</span><span id="L-84"><a href="#L-84"><span class="linenos">  84</span></a><span class="n">COL_ACTIONS</span> <span class="o">=</span> <span class="p">[</span><span class="n">SPLIT_COL_ACTION</span><span class="p">,</span> <span class="n">CODES_COL_ACTION</span><span class="p">,</span> <span class="n">DIVIDE_COL_ACTION</span><span class="p">]</span>
+</span><span id="L-85"><a href="#L-85"><span class="linenos">  85</span></a><span class="sd">&quot;&quot;&quot;List of column preprocessing action types&quot;&quot;&quot;</span>
+</span><span id="L-86"><a href="#L-86"><span class="linenos">  86</span></a>
+</span><span id="L-87"><a href="#L-87"><span class="linenos">  87</span></a><span class="n">CODE_FILE_TYPES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;.xlsx&quot;</span><span class="p">,</span> <span class="s2">&quot;.xls&quot;</span><span class="p">,</span> <span class="s2">&quot;.csv&quot;</span><span class="p">]</span>
+</span><span id="L-88"><a href="#L-88"><span class="linenos">  88</span></a><span class="sd">&quot;&quot;&quot;List of supported source concept coding list file types&quot;&quot;&quot;</span>
+</span><span id="L-89"><a href="#L-89"><span class="linenos">  89</span></a>
+</span><span id="L-90"><a href="#L-90"><span class="linenos">  90</span></a><span class="c1"># config.yaml schema</span>
+</span><span id="L-91"><a href="#L-91"><span class="linenos">  91</span></a><span class="n">CONFIG_SCHEMA</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-92"><a href="#L-92"><span class="linenos">  92</span></a>    <span class="s2">&quot;phenotype&quot;</span><span class="p">:</span> <span class="p">{</span>
+</span><span id="L-93"><a href="#L-93"><span class="linenos">  93</span></a>        <span class="s2">&quot;type&quot;</span><span class="p">:</span> <span class="s2">&quot;dict&quot;</span><span class="p">,</span>
+</span><span id="L-94"><a href="#L-94"><span class="linenos">  94</span></a>        <span class="s2">&quot;required&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="L-95"><a href="#L-95"><span class="linenos">  95</span></a>        <span class="s2">&quot;schema&quot;</span><span class="p">:</span> <span class="p">{</span>
+</span><span id="L-96"><a href="#L-96"><span class="linenos">  96</span></a>            <span class="s2">&quot;version&quot;</span><span class="p">:</span> <span class="p">{</span>
+</span><span id="L-97"><a href="#L-97"><span class="linenos">  97</span></a>                <span class="s2">&quot;type&quot;</span><span class="p">:</span> <span class="s2">&quot;string&quot;</span><span class="p">,</span>
+</span><span id="L-98"><a href="#L-98"><span class="linenos">  98</span></a>                <span class="s2">&quot;required&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="L-99"><a href="#L-99"><span class="linenos">  99</span></a>                <span class="s2">&quot;regex&quot;</span><span class="p">:</span> <span class="sa">r</span><span class="s2">&quot;^\d+\.\d+\.\d+$&quot;</span><span class="p">,</span>  <span class="c1"># Enforces &#39;vN.N.N&#39; format</span>
+</span><span id="L-100"><a href="#L-100"><span class="linenos"> 100</span></a>            <span class="p">},</span>
+</span><span id="L-101"><a href="#L-101"><span class="linenos"> 101</span></a>            <span class="s2">&quot;omop&quot;</span><span class="p">:</span> <span class="p">{</span>
+</span><span id="L-102"><a href="#L-102"><span class="linenos"> 102</span></a>                <span class="s2">&quot;type&quot;</span><span class="p">:</span> <span class="s2">&quot;dict&quot;</span><span class="p">,</span>
+</span><span id="L-103"><a href="#L-103"><span class="linenos"> 103</span></a>                <span class="s2">&quot;required&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="L-104"><a href="#L-104"><span class="linenos"> 104</span></a>                <span class="s2">&quot;schema&quot;</span><span class="p">:</span> <span class="p">{</span>
+</span><span id="L-105"><a href="#L-105"><span class="linenos"> 105</span></a>                    <span class="s2">&quot;vocabulary_id&quot;</span><span class="p">:</span> <span class="p">{</span><span class="s2">&quot;type&quot;</span><span class="p">:</span> <span class="s2">&quot;string&quot;</span><span class="p">,</span> <span class="s2">&quot;required&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">},</span>
+</span><span id="L-106"><a href="#L-106"><span class="linenos"> 106</span></a>                    <span class="s2">&quot;vocabulary_name&quot;</span><span class="p">:</span> <span class="p">{</span><span class="s2">&quot;type&quot;</span><span class="p">:</span> <span class="s2">&quot;string&quot;</span><span class="p">,</span> <span class="s2">&quot;required&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">},</span>
+</span><span id="L-107"><a href="#L-107"><span class="linenos"> 107</span></a>                    <span class="s2">&quot;vocabulary_reference&quot;</span><span class="p">:</span> <span class="p">{</span>
+</span><span id="L-108"><a href="#L-108"><span class="linenos"> 108</span></a>                        <span class="s2">&quot;type&quot;</span><span class="p">:</span> <span class="s2">&quot;string&quot;</span><span class="p">,</span>
+</span><span id="L-109"><a href="#L-109"><span class="linenos"> 109</span></a>                        <span class="s2">&quot;required&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="L-110"><a href="#L-110"><span class="linenos"> 110</span></a>                        <span class="s2">&quot;regex&quot;</span><span class="p">:</span> <span class="sa">r</span><span class="s2">&quot;^https?://.*&quot;</span><span class="p">,</span>  <span class="c1"># Ensures it&#39;s a URL</span>
+</span><span id="L-111"><a href="#L-111"><span class="linenos"> 111</span></a>                    <span class="p">},</span>
+</span><span id="L-112"><a href="#L-112"><span class="linenos"> 112</span></a>                <span class="p">},</span>
+</span><span id="L-113"><a href="#L-113"><span class="linenos"> 113</span></a>            <span class="p">},</span>
+</span><span id="L-114"><a href="#L-114"><span class="linenos"> 114</span></a>            <span class="s2">&quot;map&quot;</span><span class="p">:</span> <span class="p">{</span>
+</span><span id="L-115"><a href="#L-115"><span class="linenos"> 115</span></a>                <span class="s2">&quot;type&quot;</span><span class="p">:</span> <span class="s2">&quot;list&quot;</span><span class="p">,</span>
+</span><span id="L-116"><a href="#L-116"><span class="linenos"> 116</span></a>                <span class="s2">&quot;schema&quot;</span><span class="p">:</span> <span class="p">{</span>
+</span><span id="L-117"><a href="#L-117"><span class="linenos"> 117</span></a>                    <span class="s2">&quot;type&quot;</span><span class="p">:</span> <span class="s2">&quot;string&quot;</span><span class="p">,</span>
+</span><span id="L-118"><a href="#L-118"><span class="linenos"> 118</span></a>                    <span class="s2">&quot;allowed&quot;</span><span class="p">:</span> <span class="nb">list</span><span class="p">(</span>
+</span><span id="L-119"><a href="#L-119"><span class="linenos"> 119</span></a>                        <span class="n">parse</span><span class="o">.</span><span class="n">SUPPORTED_CODE_TYPES</span>
+</span><span id="L-120"><a href="#L-120"><span class="linenos"> 120</span></a>                    <span class="p">),</span>  <span class="c1"># Ensure only predefined values are allowed</span>
 </span><span id="L-121"><a href="#L-121"><span class="linenos"> 121</span></a>                <span class="p">},</span>
 </span><span id="L-122"><a href="#L-122"><span class="linenos"> 122</span></a>            <span class="p">},</span>
-</span><span id="L-123"><a href="#L-123"><span class="linenos"> 123</span></a>        <span class="p">},</span>
-</span><span id="L-124"><a href="#L-124"><span class="linenos"> 124</span></a>    <span class="p">}</span>
-</span><span id="L-125"><a href="#L-125"><span class="linenos"> 125</span></a><span class="p">}</span>
-</span><span id="L-126"><a href="#L-126"><span class="linenos"> 126</span></a>
-</span><span id="L-127"><a href="#L-127"><span class="linenos"> 127</span></a>
-</span><span id="L-128"><a href="#L-128"><span class="linenos"> 128</span></a><span class="k">class</span><span class="w"> </span><span class="nc">PhenValidationException</span><span class="p">(</span><span class="ne">Exception</span><span class="p">):</span>
-</span><span id="L-129"><a href="#L-129"><span class="linenos"> 129</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Custom exception class raised when validation errors in phenotype configuration file&quot;&quot;&quot;</span>
-</span><span id="L-130"><a href="#L-130"><span class="linenos"> 130</span></a>
-</span><span id="L-131"><a href="#L-131"><span class="linenos"> 131</span></a>    <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">,</span> <span class="n">validation_errors</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
-</span><span id="L-132"><a href="#L-132"><span class="linenos"> 132</span></a>        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">message</span><span class="p">)</span>
-</span><span id="L-133"><a href="#L-133"><span class="linenos"> 133</span></a>        <span class="bp">self</span><span class="o">.</span><span class="n">validation_errors</span> <span class="o">=</span> <span class="n">validation_errors</span>
-</span><span id="L-134"><a href="#L-134"><span class="linenos"> 134</span></a>
-</span><span id="L-135"><a href="#L-135"><span class="linenos"> 135</span></a>
-</span><span id="L-136"><a href="#L-136"><span class="linenos"> 136</span></a><span class="k">def</span><span class="w"> </span><span class="nf">construct_git_url</span><span class="p">(</span><span class="n">remote_url</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
-</span><span id="L-137"><a href="#L-137"><span class="linenos"> 137</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Constructs a git url for github or gitlab including a PAT token environment variable&quot;&quot;&quot;</span>
-</span><span id="L-138"><a href="#L-138"><span class="linenos"> 138</span></a>    <span class="c1"># check the url</span>
-</span><span id="L-139"><a href="#L-139"><span class="linenos"> 139</span></a>    <span class="n">parsed_url</span> <span class="o">=</span> <span class="n">urlparse</span><span class="p">(</span><span class="n">remote_url</span><span class="p">)</span>
-</span><span id="L-140"><a href="#L-140"><span class="linenos"> 140</span></a>
-</span><span id="L-141"><a href="#L-141"><span class="linenos"> 141</span></a>    <span class="c1"># if github in the URL otherwise assume it&#39;s gitlab, if we want to use others such as codeberg we&#39;d</span>
-</span><span id="L-142"><a href="#L-142"><span class="linenos"> 142</span></a>    <span class="c1"># need to update this function if the URL scheme is different.</span>
-</span><span id="L-143"><a href="#L-143"><span class="linenos"> 143</span></a>    <span class="k">if</span> <span class="s2">&quot;github.com&quot;</span> <span class="ow">in</span> <span class="n">parsed_url</span><span class="o">.</span><span class="n">netloc</span><span class="p">:</span>
-</span><span id="L-144"><a href="#L-144"><span class="linenos"> 144</span></a>        <span class="c1"># get GitHub PAT from environment variable</span>
-</span><span id="L-145"><a href="#L-145"><span class="linenos"> 145</span></a>        <span class="n">auth</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">getenv</span><span class="p">(</span><span class="s2">&quot;ACMC_GITHUB_PAT&quot;</span><span class="p">)</span>
-</span><span id="L-146"><a href="#L-146"><span class="linenos"> 146</span></a>        <span class="k">if</span> <span class="ow">not</span> <span class="n">auth</span><span class="p">:</span>
-</span><span id="L-147"><a href="#L-147"><span class="linenos"> 147</span></a>            <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
-</span><span id="L-148"><a href="#L-148"><span class="linenos"> 148</span></a>                <span class="s2">&quot;GitHub PAT not found. Set the ACMC_GITHUB_PAT environment variable.&quot;</span>
-</span><span id="L-149"><a href="#L-149"><span class="linenos"> 149</span></a>            <span class="p">)</span>
-</span><span id="L-150"><a href="#L-150"><span class="linenos"> 150</span></a>    <span class="k">else</span><span class="p">:</span>
-</span><span id="L-151"><a href="#L-151"><span class="linenos"> 151</span></a>        <span class="c1"># get GitLab PAT from environment variable</span>
-</span><span id="L-152"><a href="#L-152"><span class="linenos"> 152</span></a>        <span class="n">auth</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">getenv</span><span class="p">(</span><span class="s2">&quot;ACMC_GITLAB_PAT&quot;</span><span class="p">)</span>
-</span><span id="L-153"><a href="#L-153"><span class="linenos"> 153</span></a>        <span class="k">if</span> <span class="ow">not</span> <span class="n">auth</span><span class="p">:</span>
-</span><span id="L-154"><a href="#L-154"><span class="linenos"> 154</span></a>            <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
-</span><span id="L-155"><a href="#L-155"><span class="linenos"> 155</span></a>                <span class="s2">&quot;GitLab PAT not found. Set the ACMC_GITLAB_PAT environment variable.&quot;</span>
-</span><span id="L-156"><a href="#L-156"><span class="linenos"> 156</span></a>            <span class="p">)</span>
-</span><span id="L-157"><a href="#L-157"><span class="linenos"> 157</span></a>        <span class="n">auth</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;oauth2:</span><span class="si">{</span><span class="n">auth</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-158"><a href="#L-158"><span class="linenos"> 158</span></a>
-</span><span id="L-159"><a href="#L-159"><span class="linenos"> 159</span></a>    <span class="c1"># Construct the new URL with credentials</span>
-</span><span id="L-160"><a href="#L-160"><span class="linenos"> 160</span></a>    <span class="n">new_netloc</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">auth</span><span class="si">}</span><span class="s2">@</span><span class="si">{</span><span class="n">parsed_url</span><span class="o">.</span><span class="n">netloc</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-161"><a href="#L-161"><span class="linenos"> 161</span></a>    <span class="k">return</span> <span class="n">urlunparse</span><span class="p">(</span>
-</span><span id="L-162"><a href="#L-162"><span class="linenos"> 162</span></a>        <span class="p">(</span>
-</span><span id="L-163"><a href="#L-163"><span class="linenos"> 163</span></a>            <span class="n">parsed_url</span><span class="o">.</span><span class="n">scheme</span><span class="p">,</span>
-</span><span id="L-164"><a href="#L-164"><span class="linenos"> 164</span></a>            <span class="n">new_netloc</span><span class="p">,</span>
-</span><span id="L-165"><a href="#L-165"><span class="linenos"> 165</span></a>            <span class="n">parsed_url</span><span class="o">.</span><span class="n">path</span><span class="p">,</span>
-</span><span id="L-166"><a href="#L-166"><span class="linenos"> 166</span></a>            <span class="n">parsed_url</span><span class="o">.</span><span class="n">params</span><span class="p">,</span>
-</span><span id="L-167"><a href="#L-167"><span class="linenos"> 167</span></a>            <span class="n">parsed_url</span><span class="o">.</span><span class="n">query</span><span class="p">,</span>
-</span><span id="L-168"><a href="#L-168"><span class="linenos"> 168</span></a>            <span class="n">parsed_url</span><span class="o">.</span><span class="n">fragment</span><span class="p">,</span>
-</span><span id="L-169"><a href="#L-169"><span class="linenos"> 169</span></a>        <span class="p">)</span>
-</span><span id="L-170"><a href="#L-170"><span class="linenos"> 170</span></a>    <span class="p">)</span>
-</span><span id="L-171"><a href="#L-171"><span class="linenos"> 171</span></a>
-</span><span id="L-172"><a href="#L-172"><span class="linenos"> 172</span></a>
-</span><span id="L-173"><a href="#L-173"><span class="linenos"> 173</span></a><span class="k">def</span><span class="w"> </span><span class="nf">create_empty_git_dir</span><span class="p">(</span><span class="n">path</span><span class="p">:</span> <span class="n">Path</span><span class="p">):</span>
-</span><span id="L-174"><a href="#L-174"><span class="linenos"> 174</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Creates a directory with a .gitkeep file so that it&#39;s tracked in git&quot;&quot;&quot;</span>
-</span><span id="L-175"><a href="#L-175"><span class="linenos"> 175</span></a>    <span class="n">path</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-176"><a href="#L-176"><span class="linenos"> 176</span></a>    <span class="n">keep_path</span> <span class="o">=</span> <span class="n">path</span> <span class="o">/</span> <span class="s2">&quot;.gitkeep&quot;</span>
-</span><span id="L-177"><a href="#L-177"><span class="linenos"> 177</span></a>    <span class="n">keep_path</span><span class="o">.</span><span class="n">touch</span><span class="p">(</span><span class="n">exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-178"><a href="#L-178"><span class="linenos"> 178</span></a>
-</span><span id="L-179"><a href="#L-179"><span class="linenos"> 179</span></a>
-</span><span id="L-180"><a href="#L-180"><span class="linenos"> 180</span></a><span class="k">def</span><span class="w"> </span><span class="nf">check_delete_dir</span><span class="p">(</span><span class="n">path</span><span class="p">:</span> <span class="n">Path</span><span class="p">,</span> <span class="n">msg</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="L-181"><a href="#L-181"><span class="linenos"> 181</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Checks on the command line if a user wants to delete a directory</span>
-</span><span id="L-182"><a href="#L-182"><span class="linenos"> 182</span></a>
-</span><span id="L-183"><a href="#L-183"><span class="linenos"> 183</span></a><span class="sd">    Args:</span>
-</span><span id="L-184"><a href="#L-184"><span class="linenos"> 184</span></a><span class="sd">        path (Path): path of the directory to be deleted</span>
-</span><span id="L-185"><a href="#L-185"><span class="linenos"> 185</span></a><span class="sd">        msg (str): message to be displayed to the user</span>
-</span><span id="L-186"><a href="#L-186"><span class="linenos"> 186</span></a>
-</span><span id="L-187"><a href="#L-187"><span class="linenos"> 187</span></a><span class="sd">    Returns:</span>
-</span><span id="L-188"><a href="#L-188"><span class="linenos"> 188</span></a><span class="sd">        Boolean: True if deleted</span>
-</span><span id="L-189"><a href="#L-189"><span class="linenos"> 189</span></a><span class="sd">    &quot;&quot;&quot;</span>
-</span><span id="L-190"><a href="#L-190"><span class="linenos"> 190</span></a>    <span class="n">deleted</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-191"><a href="#L-191"><span class="linenos"> 191</span></a>
-</span><span id="L-192"><a href="#L-192"><span class="linenos"> 192</span></a>    <span class="n">user_input</span> <span class="o">=</span> <span class="nb">input</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">msg</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
-</span><span id="L-193"><a href="#L-193"><span class="linenos"> 193</span></a>    <span class="k">if</span> <span class="n">user_input</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">&quot;yes&quot;</span><span class="p">,</span> <span class="s2">&quot;y&quot;</span><span class="p">]:</span>
-</span><span id="L-194"><a href="#L-194"><span class="linenos"> 194</span></a>        <span class="n">shutil</span><span class="o">.</span><span class="n">rmtree</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
-</span><span id="L-195"><a href="#L-195"><span class="linenos"> 195</span></a>        <span class="n">deleted</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-196"><a href="#L-196"><span class="linenos"> 196</span></a>    <span class="k">else</span><span class="p">:</span>
-</span><span id="L-197"><a href="#L-197"><span class="linenos"> 197</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Directory was not deleted.&quot;</span><span class="p">)</span>
+</span><span id="L-123"><a href="#L-123"><span class="linenos"> 123</span></a>            <span class="s2">&quot;concept_sets&quot;</span><span class="p">:</span> <span class="p">{</span>
+</span><span id="L-124"><a href="#L-124"><span class="linenos"> 124</span></a>                <span class="s2">&quot;type&quot;</span><span class="p">:</span> <span class="s2">&quot;list&quot;</span><span class="p">,</span>
+</span><span id="L-125"><a href="#L-125"><span class="linenos"> 125</span></a>                <span class="s2">&quot;required&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
+</span><span id="L-126"><a href="#L-126"><span class="linenos"> 126</span></a>                <span class="s2">&quot;schema&quot;</span><span class="p">:</span> <span class="p">{</span>
+</span><span id="L-127"><a href="#L-127"><span class="linenos"> 127</span></a>                    <span class="s2">&quot;type&quot;</span><span class="p">:</span> <span class="s2">&quot;dict&quot;</span><span class="p">,</span>
+</span><span id="L-128"><a href="#L-128"><span class="linenos"> 128</span></a>                    <span class="s2">&quot;schema&quot;</span><span class="p">:</span> <span class="p">{</span>
+</span><span id="L-129"><a href="#L-129"><span class="linenos"> 129</span></a>                        <span class="s2">&quot;name&quot;</span><span class="p">:</span> <span class="p">{</span><span class="s2">&quot;type&quot;</span><span class="p">:</span> <span class="s2">&quot;string&quot;</span><span class="p">,</span> <span class="s2">&quot;required&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">},</span>
+</span><span id="L-130"><a href="#L-130"><span class="linenos"> 130</span></a>                        <span class="s2">&quot;file&quot;</span><span class="p">:</span> <span class="p">{</span>
+</span><span id="L-131"><a href="#L-131"><span class="linenos"> 131</span></a>                            <span class="s2">&quot;type&quot;</span><span class="p">:</span> <span class="s2">&quot;dict&quot;</span><span class="p">,</span>
+</span><span id="L-132"><a href="#L-132"><span class="linenos"> 132</span></a>                            <span class="s2">&quot;required&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+</span><span id="L-133"><a href="#L-133"><span class="linenos"> 133</span></a>                            <span class="s2">&quot;schema&quot;</span><span class="p">:</span> <span class="p">{</span>
+</span><span id="L-134"><a href="#L-134"><span class="linenos"> 134</span></a>                                <span class="s2">&quot;path&quot;</span><span class="p">:</span> <span class="p">{</span><span class="s2">&quot;type&quot;</span><span class="p">:</span> <span class="s2">&quot;string&quot;</span><span class="p">,</span> <span class="s2">&quot;required&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">},</span>
+</span><span id="L-135"><a href="#L-135"><span class="linenos"> 135</span></a>                                <span class="s2">&quot;columns&quot;</span><span class="p">:</span> <span class="p">{</span><span class="s2">&quot;type&quot;</span><span class="p">:</span> <span class="s2">&quot;dict&quot;</span><span class="p">,</span> <span class="s2">&quot;required&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">},</span>
+</span><span id="L-136"><a href="#L-136"><span class="linenos"> 136</span></a>                                <span class="s2">&quot;category&quot;</span><span class="p">:</span> <span class="p">{</span>
+</span><span id="L-137"><a href="#L-137"><span class="linenos"> 137</span></a>                                    <span class="s2">&quot;type&quot;</span><span class="p">:</span> <span class="s2">&quot;string&quot;</span>
+</span><span id="L-138"><a href="#L-138"><span class="linenos"> 138</span></a>                                <span class="p">},</span>  <span class="c1"># Optional but must be string if present</span>
+</span><span id="L-139"><a href="#L-139"><span class="linenos"> 139</span></a>                                <span class="s2">&quot;actions&quot;</span><span class="p">:</span> <span class="p">{</span>
+</span><span id="L-140"><a href="#L-140"><span class="linenos"> 140</span></a>                                    <span class="s2">&quot;type&quot;</span><span class="p">:</span> <span class="s2">&quot;dict&quot;</span><span class="p">,</span>
+</span><span id="L-141"><a href="#L-141"><span class="linenos"> 141</span></a>                                    <span class="s2">&quot;schema&quot;</span><span class="p">:</span> <span class="p">{</span><span class="s2">&quot;divide_col&quot;</span><span class="p">:</span> <span class="p">{</span><span class="s2">&quot;type&quot;</span><span class="p">:</span> <span class="s2">&quot;string&quot;</span><span class="p">}},</span>
+</span><span id="L-142"><a href="#L-142"><span class="linenos"> 142</span></a>                                <span class="p">},</span>
+</span><span id="L-143"><a href="#L-143"><span class="linenos"> 143</span></a>                            <span class="p">},</span>
+</span><span id="L-144"><a href="#L-144"><span class="linenos"> 144</span></a>                        <span class="p">},</span>
+</span><span id="L-145"><a href="#L-145"><span class="linenos"> 145</span></a>                        <span class="s2">&quot;metadata&quot;</span><span class="p">:</span> <span class="p">{</span><span class="s2">&quot;type&quot;</span><span class="p">:</span> <span class="s2">&quot;dict&quot;</span><span class="p">,</span> <span class="s2">&quot;required&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">},</span>
+</span><span id="L-146"><a href="#L-146"><span class="linenos"> 146</span></a>                    <span class="p">},</span>
+</span><span id="L-147"><a href="#L-147"><span class="linenos"> 147</span></a>                <span class="p">},</span>
+</span><span id="L-148"><a href="#L-148"><span class="linenos"> 148</span></a>            <span class="p">},</span>
+</span><span id="L-149"><a href="#L-149"><span class="linenos"> 149</span></a>        <span class="p">},</span>
+</span><span id="L-150"><a href="#L-150"><span class="linenos"> 150</span></a>    <span class="p">}</span>
+</span><span id="L-151"><a href="#L-151"><span class="linenos"> 151</span></a><span class="p">}</span>
+</span><span id="L-152"><a href="#L-152"><span class="linenos"> 152</span></a><span class="sd">&quot;&quot;&quot;Phenotype config.yml schema definition&quot;&quot;&quot;</span>
+</span><span id="L-153"><a href="#L-153"><span class="linenos"> 153</span></a>
+</span><span id="L-154"><a href="#L-154"><span class="linenos"> 154</span></a>
+</span><span id="L-155"><a href="#L-155"><span class="linenos"> 155</span></a><span class="k">class</span><span class="w"> </span><span class="nc">PhenValidationException</span><span class="p">(</span><span class="ne">Exception</span><span class="p">):</span>
+</span><span id="L-156"><a href="#L-156"><span class="linenos"> 156</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Custom exception class raised when validation errors in phenotype configuration file&quot;&quot;&quot;</span>
+</span><span id="L-157"><a href="#L-157"><span class="linenos"> 157</span></a>
+</span><span id="L-158"><a href="#L-158"><span class="linenos"> 158</span></a>    <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">,</span> <span class="n">validation_errors</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
+</span><span id="L-159"><a href="#L-159"><span class="linenos"> 159</span></a>        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">message</span><span class="p">)</span>
+</span><span id="L-160"><a href="#L-160"><span class="linenos"> 160</span></a>        <span class="bp">self</span><span class="o">.</span><span class="n">validation_errors</span> <span class="o">=</span> <span class="n">validation_errors</span>
+</span><span id="L-161"><a href="#L-161"><span class="linenos"> 161</span></a>
+</span><span id="L-162"><a href="#L-162"><span class="linenos"> 162</span></a>
+</span><span id="L-163"><a href="#L-163"><span class="linenos"> 163</span></a><span class="k">def</span><span class="w"> </span><span class="nf">_construct_git_url</span><span class="p">(</span><span class="n">remote_url</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
+</span><span id="L-164"><a href="#L-164"><span class="linenos"> 164</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Constructs a git url for github or gitlab including a PAT token environment variable&quot;&quot;&quot;</span>
+</span><span id="L-165"><a href="#L-165"><span class="linenos"> 165</span></a>    <span class="c1"># check the url</span>
+</span><span id="L-166"><a href="#L-166"><span class="linenos"> 166</span></a>    <span class="n">parsed_url</span> <span class="o">=</span> <span class="n">urlparse</span><span class="p">(</span><span class="n">remote_url</span><span class="p">)</span>
+</span><span id="L-167"><a href="#L-167"><span class="linenos"> 167</span></a>
+</span><span id="L-168"><a href="#L-168"><span class="linenos"> 168</span></a>    <span class="c1"># if github in the URL otherwise assume it&#39;s gitlab, if we want to use others such as codeberg we&#39;d</span>
+</span><span id="L-169"><a href="#L-169"><span class="linenos"> 169</span></a>    <span class="c1"># need to update this function if the URL scheme is different.</span>
+</span><span id="L-170"><a href="#L-170"><span class="linenos"> 170</span></a>    <span class="k">if</span> <span class="s2">&quot;github.com&quot;</span> <span class="ow">in</span> <span class="n">parsed_url</span><span class="o">.</span><span class="n">netloc</span><span class="p">:</span>
+</span><span id="L-171"><a href="#L-171"><span class="linenos"> 171</span></a>        <span class="c1"># get GitHub PAT from environment variable</span>
+</span><span id="L-172"><a href="#L-172"><span class="linenos"> 172</span></a>        <span class="n">auth</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">getenv</span><span class="p">(</span><span class="s2">&quot;ACMC_GITHUB_PAT&quot;</span><span class="p">)</span>
+</span><span id="L-173"><a href="#L-173"><span class="linenos"> 173</span></a>        <span class="k">if</span> <span class="ow">not</span> <span class="n">auth</span><span class="p">:</span>
+</span><span id="L-174"><a href="#L-174"><span class="linenos"> 174</span></a>            <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
+</span><span id="L-175"><a href="#L-175"><span class="linenos"> 175</span></a>                <span class="s2">&quot;GitHub PAT not found. Set the ACMC_GITHUB_PAT environment variable.&quot;</span>
+</span><span id="L-176"><a href="#L-176"><span class="linenos"> 176</span></a>            <span class="p">)</span>
+</span><span id="L-177"><a href="#L-177"><span class="linenos"> 177</span></a>    <span class="k">else</span><span class="p">:</span>
+</span><span id="L-178"><a href="#L-178"><span class="linenos"> 178</span></a>        <span class="c1"># get GitLab PAT from environment variable</span>
+</span><span id="L-179"><a href="#L-179"><span class="linenos"> 179</span></a>        <span class="n">auth</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">getenv</span><span class="p">(</span><span class="s2">&quot;ACMC_GITLAB_PAT&quot;</span><span class="p">)</span>
+</span><span id="L-180"><a href="#L-180"><span class="linenos"> 180</span></a>        <span class="k">if</span> <span class="ow">not</span> <span class="n">auth</span><span class="p">:</span>
+</span><span id="L-181"><a href="#L-181"><span class="linenos"> 181</span></a>            <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
+</span><span id="L-182"><a href="#L-182"><span class="linenos"> 182</span></a>                <span class="s2">&quot;GitLab PAT not found. Set the ACMC_GITLAB_PAT environment variable.&quot;</span>
+</span><span id="L-183"><a href="#L-183"><span class="linenos"> 183</span></a>            <span class="p">)</span>
+</span><span id="L-184"><a href="#L-184"><span class="linenos"> 184</span></a>        <span class="n">auth</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;oauth2:</span><span class="si">{</span><span class="n">auth</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-185"><a href="#L-185"><span class="linenos"> 185</span></a>
+</span><span id="L-186"><a href="#L-186"><span class="linenos"> 186</span></a>    <span class="c1"># Construct the new URL with credentials</span>
+</span><span id="L-187"><a href="#L-187"><span class="linenos"> 187</span></a>    <span class="n">new_netloc</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">auth</span><span class="si">}</span><span class="s2">@</span><span class="si">{</span><span class="n">parsed_url</span><span class="o">.</span><span class="n">netloc</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-188"><a href="#L-188"><span class="linenos"> 188</span></a>    <span class="k">return</span> <span class="n">urlunparse</span><span class="p">(</span>
+</span><span id="L-189"><a href="#L-189"><span class="linenos"> 189</span></a>        <span class="p">(</span>
+</span><span id="L-190"><a href="#L-190"><span class="linenos"> 190</span></a>            <span class="n">parsed_url</span><span class="o">.</span><span class="n">scheme</span><span class="p">,</span>
+</span><span id="L-191"><a href="#L-191"><span class="linenos"> 191</span></a>            <span class="n">new_netloc</span><span class="p">,</span>
+</span><span id="L-192"><a href="#L-192"><span class="linenos"> 192</span></a>            <span class="n">parsed_url</span><span class="o">.</span><span class="n">path</span><span class="p">,</span>
+</span><span id="L-193"><a href="#L-193"><span class="linenos"> 193</span></a>            <span class="n">parsed_url</span><span class="o">.</span><span class="n">params</span><span class="p">,</span>
+</span><span id="L-194"><a href="#L-194"><span class="linenos"> 194</span></a>            <span class="n">parsed_url</span><span class="o">.</span><span class="n">query</span><span class="p">,</span>
+</span><span id="L-195"><a href="#L-195"><span class="linenos"> 195</span></a>            <span class="n">parsed_url</span><span class="o">.</span><span class="n">fragment</span><span class="p">,</span>
+</span><span id="L-196"><a href="#L-196"><span class="linenos"> 196</span></a>        <span class="p">)</span>
+</span><span id="L-197"><a href="#L-197"><span class="linenos"> 197</span></a>    <span class="p">)</span>
 </span><span id="L-198"><a href="#L-198"><span class="linenos"> 198</span></a>
-</span><span id="L-199"><a href="#L-199"><span class="linenos"> 199</span></a>    <span class="k">return</span> <span class="n">deleted</span>
-</span><span id="L-200"><a href="#L-200"><span class="linenos"> 200</span></a>
-</span><span id="L-201"><a href="#L-201"><span class="linenos"> 201</span></a>
-</span><span id="L-202"><a href="#L-202"><span class="linenos"> 202</span></a><span class="k">def</span><span class="w"> </span><span class="nf">fork</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">upstream_url</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">upstream_version</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">new_origin_url</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
-</span><span id="L-203"><a href="#L-203"><span class="linenos"> 203</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Forks an upstream phenotype in a remote repo at a specific version to a local director, and optionally sets to a new remote origin&quot;</span>
-</span><span id="L-204"><a href="#L-204"><span class="linenos"> 204</span></a>
-</span><span id="L-205"><a href="#L-205"><span class="linenos"> 205</span></a><span class="sd">    Args:</span>
-</span><span id="L-206"><a href="#L-206"><span class="linenos"> 206</span></a><span class="sd">        phen_dir (str): local directory path where the upstream repo is to be cloned</span>
-</span><span id="L-207"><a href="#L-207"><span class="linenos"> 207</span></a><span class="sd">        upstream_url (str): url to the upstream repo</span>
-</span><span id="L-208"><a href="#L-208"><span class="linenos"> 208</span></a><span class="sd">        upstream_version (str): version in the upstream repo to clone</span>
-</span><span id="L-209"><a href="#L-209"><span class="linenos"> 209</span></a><span class="sd">        new_origin_url (str, optional): url of the remote repo to set as the new origin. Defaults to None.</span>
-</span><span id="L-210"><a href="#L-210"><span class="linenos"> 210</span></a>
-</span><span id="L-211"><a href="#L-211"><span class="linenos"> 211</span></a><span class="sd">    Raises:</span>
-</span><span id="L-212"><a href="#L-212"><span class="linenos"> 212</span></a><span class="sd">        ValueError: if the specified version is not in the upstream repo</span>
-</span><span id="L-213"><a href="#L-213"><span class="linenos"> 213</span></a><span class="sd">        ValueError: if the upstream repo is not a valid phenotype repo</span>
-</span><span id="L-214"><a href="#L-214"><span class="linenos"> 214</span></a><span class="sd">        ValueError: if there&#39;s any other problems with Git</span>
-</span><span id="L-215"><a href="#L-215"><span class="linenos"> 215</span></a><span class="sd">    &quot;&quot;&quot;</span>
-</span><span id="L-216"><a href="#L-216"><span class="linenos"> 216</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span>
-</span><span id="L-217"><a href="#L-217"><span class="linenos"> 217</span></a>        <span class="sa">f</span><span class="s2">&quot;Forking upstream repo </span><span class="si">{</span><span class="n">upstream_url</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">upstream_version</span><span class="si">}</span><span class="s2"> into directory: </span><span class="si">{</span><span class="n">phen_dir</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-218"><a href="#L-218"><span class="linenos"> 218</span></a>    <span class="p">)</span>
-</span><span id="L-219"><a href="#L-219"><span class="linenos"> 219</span></a>
-</span><span id="L-220"><a href="#L-220"><span class="linenos"> 220</span></a>    <span class="n">phen_path</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">)</span>
-</span><span id="L-221"><a href="#L-221"><span class="linenos"> 221</span></a>    <span class="c1"># check if directory already exists and ask user if they want to recreate it</span>
-</span><span id="L-222"><a href="#L-222"><span class="linenos"> 222</span></a>    <span class="k">if</span> <span class="p">(</span>
-</span><span id="L-223"><a href="#L-223"><span class="linenos"> 223</span></a>        <span class="n">phen_path</span><span class="o">.</span><span class="n">exists</span><span class="p">()</span> <span class="ow">and</span> <span class="n">phen_path</span><span class="o">.</span><span class="n">is_dir</span><span class="p">()</span>
-</span><span id="L-224"><a href="#L-224"><span class="linenos"> 224</span></a>    <span class="p">):</span>  <span class="c1"># Check if it exists and is a directory</span>
-</span><span id="L-225"><a href="#L-225"><span class="linenos"> 225</span></a>        <span class="n">configure</span> <span class="o">=</span> <span class="n">check_delete_dir</span><span class="p">(</span>
-</span><span id="L-226"><a href="#L-226"><span class="linenos"> 226</span></a>            <span class="n">phen_path</span><span class="p">,</span>
-</span><span id="L-227"><a href="#L-227"><span class="linenos"> 227</span></a>            <span class="sa">f</span><span class="s2">&quot;The phen directory already exists. Do you want to reinitialise? (yes/no): &quot;</span><span class="p">,</span>
-</span><span id="L-228"><a href="#L-228"><span class="linenos"> 228</span></a>        <span class="p">)</span>
-</span><span id="L-229"><a href="#L-229"><span class="linenos"> 229</span></a>    <span class="k">else</span><span class="p">:</span>
-</span><span id="L-230"><a href="#L-230"><span class="linenos"> 230</span></a>        <span class="n">configure</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-231"><a href="#L-231"><span class="linenos"> 231</span></a>
-</span><span id="L-232"><a href="#L-232"><span class="linenos"> 232</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">configure</span><span class="p">:</span>
-</span><span id="L-233"><a href="#L-233"><span class="linenos"> 233</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Exiting, phenotype not initiatised&quot;</span><span class="p">)</span>
-</span><span id="L-234"><a href="#L-234"><span class="linenos"> 234</span></a>        <span class="k">return</span>
-</span><span id="L-235"><a href="#L-235"><span class="linenos"> 235</span></a>
-</span><span id="L-236"><a href="#L-236"><span class="linenos"> 236</span></a>    <span class="k">try</span><span class="p">:</span>
-</span><span id="L-237"><a href="#L-237"><span class="linenos"> 237</span></a>        <span class="c1"># Clone repo</span>
-</span><span id="L-238"><a href="#L-238"><span class="linenos"> 238</span></a>        <span class="n">git_url</span> <span class="o">=</span> <span class="n">construct_git_url</span><span class="p">(</span><span class="n">upstream_url</span><span class="p">)</span>
-</span><span id="L-239"><a href="#L-239"><span class="linenos"> 239</span></a>        <span class="n">repo</span> <span class="o">=</span> <span class="n">git</span><span class="o">.</span><span class="n">Repo</span><span class="o">.</span><span class="n">clone_from</span><span class="p">(</span><span class="n">git_url</span><span class="p">,</span> <span class="n">phen_path</span><span class="p">)</span>
-</span><span id="L-240"><a href="#L-240"><span class="linenos"> 240</span></a>
-</span><span id="L-241"><a href="#L-241"><span class="linenos"> 241</span></a>        <span class="c1"># Fetch all branches and tags</span>
-</span><span id="L-242"><a href="#L-242"><span class="linenos"> 242</span></a>        <span class="n">repo</span><span class="o">.</span><span class="n">remotes</span><span class="o">.</span><span class="n">origin</span><span class="o">.</span><span class="n">fetch</span><span class="p">()</span>
-</span><span id="L-243"><a href="#L-243"><span class="linenos"> 243</span></a>
-</span><span id="L-244"><a href="#L-244"><span class="linenos"> 244</span></a>        <span class="c1"># Check if the version exists</span>
-</span><span id="L-245"><a href="#L-245"><span class="linenos"> 245</span></a>        <span class="n">available_refs</span> <span class="o">=</span> <span class="p">[</span><span class="n">ref</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;/&quot;</span><span class="p">)[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="k">for</span> <span class="n">ref</span> <span class="ow">in</span> <span class="n">repo</span><span class="o">.</span><span class="n">references</span><span class="p">]</span>
-</span><span id="L-246"><a href="#L-246"><span class="linenos"> 246</span></a>        <span class="k">if</span> <span class="n">upstream_version</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">available_refs</span><span class="p">:</span>
-</span><span id="L-247"><a href="#L-247"><span class="linenos"> 247</span></a>            <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
-</span><span id="L-248"><a href="#L-248"><span class="linenos"> 248</span></a>                <span class="sa">f</span><span class="s2">&quot;Version &#39;</span><span class="si">{</span><span class="n">upstream_version</span><span class="si">}</span><span class="s2">&#39; not found in the repository: </span><span class="si">{</span><span class="n">upstream_url</span><span class="si">}</span><span class="s2">.&quot;</span>
-</span><span id="L-249"><a href="#L-249"><span class="linenos"> 249</span></a>            <span class="p">)</span>
-</span><span id="L-250"><a href="#L-250"><span class="linenos"> 250</span></a>
-</span><span id="L-251"><a href="#L-251"><span class="linenos"> 251</span></a>        <span class="c1"># Checkout the specified version</span>
-</span><span id="L-252"><a href="#L-252"><span class="linenos"> 252</span></a>        <span class="n">repo</span><span class="o">.</span><span class="n">git</span><span class="o">.</span><span class="n">checkout</span><span class="p">(</span><span class="n">upstream_version</span><span class="p">)</span>
-</span><span id="L-253"><a href="#L-253"><span class="linenos"> 253</span></a>        <span class="n">main_branch</span> <span class="o">=</span> <span class="n">repo</span><span class="o">.</span><span class="n">heads</span><span class="p">[</span><span class="n">DEFAULT_GIT_BRANCH</span><span class="p">]</span>
-</span><span id="L-254"><a href="#L-254"><span class="linenos"> 254</span></a>        <span class="n">main_branch</span><span class="o">.</span><span class="n">checkout</span><span class="p">()</span>
-</span><span id="L-255"><a href="#L-255"><span class="linenos"> 255</span></a>
-</span><span id="L-256"><a href="#L-256"><span class="linenos"> 256</span></a>        <span class="c1"># Check if &#39;config.yml&#39; exists in the root directory</span>
-</span><span id="L-257"><a href="#L-257"><span class="linenos"> 257</span></a>        <span class="n">config_path</span> <span class="o">=</span> <span class="n">phen_path</span> <span class="o">/</span> <span class="s2">&quot;config.yml&quot;</span>
-</span><span id="L-258"><a href="#L-258"><span class="linenos"> 258</span></a>        <span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isfile</span><span class="p">(</span><span class="n">config_path</span><span class="p">):</span>
-</span><span id="L-259"><a href="#L-259"><span class="linenos"> 259</span></a>            <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
-</span><span id="L-260"><a href="#L-260"><span class="linenos"> 260</span></a>                <span class="sa">f</span><span class="s2">&quot;The forked repository is not a valid ACMC repo because &#39;config.yml&#39; is missing in the root directory.&quot;</span>
-</span><span id="L-261"><a href="#L-261"><span class="linenos"> 261</span></a>            <span class="p">)</span>
-</span><span id="L-262"><a href="#L-262"><span class="linenos"> 262</span></a>
-</span><span id="L-263"><a href="#L-263"><span class="linenos"> 263</span></a>        <span class="c1"># Validate the phenotype is compatible with the acmc tool</span>
-</span><span id="L-264"><a href="#L-264"><span class="linenos"> 264</span></a>        <span class="n">validate</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">phen_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">()))</span>
-</span><span id="L-265"><a href="#L-265"><span class="linenos"> 265</span></a>
-</span><span id="L-266"><a href="#L-266"><span class="linenos"> 266</span></a>        <span class="c1"># Delete each tag locally</span>
-</span><span id="L-267"><a href="#L-267"><span class="linenos"> 267</span></a>        <span class="n">tags</span> <span class="o">=</span> <span class="n">repo</span><span class="o">.</span><span class="n">tags</span>
-</span><span id="L-268"><a href="#L-268"><span class="linenos"> 268</span></a>        <span class="k">for</span> <span class="n">tag</span> <span class="ow">in</span> <span class="n">tags</span><span class="p">:</span>
-</span><span id="L-269"><a href="#L-269"><span class="linenos"> 269</span></a>            <span class="n">repo</span><span class="o">.</span><span class="n">delete_tag</span><span class="p">(</span><span class="n">tag</span><span class="p">)</span>
-</span><span id="L-270"><a href="#L-270"><span class="linenos"> 270</span></a>            <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Deleted tags from forked repo: </span><span class="si">{</span><span class="n">tag</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-271"><a href="#L-271"><span class="linenos"> 271</span></a>
-</span><span id="L-272"><a href="#L-272"><span class="linenos"> 272</span></a>        <span class="c1"># Add upstream remote</span>
-</span><span id="L-273"><a href="#L-273"><span class="linenos"> 273</span></a>        <span class="n">repo</span><span class="o">.</span><span class="n">create_remote</span><span class="p">(</span><span class="s2">&quot;upstream&quot;</span><span class="p">,</span> <span class="n">upstream_url</span><span class="p">)</span>
-</span><span id="L-274"><a href="#L-274"><span class="linenos"> 274</span></a>        <span class="n">remote</span> <span class="o">=</span> <span class="n">repo</span><span class="o">.</span><span class="n">remotes</span><span class="p">[</span><span class="s2">&quot;origin&quot;</span><span class="p">]</span>
-</span><span id="L-275"><a href="#L-275"><span class="linenos"> 275</span></a>        <span class="n">repo</span><span class="o">.</span><span class="n">delete_remote</span><span class="p">(</span><span class="n">remote</span><span class="p">)</span>  <span class="c1"># Remove existing origin</span>
-</span><span id="L-276"><a href="#L-276"><span class="linenos"> 276</span></a>
-</span><span id="L-277"><a href="#L-277"><span class="linenos"> 277</span></a>        <span class="c1"># Optionally set a new origin remote</span>
-</span><span id="L-278"><a href="#L-278"><span class="linenos"> 278</span></a>        <span class="k">if</span> <span class="n">new_origin_url</span><span class="p">:</span>
-</span><span id="L-279"><a href="#L-279"><span class="linenos"> 279</span></a>            <span class="n">git_url</span> <span class="o">=</span> <span class="n">construct_git_url</span><span class="p">(</span><span class="n">new_origin_url</span><span class="p">)</span>
-</span><span id="L-280"><a href="#L-280"><span class="linenos"> 280</span></a>            <span class="n">repo</span><span class="o">.</span><span class="n">create_remote</span><span class="p">(</span><span class="s2">&quot;origin&quot;</span><span class="p">,</span> <span class="n">git_url</span><span class="p">)</span>
-</span><span id="L-281"><a href="#L-281"><span class="linenos"> 281</span></a>            <span class="n">repo</span><span class="o">.</span><span class="n">git</span><span class="o">.</span><span class="n">push</span><span class="p">(</span><span class="s2">&quot;--set-upstream&quot;</span><span class="p">,</span> <span class="s2">&quot;origin&quot;</span><span class="p">,</span> <span class="s2">&quot;main&quot;</span><span class="p">)</span>
-</span><span id="L-282"><a href="#L-282"><span class="linenos"> 282</span></a>
-</span><span id="L-283"><a href="#L-283"><span class="linenos"> 283</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Repository forked successfully at </span><span class="si">{</span><span class="n">phen_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-284"><a href="#L-284"><span class="linenos"> 284</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Upstream set to </span><span class="si">{</span><span class="n">upstream_url</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-285"><a href="#L-285"><span class="linenos"> 285</span></a>        <span class="k">if</span> <span class="n">new_origin_url</span><span class="p">:</span>
-</span><span id="L-286"><a href="#L-286"><span class="linenos"> 286</span></a>            <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Origin set to </span><span class="si">{</span><span class="n">new_origin_url</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-287"><a href="#L-287"><span class="linenos"> 287</span></a>
-</span><span id="L-288"><a href="#L-288"><span class="linenos"> 288</span></a>    <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
-</span><span id="L-289"><a href="#L-289"><span class="linenos"> 289</span></a>        <span class="k">if</span> <span class="n">phen_path</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
-</span><span id="L-290"><a href="#L-290"><span class="linenos"> 290</span></a>            <span class="n">shutil</span><span class="o">.</span><span class="n">rmtree</span><span class="p">(</span><span class="n">phen_path</span><span class="p">)</span>
-</span><span id="L-291"><a href="#L-291"><span class="linenos"> 291</span></a>        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Error occurred during repository fork: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-199"><a href="#L-199"><span class="linenos"> 199</span></a>
+</span><span id="L-200"><a href="#L-200"><span class="linenos"> 200</span></a><span class="k">def</span><span class="w"> </span><span class="nf">_create_empty_git_dir</span><span class="p">(</span><span class="n">path</span><span class="p">:</span> <span class="n">Path</span><span class="p">):</span>
+</span><span id="L-201"><a href="#L-201"><span class="linenos"> 201</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Creates a directory with a .gitkeep file so that it&#39;s tracked in git&quot;&quot;&quot;</span>
+</span><span id="L-202"><a href="#L-202"><span class="linenos"> 202</span></a>    <span class="n">path</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-203"><a href="#L-203"><span class="linenos"> 203</span></a>    <span class="n">keep_path</span> <span class="o">=</span> <span class="n">path</span> <span class="o">/</span> <span class="s2">&quot;.gitkeep&quot;</span>
+</span><span id="L-204"><a href="#L-204"><span class="linenos"> 204</span></a>    <span class="n">keep_path</span><span class="o">.</span><span class="n">touch</span><span class="p">(</span><span class="n">exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-205"><a href="#L-205"><span class="linenos"> 205</span></a>
+</span><span id="L-206"><a href="#L-206"><span class="linenos"> 206</span></a>
+</span><span id="L-207"><a href="#L-207"><span class="linenos"> 207</span></a><span class="k">def</span><span class="w"> </span><span class="nf">_check_delete_dir</span><span class="p">(</span><span class="n">path</span><span class="p">:</span> <span class="n">Path</span><span class="p">,</span> <span class="n">msg</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
+</span><span id="L-208"><a href="#L-208"><span class="linenos"> 208</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Checks on the command line if a user wants to delete a directory</span>
+</span><span id="L-209"><a href="#L-209"><span class="linenos"> 209</span></a>
+</span><span id="L-210"><a href="#L-210"><span class="linenos"> 210</span></a><span class="sd">    Args:</span>
+</span><span id="L-211"><a href="#L-211"><span class="linenos"> 211</span></a><span class="sd">        path (Path): path of the directory to be deleted</span>
+</span><span id="L-212"><a href="#L-212"><span class="linenos"> 212</span></a><span class="sd">        msg (str): message to be displayed to the user</span>
+</span><span id="L-213"><a href="#L-213"><span class="linenos"> 213</span></a>
+</span><span id="L-214"><a href="#L-214"><span class="linenos"> 214</span></a><span class="sd">    Returns:</span>
+</span><span id="L-215"><a href="#L-215"><span class="linenos"> 215</span></a><span class="sd">        Boolean: True if deleted</span>
+</span><span id="L-216"><a href="#L-216"><span class="linenos"> 216</span></a><span class="sd">    &quot;&quot;&quot;</span>
+</span><span id="L-217"><a href="#L-217"><span class="linenos"> 217</span></a>    <span class="n">deleted</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-218"><a href="#L-218"><span class="linenos"> 218</span></a>
+</span><span id="L-219"><a href="#L-219"><span class="linenos"> 219</span></a>    <span class="n">user_input</span> <span class="o">=</span> <span class="nb">input</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">msg</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
+</span><span id="L-220"><a href="#L-220"><span class="linenos"> 220</span></a>    <span class="k">if</span> <span class="n">user_input</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">&quot;yes&quot;</span><span class="p">,</span> <span class="s2">&quot;y&quot;</span><span class="p">]:</span>
+</span><span id="L-221"><a href="#L-221"><span class="linenos"> 221</span></a>        <span class="n">shutil</span><span class="o">.</span><span class="n">rmtree</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
+</span><span id="L-222"><a href="#L-222"><span class="linenos"> 222</span></a>        <span class="n">deleted</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-223"><a href="#L-223"><span class="linenos"> 223</span></a>    <span class="k">else</span><span class="p">:</span>
+</span><span id="L-224"><a href="#L-224"><span class="linenos"> 224</span></a>        <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Directory was not deleted.&quot;</span><span class="p">)</span>
+</span><span id="L-225"><a href="#L-225"><span class="linenos"> 225</span></a>
+</span><span id="L-226"><a href="#L-226"><span class="linenos"> 226</span></a>    <span class="k">return</span> <span class="n">deleted</span>
+</span><span id="L-227"><a href="#L-227"><span class="linenos"> 227</span></a>
+</span><span id="L-228"><a href="#L-228"><span class="linenos"> 228</span></a>
+</span><span id="L-229"><a href="#L-229"><span class="linenos"> 229</span></a><span class="k">def</span><span class="w"> </span><span class="nf">init</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">remote_url</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
+</span><span id="L-230"><a href="#L-230"><span class="linenos"> 230</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Initial phenotype directory as git repo with standard structure&quot;&quot;&quot;</span>
+</span><span id="L-231"><a href="#L-231"><span class="linenos"> 231</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Initialising Phenotype in directory: </span><span class="si">{</span><span class="n">phen_dir</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-232"><a href="#L-232"><span class="linenos"> 232</span></a>    <span class="n">phen_path</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">)</span>
+</span><span id="L-233"><a href="#L-233"><span class="linenos"> 233</span></a>
+</span><span id="L-234"><a href="#L-234"><span class="linenos"> 234</span></a>    <span class="c1"># check if directory already exists and ask user if they want to recreate it</span>
+</span><span id="L-235"><a href="#L-235"><span class="linenos"> 235</span></a>    <span class="k">if</span> <span class="p">(</span>
+</span><span id="L-236"><a href="#L-236"><span class="linenos"> 236</span></a>        <span class="n">phen_path</span><span class="o">.</span><span class="n">exists</span><span class="p">()</span> <span class="ow">and</span> <span class="n">phen_path</span><span class="o">.</span><span class="n">is_dir</span><span class="p">()</span>
+</span><span id="L-237"><a href="#L-237"><span class="linenos"> 237</span></a>    <span class="p">):</span>  <span class="c1"># Check if it exists and is a directory</span>
+</span><span id="L-238"><a href="#L-238"><span class="linenos"> 238</span></a>        <span class="n">configure</span> <span class="o">=</span> <span class="n">_check_delete_dir</span><span class="p">(</span>
+</span><span id="L-239"><a href="#L-239"><span class="linenos"> 239</span></a>            <span class="n">phen_path</span><span class="p">,</span>
+</span><span id="L-240"><a href="#L-240"><span class="linenos"> 240</span></a>            <span class="sa">f</span><span class="s2">&quot;The phen directory already exists. Do you want to reinitialise? (yes/no): &quot;</span><span class="p">,</span>
+</span><span id="L-241"><a href="#L-241"><span class="linenos"> 241</span></a>        <span class="p">)</span>
+</span><span id="L-242"><a href="#L-242"><span class="linenos"> 242</span></a>    <span class="k">else</span><span class="p">:</span>
+</span><span id="L-243"><a href="#L-243"><span class="linenos"> 243</span></a>        <span class="n">configure</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-244"><a href="#L-244"><span class="linenos"> 244</span></a>
+</span><span id="L-245"><a href="#L-245"><span class="linenos"> 245</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">configure</span><span class="p">:</span>
+</span><span id="L-246"><a href="#L-246"><span class="linenos"> 246</span></a>        <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Exiting, phenotype not initiatised&quot;</span><span class="p">)</span>
+</span><span id="L-247"><a href="#L-247"><span class="linenos"> 247</span></a>        <span class="k">return</span>
+</span><span id="L-248"><a href="#L-248"><span class="linenos"> 248</span></a>
+</span><span id="L-249"><a href="#L-249"><span class="linenos"> 249</span></a>    <span class="c1"># Initialise repo from local or remote</span>
+</span><span id="L-250"><a href="#L-250"><span class="linenos"> 250</span></a>    <span class="n">repo</span><span class="p">:</span> <span class="n">Repo</span>
+</span><span id="L-251"><a href="#L-251"><span class="linenos"> 251</span></a>
+</span><span id="L-252"><a href="#L-252"><span class="linenos"> 252</span></a>    <span class="c1"># if remote then clone the repo otherwise init a local repo</span>
+</span><span id="L-253"><a href="#L-253"><span class="linenos"> 253</span></a>    <span class="k">if</span> <span class="n">remote_url</span> <span class="o">!=</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-254"><a href="#L-254"><span class="linenos"> 254</span></a>        <span class="c1"># add PAT token to the URL</span>
+</span><span id="L-255"><a href="#L-255"><span class="linenos"> 255</span></a>        <span class="n">git_url</span> <span class="o">=</span> <span class="n">_construct_git_url</span><span class="p">(</span><span class="n">remote_url</span><span class="p">)</span>
+</span><span id="L-256"><a href="#L-256"><span class="linenos"> 256</span></a>
+</span><span id="L-257"><a href="#L-257"><span class="linenos"> 257</span></a>        <span class="c1"># clone the repo</span>
+</span><span id="L-258"><a href="#L-258"><span class="linenos"> 258</span></a>        <span class="n">git_cmd</span> <span class="o">=</span> <span class="n">git</span><span class="o">.</span><span class="n">cmd</span><span class="o">.</span><span class="n">Git</span><span class="p">()</span>
+</span><span id="L-259"><a href="#L-259"><span class="linenos"> 259</span></a>        <span class="n">git_cmd</span><span class="o">.</span><span class="n">clone</span><span class="p">(</span><span class="n">git_url</span><span class="p">,</span> <span class="n">phen_path</span><span class="p">)</span>
+</span><span id="L-260"><a href="#L-260"><span class="linenos"> 260</span></a>
+</span><span id="L-261"><a href="#L-261"><span class="linenos"> 261</span></a>        <span class="c1"># open repo</span>
+</span><span id="L-262"><a href="#L-262"><span class="linenos"> 262</span></a>        <span class="n">repo</span> <span class="o">=</span> <span class="n">Repo</span><span class="p">(</span><span class="n">phen_path</span><span class="p">)</span>
+</span><span id="L-263"><a href="#L-263"><span class="linenos"> 263</span></a>        <span class="c1"># check if there are any commits (new repo has no commits)</span>
+</span><span id="L-264"><a href="#L-264"><span class="linenos"> 264</span></a>        <span class="k">if</span> <span class="p">(</span>
+</span><span id="L-265"><a href="#L-265"><span class="linenos"> 265</span></a>            <span class="nb">len</span><span class="p">(</span><span class="n">repo</span><span class="o">.</span><span class="n">branches</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">or</span> <span class="n">repo</span><span class="o">.</span><span class="n">head</span><span class="o">.</span><span class="n">is_detached</span>
+</span><span id="L-266"><a href="#L-266"><span class="linenos"> 266</span></a>        <span class="p">):</span>  <span class="c1"># Handle detached HEAD (e.g., after init)</span>
+</span><span id="L-267"><a href="#L-267"><span class="linenos"> 267</span></a>            <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">&quot;The phen repository has no commits yet.&quot;</span><span class="p">)</span>
+</span><span id="L-268"><a href="#L-268"><span class="linenos"> 268</span></a>            <span class="n">commit_count</span> <span class="o">=</span> <span class="mi">0</span>
+</span><span id="L-269"><a href="#L-269"><span class="linenos"> 269</span></a>        <span class="k">else</span><span class="p">:</span>
+</span><span id="L-270"><a href="#L-270"><span class="linenos"> 270</span></a>            <span class="c1"># Get the total number of commits in the default branch</span>
+</span><span id="L-271"><a href="#L-271"><span class="linenos"> 271</span></a>            <span class="n">commit_count</span> <span class="o">=</span> <span class="nb">sum</span><span class="p">(</span><span class="mi">1</span> <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="n">repo</span><span class="o">.</span><span class="n">iter_commits</span><span class="p">())</span>
+</span><span id="L-272"><a href="#L-272"><span class="linenos"> 272</span></a>            <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Repo has previous commits: </span><span class="si">{</span><span class="n">commit_count</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-273"><a href="#L-273"><span class="linenos"> 273</span></a>    <span class="k">else</span><span class="p">:</span>
+</span><span id="L-274"><a href="#L-274"><span class="linenos"> 274</span></a>        <span class="c1"># local repo, create the directories and init</span>
+</span><span id="L-275"><a href="#L-275"><span class="linenos"> 275</span></a>        <span class="n">phen_path</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">parents</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-276"><a href="#L-276"><span class="linenos"> 276</span></a>        <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Phen directory &#39;</span><span class="si">{</span><span class="n">phen_path</span><span class="si">}</span><span class="s2">&#39; has been created.&quot;</span><span class="p">)</span>
+</span><span id="L-277"><a href="#L-277"><span class="linenos"> 277</span></a>        <span class="n">repo</span> <span class="o">=</span> <span class="n">git</span><span class="o">.</span><span class="n">Repo</span><span class="o">.</span><span class="n">init</span><span class="p">(</span><span class="n">phen_path</span><span class="p">)</span>
+</span><span id="L-278"><a href="#L-278"><span class="linenos"> 278</span></a>        <span class="n">commit_count</span> <span class="o">=</span> <span class="mi">0</span>
+</span><span id="L-279"><a href="#L-279"><span class="linenos"> 279</span></a>
+</span><span id="L-280"><a href="#L-280"><span class="linenos"> 280</span></a>    <span class="n">phen_path</span> <span class="o">=</span> <span class="n">phen_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">()</span>
+</span><span id="L-281"><a href="#L-281"><span class="linenos"> 281</span></a>    <span class="c1"># initialise empty repos</span>
+</span><span id="L-282"><a href="#L-282"><span class="linenos"> 282</span></a>    <span class="k">if</span> <span class="n">commit_count</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
+</span><span id="L-283"><a href="#L-283"><span class="linenos"> 283</span></a>        <span class="c1"># create initial commit</span>
+</span><span id="L-284"><a href="#L-284"><span class="linenos"> 284</span></a>        <span class="n">initial_file_path</span> <span class="o">=</span> <span class="n">phen_path</span> <span class="o">/</span> <span class="s2">&quot;README.md&quot;</span>
+</span><span id="L-285"><a href="#L-285"><span class="linenos"> 285</span></a>        <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">initial_file_path</span><span class="p">,</span> <span class="s2">&quot;w&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
+</span><span id="L-286"><a href="#L-286"><span class="linenos"> 286</span></a>            <span class="n">file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span>
+</span><span id="L-287"><a href="#L-287"><span class="linenos"> 287</span></a>                <span class="s2">&quot;# Initial commit</span><span class="se">\n</span><span class="s2">This is the first commit in the phen repository.</span><span class="se">\n</span><span class="s2">&quot;</span>
+</span><span id="L-288"><a href="#L-288"><span class="linenos"> 288</span></a>            <span class="p">)</span>
+</span><span id="L-289"><a href="#L-289"><span class="linenos"> 289</span></a>        <span class="n">repo</span><span class="o">.</span><span class="n">index</span><span class="o">.</span><span class="n">add</span><span class="p">([</span><span class="n">initial_file_path</span><span class="p">])</span>
+</span><span id="L-290"><a href="#L-290"><span class="linenos"> 290</span></a>        <span class="n">repo</span><span class="o">.</span><span class="n">index</span><span class="o">.</span><span class="n">commit</span><span class="p">(</span><span class="s2">&quot;Initial commit&quot;</span><span class="p">)</span>
+</span><span id="L-291"><a href="#L-291"><span class="linenos"> 291</span></a>        <span class="n">commit_count</span> <span class="o">=</span> <span class="mi">1</span>
 </span><span id="L-292"><a href="#L-292"><span class="linenos"> 292</span></a>
-</span><span id="L-293"><a href="#L-293"><span class="linenos"> 293</span></a>
-</span><span id="L-294"><a href="#L-294"><span class="linenos"> 294</span></a><span class="k">def</span><span class="w"> </span><span class="nf">init</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">remote_url</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
-</span><span id="L-295"><a href="#L-295"><span class="linenos"> 295</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Initial phenotype directory as git repo with standard structure&quot;&quot;&quot;</span>
-</span><span id="L-296"><a href="#L-296"><span class="linenos"> 296</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Initialising Phenotype in directory: </span><span class="si">{</span><span class="n">phen_dir</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-297"><a href="#L-297"><span class="linenos"> 297</span></a>    <span class="n">phen_path</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">)</span>
-</span><span id="L-298"><a href="#L-298"><span class="linenos"> 298</span></a>
-</span><span id="L-299"><a href="#L-299"><span class="linenos"> 299</span></a>    <span class="c1"># check if directory already exists and ask user if they want to recreate it</span>
-</span><span id="L-300"><a href="#L-300"><span class="linenos"> 300</span></a>    <span class="k">if</span> <span class="p">(</span>
-</span><span id="L-301"><a href="#L-301"><span class="linenos"> 301</span></a>        <span class="n">phen_path</span><span class="o">.</span><span class="n">exists</span><span class="p">()</span> <span class="ow">and</span> <span class="n">phen_path</span><span class="o">.</span><span class="n">is_dir</span><span class="p">()</span>
-</span><span id="L-302"><a href="#L-302"><span class="linenos"> 302</span></a>    <span class="p">):</span>  <span class="c1"># Check if it exists and is a directory</span>
-</span><span id="L-303"><a href="#L-303"><span class="linenos"> 303</span></a>        <span class="n">configure</span> <span class="o">=</span> <span class="n">check_delete_dir</span><span class="p">(</span>
-</span><span id="L-304"><a href="#L-304"><span class="linenos"> 304</span></a>            <span class="n">phen_path</span><span class="p">,</span>
-</span><span id="L-305"><a href="#L-305"><span class="linenos"> 305</span></a>            <span class="sa">f</span><span class="s2">&quot;The phen directory already exists. Do you want to reinitialise? (yes/no): &quot;</span><span class="p">,</span>
-</span><span id="L-306"><a href="#L-306"><span class="linenos"> 306</span></a>        <span class="p">)</span>
-</span><span id="L-307"><a href="#L-307"><span class="linenos"> 307</span></a>    <span class="k">else</span><span class="p">:</span>
-</span><span id="L-308"><a href="#L-308"><span class="linenos"> 308</span></a>        <span class="n">configure</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-309"><a href="#L-309"><span class="linenos"> 309</span></a>
-</span><span id="L-310"><a href="#L-310"><span class="linenos"> 310</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">configure</span><span class="p">:</span>
-</span><span id="L-311"><a href="#L-311"><span class="linenos"> 311</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Exiting, phenotype not initiatised&quot;</span><span class="p">)</span>
-</span><span id="L-312"><a href="#L-312"><span class="linenos"> 312</span></a>        <span class="k">return</span>
-</span><span id="L-313"><a href="#L-313"><span class="linenos"> 313</span></a>
-</span><span id="L-314"><a href="#L-314"><span class="linenos"> 314</span></a>    <span class="c1"># Initialise repo from local or remote</span>
-</span><span id="L-315"><a href="#L-315"><span class="linenos"> 315</span></a>    <span class="n">repo</span><span class="p">:</span> <span class="n">Repo</span>
-</span><span id="L-316"><a href="#L-316"><span class="linenos"> 316</span></a>
-</span><span id="L-317"><a href="#L-317"><span class="linenos"> 317</span></a>    <span class="c1"># if remote then clone the repo otherwise init a local repo</span>
-</span><span id="L-318"><a href="#L-318"><span class="linenos"> 318</span></a>    <span class="k">if</span> <span class="n">remote_url</span> <span class="o">!=</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-319"><a href="#L-319"><span class="linenos"> 319</span></a>        <span class="c1"># add PAT token to the URL</span>
-</span><span id="L-320"><a href="#L-320"><span class="linenos"> 320</span></a>        <span class="n">git_url</span> <span class="o">=</span> <span class="n">construct_git_url</span><span class="p">(</span><span class="n">remote_url</span><span class="p">)</span>
-</span><span id="L-321"><a href="#L-321"><span class="linenos"> 321</span></a>
-</span><span id="L-322"><a href="#L-322"><span class="linenos"> 322</span></a>        <span class="c1"># clone the repo</span>
-</span><span id="L-323"><a href="#L-323"><span class="linenos"> 323</span></a>        <span class="n">git_cmd</span> <span class="o">=</span> <span class="n">git</span><span class="o">.</span><span class="n">cmd</span><span class="o">.</span><span class="n">Git</span><span class="p">()</span>
-</span><span id="L-324"><a href="#L-324"><span class="linenos"> 324</span></a>        <span class="n">git_cmd</span><span class="o">.</span><span class="n">clone</span><span class="p">(</span><span class="n">git_url</span><span class="p">,</span> <span class="n">phen_path</span><span class="p">)</span>
-</span><span id="L-325"><a href="#L-325"><span class="linenos"> 325</span></a>
-</span><span id="L-326"><a href="#L-326"><span class="linenos"> 326</span></a>        <span class="c1"># open repo</span>
-</span><span id="L-327"><a href="#L-327"><span class="linenos"> 327</span></a>        <span class="n">repo</span> <span class="o">=</span> <span class="n">Repo</span><span class="p">(</span><span class="n">phen_path</span><span class="p">)</span>
-</span><span id="L-328"><a href="#L-328"><span class="linenos"> 328</span></a>        <span class="c1"># check if there are any commits (new repo has no commits)</span>
-</span><span id="L-329"><a href="#L-329"><span class="linenos"> 329</span></a>        <span class="k">if</span> <span class="p">(</span>
-</span><span id="L-330"><a href="#L-330"><span class="linenos"> 330</span></a>            <span class="nb">len</span><span class="p">(</span><span class="n">repo</span><span class="o">.</span><span class="n">branches</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">or</span> <span class="n">repo</span><span class="o">.</span><span class="n">head</span><span class="o">.</span><span class="n">is_detached</span>
-</span><span id="L-331"><a href="#L-331"><span class="linenos"> 331</span></a>        <span class="p">):</span>  <span class="c1"># Handle detached HEAD (e.g., after init)</span>
-</span><span id="L-332"><a href="#L-332"><span class="linenos"> 332</span></a>            <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">&quot;The phen repository has no commits yet.&quot;</span><span class="p">)</span>
-</span><span id="L-333"><a href="#L-333"><span class="linenos"> 333</span></a>            <span class="n">commit_count</span> <span class="o">=</span> <span class="mi">0</span>
-</span><span id="L-334"><a href="#L-334"><span class="linenos"> 334</span></a>        <span class="k">else</span><span class="p">:</span>
-</span><span id="L-335"><a href="#L-335"><span class="linenos"> 335</span></a>            <span class="c1"># Get the total number of commits in the default branch</span>
-</span><span id="L-336"><a href="#L-336"><span class="linenos"> 336</span></a>            <span class="n">commit_count</span> <span class="o">=</span> <span class="nb">sum</span><span class="p">(</span><span class="mi">1</span> <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="n">repo</span><span class="o">.</span><span class="n">iter_commits</span><span class="p">())</span>
-</span><span id="L-337"><a href="#L-337"><span class="linenos"> 337</span></a>            <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Repo has previous commits: </span><span class="si">{</span><span class="n">commit_count</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-338"><a href="#L-338"><span class="linenos"> 338</span></a>    <span class="k">else</span><span class="p">:</span>
-</span><span id="L-339"><a href="#L-339"><span class="linenos"> 339</span></a>        <span class="c1"># local repo, create the directories and init</span>
-</span><span id="L-340"><a href="#L-340"><span class="linenos"> 340</span></a>        <span class="n">phen_path</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">parents</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-341"><a href="#L-341"><span class="linenos"> 341</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Phen directory &#39;</span><span class="si">{</span><span class="n">phen_path</span><span class="si">}</span><span class="s2">&#39; has been created.&quot;</span><span class="p">)</span>
-</span><span id="L-342"><a href="#L-342"><span class="linenos"> 342</span></a>        <span class="n">repo</span> <span class="o">=</span> <span class="n">git</span><span class="o">.</span><span class="n">Repo</span><span class="o">.</span><span class="n">init</span><span class="p">(</span><span class="n">phen_path</span><span class="p">)</span>
-</span><span id="L-343"><a href="#L-343"><span class="linenos"> 343</span></a>        <span class="n">commit_count</span> <span class="o">=</span> <span class="mi">0</span>
-</span><span id="L-344"><a href="#L-344"><span class="linenos"> 344</span></a>
-</span><span id="L-345"><a href="#L-345"><span class="linenos"> 345</span></a>    <span class="n">phen_path</span> <span class="o">=</span> <span class="n">phen_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">()</span>
-</span><span id="L-346"><a href="#L-346"><span class="linenos"> 346</span></a>    <span class="c1"># initialise empty repos</span>
-</span><span id="L-347"><a href="#L-347"><span class="linenos"> 347</span></a>    <span class="k">if</span> <span class="n">commit_count</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
-</span><span id="L-348"><a href="#L-348"><span class="linenos"> 348</span></a>        <span class="c1"># create initial commit</span>
-</span><span id="L-349"><a href="#L-349"><span class="linenos"> 349</span></a>        <span class="n">initial_file_path</span> <span class="o">=</span> <span class="n">phen_path</span> <span class="o">/</span> <span class="s2">&quot;README.md&quot;</span>
-</span><span id="L-350"><a href="#L-350"><span class="linenos"> 350</span></a>        <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">initial_file_path</span><span class="p">,</span> <span class="s2">&quot;w&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
-</span><span id="L-351"><a href="#L-351"><span class="linenos"> 351</span></a>            <span class="n">file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span>
-</span><span id="L-352"><a href="#L-352"><span class="linenos"> 352</span></a>                <span class="s2">&quot;# Initial commit</span><span class="se">\n</span><span class="s2">This is the first commit in the phen repository.</span><span class="se">\n</span><span class="s2">&quot;</span>
-</span><span id="L-353"><a href="#L-353"><span class="linenos"> 353</span></a>            <span class="p">)</span>
-</span><span id="L-354"><a href="#L-354"><span class="linenos"> 354</span></a>        <span class="n">repo</span><span class="o">.</span><span class="n">index</span><span class="o">.</span><span class="n">add</span><span class="p">([</span><span class="n">initial_file_path</span><span class="p">])</span>
-</span><span id="L-355"><a href="#L-355"><span class="linenos"> 355</span></a>        <span class="n">repo</span><span class="o">.</span><span class="n">index</span><span class="o">.</span><span class="n">commit</span><span class="p">(</span><span class="s2">&quot;Initial commit&quot;</span><span class="p">)</span>
-</span><span id="L-356"><a href="#L-356"><span class="linenos"> 356</span></a>        <span class="n">commit_count</span> <span class="o">=</span> <span class="mi">1</span>
-</span><span id="L-357"><a href="#L-357"><span class="linenos"> 357</span></a>
-</span><span id="L-358"><a href="#L-358"><span class="linenos"> 358</span></a>    <span class="c1"># Checkout the phens default branch, creating it if it does not exist</span>
-</span><span id="L-359"><a href="#L-359"><span class="linenos"> 359</span></a>    <span class="k">if</span> <span class="n">DEFAULT_GIT_BRANCH</span> <span class="ow">in</span> <span class="n">repo</span><span class="o">.</span><span class="n">branches</span><span class="p">:</span>
-</span><span id="L-360"><a href="#L-360"><span class="linenos"> 360</span></a>        <span class="n">main_branch</span> <span class="o">=</span> <span class="n">repo</span><span class="o">.</span><span class="n">heads</span><span class="p">[</span><span class="n">DEFAULT_GIT_BRANCH</span><span class="p">]</span>
-</span><span id="L-361"><a href="#L-361"><span class="linenos"> 361</span></a>        <span class="n">main_branch</span><span class="o">.</span><span class="n">checkout</span><span class="p">()</span>
-</span><span id="L-362"><a href="#L-362"><span class="linenos"> 362</span></a>    <span class="k">else</span><span class="p">:</span>
-</span><span id="L-363"><a href="#L-363"><span class="linenos"> 363</span></a>        <span class="n">main_branch</span> <span class="o">=</span> <span class="n">repo</span><span class="o">.</span><span class="n">create_head</span><span class="p">(</span><span class="n">DEFAULT_GIT_BRANCH</span><span class="p">)</span>
-</span><span id="L-364"><a href="#L-364"><span class="linenos"> 364</span></a>        <span class="n">main_branch</span><span class="o">.</span><span class="n">checkout</span><span class="p">()</span>
-</span><span id="L-365"><a href="#L-365"><span class="linenos"> 365</span></a>
-</span><span id="L-366"><a href="#L-366"><span class="linenos"> 366</span></a>    <span class="c1"># if the phen path does not contain the config file then initialise the phen type</span>
-</span><span id="L-367"><a href="#L-367"><span class="linenos"> 367</span></a>    <span class="n">config_path</span> <span class="o">=</span> <span class="n">phen_path</span> <span class="o">/</span> <span class="n">CONFIG_FILE</span>
-</span><span id="L-368"><a href="#L-368"><span class="linenos"> 368</span></a>    <span class="k">if</span> <span class="n">config_path</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
-</span><span id="L-369"><a href="#L-369"><span class="linenos"> 369</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Phenotype configuration files already exist&quot;</span><span class="p">)</span>
-</span><span id="L-370"><a href="#L-370"><span class="linenos"> 370</span></a>        <span class="k">return</span>
-</span><span id="L-371"><a href="#L-371"><span class="linenos"> 371</span></a>
-</span><span id="L-372"><a href="#L-372"><span class="linenos"> 372</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Creating phen directory structure and config files&quot;</span><span class="p">)</span>
-</span><span id="L-373"><a href="#L-373"><span class="linenos"> 373</span></a>    <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">DEFAULT_PHEN_DIR_LIST</span><span class="p">:</span>
-</span><span id="L-374"><a href="#L-374"><span class="linenos"> 374</span></a>        <span class="n">create_empty_git_dir</span><span class="p">(</span><span class="n">phen_path</span> <span class="o">/</span> <span class="n">d</span><span class="p">)</span>
-</span><span id="L-375"><a href="#L-375"><span class="linenos"> 375</span></a>
-</span><span id="L-376"><a href="#L-376"><span class="linenos"> 376</span></a>    <span class="c1"># create empty phen config file</span>
-</span><span id="L-377"><a href="#L-377"><span class="linenos"> 377</span></a>    <span class="n">config</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-378"><a href="#L-378"><span class="linenos"> 378</span></a>        <span class="s2">&quot;phenotype&quot;</span><span class="p">:</span> <span class="p">{</span>
-</span><span id="L-379"><a href="#L-379"><span class="linenos"> 379</span></a>            <span class="s2">&quot;version&quot;</span><span class="p">:</span> <span class="s2">&quot;0.0.0&quot;</span><span class="p">,</span>
-</span><span id="L-380"><a href="#L-380"><span class="linenos"> 380</span></a>            <span class="s2">&quot;omop&quot;</span><span class="p">:</span> <span class="p">{</span>
-</span><span id="L-381"><a href="#L-381"><span class="linenos"> 381</span></a>                <span class="s2">&quot;vocabulary_id&quot;</span><span class="p">:</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
-</span><span id="L-382"><a href="#L-382"><span class="linenos"> 382</span></a>                <span class="s2">&quot;vocabulary_name&quot;</span><span class="p">:</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
-</span><span id="L-383"><a href="#L-383"><span class="linenos"> 383</span></a>                <span class="s2">&quot;vocabulary_reference&quot;</span><span class="p">:</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
-</span><span id="L-384"><a href="#L-384"><span class="linenos"> 384</span></a>            <span class="p">},</span>
-</span><span id="L-385"><a href="#L-385"><span class="linenos"> 385</span></a>            <span class="s2">&quot;translate&quot;</span><span class="p">:</span> <span class="p">[],</span>
-</span><span id="L-386"><a href="#L-386"><span class="linenos"> 386</span></a>            <span class="s2">&quot;concept_sets&quot;</span><span class="p">:</span> <span class="p">[],</span>
-</span><span id="L-387"><a href="#L-387"><span class="linenos"> 387</span></a>        <span class="p">}</span>
-</span><span id="L-388"><a href="#L-388"><span class="linenos"> 388</span></a>    <span class="p">}</span>
+</span><span id="L-293"><a href="#L-293"><span class="linenos"> 293</span></a>    <span class="c1"># Checkout the phens default branch, creating it if it does not exist</span>
+</span><span id="L-294"><a href="#L-294"><span class="linenos"> 294</span></a>    <span class="k">if</span> <span class="n">DEFAULT_GIT_BRANCH</span> <span class="ow">in</span> <span class="n">repo</span><span class="o">.</span><span class="n">branches</span><span class="p">:</span>
+</span><span id="L-295"><a href="#L-295"><span class="linenos"> 295</span></a>        <span class="n">main_branch</span> <span class="o">=</span> <span class="n">repo</span><span class="o">.</span><span class="n">heads</span><span class="p">[</span><span class="n">DEFAULT_GIT_BRANCH</span><span class="p">]</span>
+</span><span id="L-296"><a href="#L-296"><span class="linenos"> 296</span></a>        <span class="n">main_branch</span><span class="o">.</span><span class="n">checkout</span><span class="p">()</span>
+</span><span id="L-297"><a href="#L-297"><span class="linenos"> 297</span></a>    <span class="k">else</span><span class="p">:</span>
+</span><span id="L-298"><a href="#L-298"><span class="linenos"> 298</span></a>        <span class="n">main_branch</span> <span class="o">=</span> <span class="n">repo</span><span class="o">.</span><span class="n">create_head</span><span class="p">(</span><span class="n">DEFAULT_GIT_BRANCH</span><span class="p">)</span>
+</span><span id="L-299"><a href="#L-299"><span class="linenos"> 299</span></a>        <span class="n">main_branch</span><span class="o">.</span><span class="n">checkout</span><span class="p">()</span>
+</span><span id="L-300"><a href="#L-300"><span class="linenos"> 300</span></a>
+</span><span id="L-301"><a href="#L-301"><span class="linenos"> 301</span></a>    <span class="c1"># if the phen path does not contain the config file then initialise the phen type</span>
+</span><span id="L-302"><a href="#L-302"><span class="linenos"> 302</span></a>    <span class="n">config_path</span> <span class="o">=</span> <span class="n">phen_path</span> <span class="o">/</span> <span class="n">CONFIG_FILE</span>
+</span><span id="L-303"><a href="#L-303"><span class="linenos"> 303</span></a>    <span class="k">if</span> <span class="n">config_path</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
+</span><span id="L-304"><a href="#L-304"><span class="linenos"> 304</span></a>        <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Phenotype configuration files already exist&quot;</span><span class="p">)</span>
+</span><span id="L-305"><a href="#L-305"><span class="linenos"> 305</span></a>        <span class="k">return</span>
+</span><span id="L-306"><a href="#L-306"><span class="linenos"> 306</span></a>
+</span><span id="L-307"><a href="#L-307"><span class="linenos"> 307</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Creating phen directory structure and config files&quot;</span><span class="p">)</span>
+</span><span id="L-308"><a href="#L-308"><span class="linenos"> 308</span></a>    <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">DEFAULT_PHEN_DIR_LIST</span><span class="p">:</span>
+</span><span id="L-309"><a href="#L-309"><span class="linenos"> 309</span></a>        <span class="n">_create_empty_git_dir</span><span class="p">(</span><span class="n">phen_path</span> <span class="o">/</span> <span class="n">d</span><span class="p">)</span>
+</span><span id="L-310"><a href="#L-310"><span class="linenos"> 310</span></a>
+</span><span id="L-311"><a href="#L-311"><span class="linenos"> 311</span></a>    <span class="c1"># create empty phen config file</span>
+</span><span id="L-312"><a href="#L-312"><span class="linenos"> 312</span></a>    <span class="n">config</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-313"><a href="#L-313"><span class="linenos"> 313</span></a>        <span class="s2">&quot;phenotype&quot;</span><span class="p">:</span> <span class="p">{</span>
+</span><span id="L-314"><a href="#L-314"><span class="linenos"> 314</span></a>            <span class="s2">&quot;version&quot;</span><span class="p">:</span> <span class="s2">&quot;0.0.0&quot;</span><span class="p">,</span>
+</span><span id="L-315"><a href="#L-315"><span class="linenos"> 315</span></a>            <span class="s2">&quot;omop&quot;</span><span class="p">:</span> <span class="p">{</span>
+</span><span id="L-316"><a href="#L-316"><span class="linenos"> 316</span></a>                <span class="s2">&quot;vocabulary_id&quot;</span><span class="p">:</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
+</span><span id="L-317"><a href="#L-317"><span class="linenos"> 317</span></a>                <span class="s2">&quot;vocabulary_name&quot;</span><span class="p">:</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
+</span><span id="L-318"><a href="#L-318"><span class="linenos"> 318</span></a>                <span class="s2">&quot;vocabulary_reference&quot;</span><span class="p">:</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
+</span><span id="L-319"><a href="#L-319"><span class="linenos"> 319</span></a>            <span class="p">},</span>
+</span><span id="L-320"><a href="#L-320"><span class="linenos"> 320</span></a>            <span class="s2">&quot;translate&quot;</span><span class="p">:</span> <span class="p">[],</span>
+</span><span id="L-321"><a href="#L-321"><span class="linenos"> 321</span></a>            <span class="s2">&quot;concept_sets&quot;</span><span class="p">:</span> <span class="p">[],</span>
+</span><span id="L-322"><a href="#L-322"><span class="linenos"> 322</span></a>        <span class="p">}</span>
+</span><span id="L-323"><a href="#L-323"><span class="linenos"> 323</span></a>    <span class="p">}</span>
+</span><span id="L-324"><a href="#L-324"><span class="linenos"> 324</span></a>
+</span><span id="L-325"><a href="#L-325"><span class="linenos"> 325</span></a>    <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">phen_path</span> <span class="o">/</span> <span class="n">CONFIG_FILE</span><span class="p">,</span> <span class="s2">&quot;w&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
+</span><span id="L-326"><a href="#L-326"><span class="linenos"> 326</span></a>        <span class="n">yaml</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span>
+</span><span id="L-327"><a href="#L-327"><span class="linenos"> 327</span></a>            <span class="n">config</span><span class="p">,</span>
+</span><span id="L-328"><a href="#L-328"><span class="linenos"> 328</span></a>            <span class="n">file</span><span class="p">,</span>
+</span><span id="L-329"><a href="#L-329"><span class="linenos"> 329</span></a>            <span class="n">Dumper</span><span class="o">=</span><span class="n">util</span><span class="o">.</span><span class="n">QuotedDumper</span><span class="p">,</span>
+</span><span id="L-330"><a href="#L-330"><span class="linenos"> 330</span></a>            <span class="n">default_flow_style</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="L-331"><a href="#L-331"><span class="linenos"> 331</span></a>            <span class="n">sort_keys</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="L-332"><a href="#L-332"><span class="linenos"> 332</span></a>            <span class="n">default_style</span><span class="o">=</span><span class="s1">&#39;&quot;&#39;</span><span class="p">,</span>
+</span><span id="L-333"><a href="#L-333"><span class="linenos"> 333</span></a>        <span class="p">)</span>
+</span><span id="L-334"><a href="#L-334"><span class="linenos"> 334</span></a>
+</span><span id="L-335"><a href="#L-335"><span class="linenos"> 335</span></a>    <span class="c1"># add git ignore</span>
+</span><span id="L-336"><a href="#L-336"><span class="linenos"> 336</span></a>    <span class="n">ignore_content</span> <span class="o">=</span> <span class="s2">&quot;&quot;&quot;# Ignore SQLite database files</span>
+</span><span id="L-337"><a href="#L-337"><span class="linenos"> 337</span></a><span class="s2">*.db</span>
+</span><span id="L-338"><a href="#L-338"><span class="linenos"> 338</span></a><span class="s2">*.sqlite3</span>
+</span><span id="L-339"><a href="#L-339"><span class="linenos"> 339</span></a><span class="s2"> </span>
+</span><span id="L-340"><a href="#L-340"><span class="linenos"> 340</span></a><span class="s2"># Ignore SQLite journal and metadata files</span>
+</span><span id="L-341"><a href="#L-341"><span class="linenos"> 341</span></a><span class="s2">*.db-journal</span>
+</span><span id="L-342"><a href="#L-342"><span class="linenos"> 342</span></a><span class="s2">*.sqlite3-journal</span>
+</span><span id="L-343"><a href="#L-343"><span class="linenos"> 343</span></a>
+</span><span id="L-344"><a href="#L-344"><span class="linenos"> 344</span></a><span class="s2"># python</span>
+</span><span id="L-345"><a href="#L-345"><span class="linenos"> 345</span></a><span class="s2">.ipynb_checkpoints</span>
+</span><span id="L-346"><a href="#L-346"><span class="linenos"> 346</span></a><span class="s2"> &quot;&quot;&quot;</span>
+</span><span id="L-347"><a href="#L-347"><span class="linenos"> 347</span></a>    <span class="n">ignore_path</span> <span class="o">=</span> <span class="n">phen_path</span> <span class="o">/</span> <span class="s2">&quot;.gitignore&quot;</span>
+</span><span id="L-348"><a href="#L-348"><span class="linenos"> 348</span></a>    <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">ignore_path</span><span class="p">,</span> <span class="s2">&quot;w&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
+</span><span id="L-349"><a href="#L-349"><span class="linenos"> 349</span></a>        <span class="n">file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">ignore_content</span><span class="p">)</span>
+</span><span id="L-350"><a href="#L-350"><span class="linenos"> 350</span></a>
+</span><span id="L-351"><a href="#L-351"><span class="linenos"> 351</span></a>    <span class="c1"># add to git repo and commit</span>
+</span><span id="L-352"><a href="#L-352"><span class="linenos"> 352</span></a>    <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">DEFAULT_PHEN_DIR_LIST</span><span class="p">:</span>
+</span><span id="L-353"><a href="#L-353"><span class="linenos"> 353</span></a>        <span class="n">repo</span><span class="o">.</span><span class="n">git</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">phen_path</span> <span class="o">/</span> <span class="n">d</span><span class="p">)</span>
+</span><span id="L-354"><a href="#L-354"><span class="linenos"> 354</span></a>    <span class="n">repo</span><span class="o">.</span><span class="n">git</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="nb">all</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-355"><a href="#L-355"><span class="linenos"> 355</span></a>    <span class="n">repo</span><span class="o">.</span><span class="n">index</span><span class="o">.</span><span class="n">commit</span><span class="p">(</span><span class="s2">&quot;initialised the phen git repo.&quot;</span><span class="p">)</span>
+</span><span id="L-356"><a href="#L-356"><span class="linenos"> 356</span></a>
+</span><span id="L-357"><a href="#L-357"><span class="linenos"> 357</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Phenotype initialised successfully&quot;</span><span class="p">)</span>
+</span><span id="L-358"><a href="#L-358"><span class="linenos"> 358</span></a>
+</span><span id="L-359"><a href="#L-359"><span class="linenos"> 359</span></a>
+</span><span id="L-360"><a href="#L-360"><span class="linenos"> 360</span></a><span class="k">def</span><span class="w"> </span><span class="nf">fork</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">upstream_url</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">upstream_version</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">new_origin_url</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
+</span><span id="L-361"><a href="#L-361"><span class="linenos"> 361</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Forks an upstream phenotype in a remote repo at a specific version to a local director, and optionally sets to a new remote origin&quot;</span>
+</span><span id="L-362"><a href="#L-362"><span class="linenos"> 362</span></a>
+</span><span id="L-363"><a href="#L-363"><span class="linenos"> 363</span></a><span class="sd">    Args:</span>
+</span><span id="L-364"><a href="#L-364"><span class="linenos"> 364</span></a><span class="sd">        phen_dir (str): local directory path where the upstream repo is to be cloned</span>
+</span><span id="L-365"><a href="#L-365"><span class="linenos"> 365</span></a><span class="sd">        upstream_url (str): url to the upstream repo</span>
+</span><span id="L-366"><a href="#L-366"><span class="linenos"> 366</span></a><span class="sd">        upstream_version (str): version in the upstream repo to clone</span>
+</span><span id="L-367"><a href="#L-367"><span class="linenos"> 367</span></a><span class="sd">        new_origin_url (str, optional): url of the remote repo to set as the new origin. Defaults to None.</span>
+</span><span id="L-368"><a href="#L-368"><span class="linenos"> 368</span></a>
+</span><span id="L-369"><a href="#L-369"><span class="linenos"> 369</span></a><span class="sd">    Raises:</span>
+</span><span id="L-370"><a href="#L-370"><span class="linenos"> 370</span></a><span class="sd">        ValueError: if the specified version is not in the upstream repo</span>
+</span><span id="L-371"><a href="#L-371"><span class="linenos"> 371</span></a><span class="sd">        ValueError: if the upstream repo is not a valid phenotype repo</span>
+</span><span id="L-372"><a href="#L-372"><span class="linenos"> 372</span></a><span class="sd">        ValueError: if there&#39;s any other problems with Git</span>
+</span><span id="L-373"><a href="#L-373"><span class="linenos"> 373</span></a><span class="sd">    &quot;&quot;&quot;</span>
+</span><span id="L-374"><a href="#L-374"><span class="linenos"> 374</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span>
+</span><span id="L-375"><a href="#L-375"><span class="linenos"> 375</span></a>        <span class="sa">f</span><span class="s2">&quot;Forking upstream repo </span><span class="si">{</span><span class="n">upstream_url</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">upstream_version</span><span class="si">}</span><span class="s2"> into directory: </span><span class="si">{</span><span class="n">phen_dir</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-376"><a href="#L-376"><span class="linenos"> 376</span></a>    <span class="p">)</span>
+</span><span id="L-377"><a href="#L-377"><span class="linenos"> 377</span></a>
+</span><span id="L-378"><a href="#L-378"><span class="linenos"> 378</span></a>    <span class="n">phen_path</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">)</span>
+</span><span id="L-379"><a href="#L-379"><span class="linenos"> 379</span></a>    <span class="c1"># check if directory already exists and ask user if they want to recreate it</span>
+</span><span id="L-380"><a href="#L-380"><span class="linenos"> 380</span></a>    <span class="k">if</span> <span class="p">(</span>
+</span><span id="L-381"><a href="#L-381"><span class="linenos"> 381</span></a>        <span class="n">phen_path</span><span class="o">.</span><span class="n">exists</span><span class="p">()</span> <span class="ow">and</span> <span class="n">phen_path</span><span class="o">.</span><span class="n">is_dir</span><span class="p">()</span>
+</span><span id="L-382"><a href="#L-382"><span class="linenos"> 382</span></a>    <span class="p">):</span>  <span class="c1"># Check if it exists and is a directory</span>
+</span><span id="L-383"><a href="#L-383"><span class="linenos"> 383</span></a>        <span class="n">configure</span> <span class="o">=</span> <span class="n">_check_delete_dir</span><span class="p">(</span>
+</span><span id="L-384"><a href="#L-384"><span class="linenos"> 384</span></a>            <span class="n">phen_path</span><span class="p">,</span>
+</span><span id="L-385"><a href="#L-385"><span class="linenos"> 385</span></a>            <span class="sa">f</span><span class="s2">&quot;The phen directory already exists. Do you want to reinitialise? (yes/no): &quot;</span><span class="p">,</span>
+</span><span id="L-386"><a href="#L-386"><span class="linenos"> 386</span></a>        <span class="p">)</span>
+</span><span id="L-387"><a href="#L-387"><span class="linenos"> 387</span></a>    <span class="k">else</span><span class="p">:</span>
+</span><span id="L-388"><a href="#L-388"><span class="linenos"> 388</span></a>        <span class="n">configure</span> <span class="o">=</span> <span class="kc">True</span>
 </span><span id="L-389"><a href="#L-389"><span class="linenos"> 389</span></a>
-</span><span id="L-390"><a href="#L-390"><span class="linenos"> 390</span></a>    <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">phen_path</span> <span class="o">/</span> <span class="n">CONFIG_FILE</span><span class="p">,</span> <span class="s2">&quot;w&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
-</span><span id="L-391"><a href="#L-391"><span class="linenos"> 391</span></a>        <span class="n">yaml</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span>
-</span><span id="L-392"><a href="#L-392"><span class="linenos"> 392</span></a>            <span class="n">config</span><span class="p">,</span>
-</span><span id="L-393"><a href="#L-393"><span class="linenos"> 393</span></a>            <span class="n">file</span><span class="p">,</span>
-</span><span id="L-394"><a href="#L-394"><span class="linenos"> 394</span></a>            <span class="n">Dumper</span><span class="o">=</span><span class="n">util</span><span class="o">.</span><span class="n">QuotedDumper</span><span class="p">,</span>
-</span><span id="L-395"><a href="#L-395"><span class="linenos"> 395</span></a>            <span class="n">default_flow_style</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-</span><span id="L-396"><a href="#L-396"><span class="linenos"> 396</span></a>            <span class="n">sort_keys</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-</span><span id="L-397"><a href="#L-397"><span class="linenos"> 397</span></a>            <span class="n">default_style</span><span class="o">=</span><span class="s1">&#39;&quot;&#39;</span><span class="p">,</span>
-</span><span id="L-398"><a href="#L-398"><span class="linenos"> 398</span></a>        <span class="p">)</span>
-</span><span id="L-399"><a href="#L-399"><span class="linenos"> 399</span></a>
-</span><span id="L-400"><a href="#L-400"><span class="linenos"> 400</span></a>    <span class="c1"># add git ignore</span>
-</span><span id="L-401"><a href="#L-401"><span class="linenos"> 401</span></a>    <span class="n">ignore_content</span> <span class="o">=</span> <span class="s2">&quot;&quot;&quot;# Ignore SQLite database files</span>
-</span><span id="L-402"><a href="#L-402"><span class="linenos"> 402</span></a><span class="s2">*.db</span>
-</span><span id="L-403"><a href="#L-403"><span class="linenos"> 403</span></a><span class="s2">*.sqlite3</span>
-</span><span id="L-404"><a href="#L-404"><span class="linenos"> 404</span></a><span class="s2"> </span>
-</span><span id="L-405"><a href="#L-405"><span class="linenos"> 405</span></a><span class="s2"># Ignore SQLite journal and metadata files</span>
-</span><span id="L-406"><a href="#L-406"><span class="linenos"> 406</span></a><span class="s2">*.db-journal</span>
-</span><span id="L-407"><a href="#L-407"><span class="linenos"> 407</span></a><span class="s2">*.sqlite3-journal</span>
+</span><span id="L-390"><a href="#L-390"><span class="linenos"> 390</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">configure</span><span class="p">:</span>
+</span><span id="L-391"><a href="#L-391"><span class="linenos"> 391</span></a>        <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Exiting, phenotype not initiatised&quot;</span><span class="p">)</span>
+</span><span id="L-392"><a href="#L-392"><span class="linenos"> 392</span></a>        <span class="k">return</span>
+</span><span id="L-393"><a href="#L-393"><span class="linenos"> 393</span></a>
+</span><span id="L-394"><a href="#L-394"><span class="linenos"> 394</span></a>    <span class="k">try</span><span class="p">:</span>
+</span><span id="L-395"><a href="#L-395"><span class="linenos"> 395</span></a>        <span class="c1"># Clone repo</span>
+</span><span id="L-396"><a href="#L-396"><span class="linenos"> 396</span></a>        <span class="n">git_url</span> <span class="o">=</span> <span class="n">_construct_git_url</span><span class="p">(</span><span class="n">upstream_url</span><span class="p">)</span>
+</span><span id="L-397"><a href="#L-397"><span class="linenos"> 397</span></a>        <span class="n">repo</span> <span class="o">=</span> <span class="n">git</span><span class="o">.</span><span class="n">Repo</span><span class="o">.</span><span class="n">clone_from</span><span class="p">(</span><span class="n">git_url</span><span class="p">,</span> <span class="n">phen_path</span><span class="p">)</span>
+</span><span id="L-398"><a href="#L-398"><span class="linenos"> 398</span></a>
+</span><span id="L-399"><a href="#L-399"><span class="linenos"> 399</span></a>        <span class="c1"># Fetch all branches and tags</span>
+</span><span id="L-400"><a href="#L-400"><span class="linenos"> 400</span></a>        <span class="n">repo</span><span class="o">.</span><span class="n">remotes</span><span class="o">.</span><span class="n">origin</span><span class="o">.</span><span class="n">fetch</span><span class="p">()</span>
+</span><span id="L-401"><a href="#L-401"><span class="linenos"> 401</span></a>
+</span><span id="L-402"><a href="#L-402"><span class="linenos"> 402</span></a>        <span class="c1"># Check if the version exists</span>
+</span><span id="L-403"><a href="#L-403"><span class="linenos"> 403</span></a>        <span class="n">available_refs</span> <span class="o">=</span> <span class="p">[</span><span class="n">ref</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;/&quot;</span><span class="p">)[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="k">for</span> <span class="n">ref</span> <span class="ow">in</span> <span class="n">repo</span><span class="o">.</span><span class="n">references</span><span class="p">]</span>
+</span><span id="L-404"><a href="#L-404"><span class="linenos"> 404</span></a>        <span class="k">if</span> <span class="n">upstream_version</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">available_refs</span><span class="p">:</span>
+</span><span id="L-405"><a href="#L-405"><span class="linenos"> 405</span></a>            <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
+</span><span id="L-406"><a href="#L-406"><span class="linenos"> 406</span></a>                <span class="sa">f</span><span class="s2">&quot;Version &#39;</span><span class="si">{</span><span class="n">upstream_version</span><span class="si">}</span><span class="s2">&#39; not found in the repository: </span><span class="si">{</span><span class="n">upstream_url</span><span class="si">}</span><span class="s2">.&quot;</span>
+</span><span id="L-407"><a href="#L-407"><span class="linenos"> 407</span></a>            <span class="p">)</span>
 </span><span id="L-408"><a href="#L-408"><span class="linenos"> 408</span></a>
-</span><span id="L-409"><a href="#L-409"><span class="linenos"> 409</span></a><span class="s2"># python</span>
-</span><span id="L-410"><a href="#L-410"><span class="linenos"> 410</span></a><span class="s2">.ipynb_checkpoints</span>
-</span><span id="L-411"><a href="#L-411"><span class="linenos"> 411</span></a><span class="s2"> &quot;&quot;&quot;</span>
-</span><span id="L-412"><a href="#L-412"><span class="linenos"> 412</span></a>    <span class="n">ignore_path</span> <span class="o">=</span> <span class="n">phen_path</span> <span class="o">/</span> <span class="s2">&quot;.gitignore&quot;</span>
-</span><span id="L-413"><a href="#L-413"><span class="linenos"> 413</span></a>    <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">ignore_path</span><span class="p">,</span> <span class="s2">&quot;w&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
-</span><span id="L-414"><a href="#L-414"><span class="linenos"> 414</span></a>        <span class="n">file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">ignore_content</span><span class="p">)</span>
-</span><span id="L-415"><a href="#L-415"><span class="linenos"> 415</span></a>
-</span><span id="L-416"><a href="#L-416"><span class="linenos"> 416</span></a>    <span class="c1"># add to git repo and commit</span>
-</span><span id="L-417"><a href="#L-417"><span class="linenos"> 417</span></a>    <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">DEFAULT_PHEN_DIR_LIST</span><span class="p">:</span>
-</span><span id="L-418"><a href="#L-418"><span class="linenos"> 418</span></a>        <span class="n">repo</span><span class="o">.</span><span class="n">git</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">phen_path</span> <span class="o">/</span> <span class="n">d</span><span class="p">)</span>
-</span><span id="L-419"><a href="#L-419"><span class="linenos"> 419</span></a>    <span class="n">repo</span><span class="o">.</span><span class="n">git</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="nb">all</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-420"><a href="#L-420"><span class="linenos"> 420</span></a>    <span class="n">repo</span><span class="o">.</span><span class="n">index</span><span class="o">.</span><span class="n">commit</span><span class="p">(</span><span class="s2">&quot;initialised the phen git repo.&quot;</span><span class="p">)</span>
-</span><span id="L-421"><a href="#L-421"><span class="linenos"> 421</span></a>
-</span><span id="L-422"><a href="#L-422"><span class="linenos"> 422</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Phenotype initialised successfully&quot;</span><span class="p">)</span>
+</span><span id="L-409"><a href="#L-409"><span class="linenos"> 409</span></a>        <span class="c1"># Checkout the specified version</span>
+</span><span id="L-410"><a href="#L-410"><span class="linenos"> 410</span></a>        <span class="n">repo</span><span class="o">.</span><span class="n">git</span><span class="o">.</span><span class="n">checkout</span><span class="p">(</span><span class="n">upstream_version</span><span class="p">)</span>
+</span><span id="L-411"><a href="#L-411"><span class="linenos"> 411</span></a>        <span class="n">main_branch</span> <span class="o">=</span> <span class="n">repo</span><span class="o">.</span><span class="n">heads</span><span class="p">[</span><span class="n">DEFAULT_GIT_BRANCH</span><span class="p">]</span>
+</span><span id="L-412"><a href="#L-412"><span class="linenos"> 412</span></a>        <span class="n">main_branch</span><span class="o">.</span><span class="n">checkout</span><span class="p">()</span>
+</span><span id="L-413"><a href="#L-413"><span class="linenos"> 413</span></a>
+</span><span id="L-414"><a href="#L-414"><span class="linenos"> 414</span></a>        <span class="c1"># Check if &#39;config.yml&#39; exists in the root directory</span>
+</span><span id="L-415"><a href="#L-415"><span class="linenos"> 415</span></a>        <span class="n">config_path</span> <span class="o">=</span> <span class="n">phen_path</span> <span class="o">/</span> <span class="s2">&quot;config.yml&quot;</span>
+</span><span id="L-416"><a href="#L-416"><span class="linenos"> 416</span></a>        <span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isfile</span><span class="p">(</span><span class="n">config_path</span><span class="p">):</span>
+</span><span id="L-417"><a href="#L-417"><span class="linenos"> 417</span></a>            <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
+</span><span id="L-418"><a href="#L-418"><span class="linenos"> 418</span></a>                <span class="sa">f</span><span class="s2">&quot;The forked repository is not a valid ACMC repo because &#39;config.yml&#39; is missing in the root directory.&quot;</span>
+</span><span id="L-419"><a href="#L-419"><span class="linenos"> 419</span></a>            <span class="p">)</span>
+</span><span id="L-420"><a href="#L-420"><span class="linenos"> 420</span></a>
+</span><span id="L-421"><a href="#L-421"><span class="linenos"> 421</span></a>        <span class="c1"># Validate the phenotype is compatible with the acmc tool</span>
+</span><span id="L-422"><a href="#L-422"><span class="linenos"> 422</span></a>        <span class="n">validate</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">phen_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">()))</span>
 </span><span id="L-423"><a href="#L-423"><span class="linenos"> 423</span></a>
-</span><span id="L-424"><a href="#L-424"><span class="linenos"> 424</span></a>
-</span><span id="L-425"><a href="#L-425"><span class="linenos"> 425</span></a><span class="k">def</span><span class="w"> </span><span class="nf">validate</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
-</span><span id="L-426"><a href="#L-426"><span class="linenos"> 426</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Validates the phenotype directory is a git repo with standard structure&quot;&quot;&quot;</span>
-</span><span id="L-427"><a href="#L-427"><span class="linenos"> 427</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Validating phenotype: </span><span class="si">{</span><span class="n">phen_dir</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-428"><a href="#L-428"><span class="linenos"> 428</span></a>    <span class="n">phen_path</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">)</span>
-</span><span id="L-429"><a href="#L-429"><span class="linenos"> 429</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">phen_path</span><span class="o">.</span><span class="n">is_dir</span><span class="p">():</span>
-</span><span id="L-430"><a href="#L-430"><span class="linenos"> 430</span></a>        <span class="k">raise</span> <span class="ne">NotADirectoryError</span><span class="p">(</span>
-</span><span id="L-431"><a href="#L-431"><span class="linenos"> 431</span></a>            <span class="sa">f</span><span class="s2">&quot;Error: &#39;</span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">phen_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="s2">&#39; is not a directory&quot;</span>
-</span><span id="L-432"><a href="#L-432"><span class="linenos"> 432</span></a>        <span class="p">)</span>
-</span><span id="L-433"><a href="#L-433"><span class="linenos"> 433</span></a>
-</span><span id="L-434"><a href="#L-434"><span class="linenos"> 434</span></a>    <span class="n">config_path</span> <span class="o">=</span> <span class="n">phen_path</span> <span class="o">/</span> <span class="n">CONFIG_FILE</span>
-</span><span id="L-435"><a href="#L-435"><span class="linenos"> 435</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">config_path</span><span class="o">.</span><span class="n">is_file</span><span class="p">():</span>
-</span><span id="L-436"><a href="#L-436"><span class="linenos"> 436</span></a>        <span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span>
-</span><span id="L-437"><a href="#L-437"><span class="linenos"> 437</span></a>            <span class="sa">f</span><span class="s2">&quot;Error: phen configuration file &#39;</span><span class="si">{</span><span class="n">config_path</span><span class="si">}</span><span class="s2">&#39; does not exist.&quot;</span>
-</span><span id="L-438"><a href="#L-438"><span class="linenos"> 438</span></a>        <span class="p">)</span>
-</span><span id="L-439"><a href="#L-439"><span class="linenos"> 439</span></a>
-</span><span id="L-440"><a href="#L-440"><span class="linenos"> 440</span></a>    <span class="n">concepts_path</span> <span class="o">=</span> <span class="n">phen_path</span> <span class="o">/</span> <span class="n">CONCEPTS_DIR</span>
-</span><span id="L-441"><a href="#L-441"><span class="linenos"> 441</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">concepts_path</span><span class="o">.</span><span class="n">is_dir</span><span class="p">():</span>
-</span><span id="L-442"><a href="#L-442"><span class="linenos"> 442</span></a>        <span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span>
-</span><span id="L-443"><a href="#L-443"><span class="linenos"> 443</span></a>            <span class="sa">f</span><span class="s2">&quot;Error: source concepts directory </span><span class="si">{</span><span class="n">concepts_path</span><span class="si">}</span><span class="s2"> does not exist.&quot;</span>
-</span><span id="L-444"><a href="#L-444"><span class="linenos"> 444</span></a>        <span class="p">)</span>
+</span><span id="L-424"><a href="#L-424"><span class="linenos"> 424</span></a>        <span class="c1"># Delete each tag locally</span>
+</span><span id="L-425"><a href="#L-425"><span class="linenos"> 425</span></a>        <span class="n">tags</span> <span class="o">=</span> <span class="n">repo</span><span class="o">.</span><span class="n">tags</span>
+</span><span id="L-426"><a href="#L-426"><span class="linenos"> 426</span></a>        <span class="k">for</span> <span class="n">tag</span> <span class="ow">in</span> <span class="n">tags</span><span class="p">:</span>
+</span><span id="L-427"><a href="#L-427"><span class="linenos"> 427</span></a>            <span class="n">repo</span><span class="o">.</span><span class="n">delete_tag</span><span class="p">(</span><span class="n">tag</span><span class="p">)</span>
+</span><span id="L-428"><a href="#L-428"><span class="linenos"> 428</span></a>            <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Deleted tags from forked repo: </span><span class="si">{</span><span class="n">tag</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-429"><a href="#L-429"><span class="linenos"> 429</span></a>
+</span><span id="L-430"><a href="#L-430"><span class="linenos"> 430</span></a>        <span class="c1"># Add upstream remote</span>
+</span><span id="L-431"><a href="#L-431"><span class="linenos"> 431</span></a>        <span class="n">repo</span><span class="o">.</span><span class="n">create_remote</span><span class="p">(</span><span class="s2">&quot;upstream&quot;</span><span class="p">,</span> <span class="n">upstream_url</span><span class="p">)</span>
+</span><span id="L-432"><a href="#L-432"><span class="linenos"> 432</span></a>        <span class="n">remote</span> <span class="o">=</span> <span class="n">repo</span><span class="o">.</span><span class="n">remotes</span><span class="p">[</span><span class="s2">&quot;origin&quot;</span><span class="p">]</span>
+</span><span id="L-433"><a href="#L-433"><span class="linenos"> 433</span></a>        <span class="n">repo</span><span class="o">.</span><span class="n">delete_remote</span><span class="p">(</span><span class="n">remote</span><span class="p">)</span>  <span class="c1"># Remove existing origin</span>
+</span><span id="L-434"><a href="#L-434"><span class="linenos"> 434</span></a>
+</span><span id="L-435"><a href="#L-435"><span class="linenos"> 435</span></a>        <span class="c1"># Optionally set a new origin remote</span>
+</span><span id="L-436"><a href="#L-436"><span class="linenos"> 436</span></a>        <span class="k">if</span> <span class="n">new_origin_url</span><span class="p">:</span>
+</span><span id="L-437"><a href="#L-437"><span class="linenos"> 437</span></a>            <span class="n">git_url</span> <span class="o">=</span> <span class="n">_construct_git_url</span><span class="p">(</span><span class="n">new_origin_url</span><span class="p">)</span>
+</span><span id="L-438"><a href="#L-438"><span class="linenos"> 438</span></a>            <span class="n">repo</span><span class="o">.</span><span class="n">create_remote</span><span class="p">(</span><span class="s2">&quot;origin&quot;</span><span class="p">,</span> <span class="n">git_url</span><span class="p">)</span>
+</span><span id="L-439"><a href="#L-439"><span class="linenos"> 439</span></a>            <span class="n">repo</span><span class="o">.</span><span class="n">git</span><span class="o">.</span><span class="n">push</span><span class="p">(</span><span class="s2">&quot;--set-upstream&quot;</span><span class="p">,</span> <span class="s2">&quot;origin&quot;</span><span class="p">,</span> <span class="s2">&quot;main&quot;</span><span class="p">)</span>
+</span><span id="L-440"><a href="#L-440"><span class="linenos"> 440</span></a>
+</span><span id="L-441"><a href="#L-441"><span class="linenos"> 441</span></a>        <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Repository forked successfully at </span><span class="si">{</span><span class="n">phen_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-442"><a href="#L-442"><span class="linenos"> 442</span></a>        <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Upstream set to </span><span class="si">{</span><span class="n">upstream_url</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-443"><a href="#L-443"><span class="linenos"> 443</span></a>        <span class="k">if</span> <span class="n">new_origin_url</span><span class="p">:</span>
+</span><span id="L-444"><a href="#L-444"><span class="linenos"> 444</span></a>            <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Origin set to </span><span class="si">{</span><span class="n">new_origin_url</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
 </span><span id="L-445"><a href="#L-445"><span class="linenos"> 445</span></a>
-</span><span id="L-446"><a href="#L-446"><span class="linenos"> 446</span></a>    <span class="c1"># Calidate the directory is a git repo</span>
-</span><span id="L-447"><a href="#L-447"><span class="linenos"> 447</span></a>    <span class="k">try</span><span class="p">:</span>
-</span><span id="L-448"><a href="#L-448"><span class="linenos"> 448</span></a>        <span class="n">git</span><span class="o">.</span><span class="n">Repo</span><span class="p">(</span><span class="n">phen_path</span><span class="p">)</span>
-</span><span id="L-449"><a href="#L-449"><span class="linenos"> 449</span></a>    <span class="k">except</span> <span class="p">(</span><span class="n">git</span><span class="o">.</span><span class="n">exc</span><span class="o">.</span><span class="n">InvalidGitRepositoryError</span><span class="p">,</span> <span class="n">git</span><span class="o">.</span><span class="n">exc</span><span class="o">.</span><span class="n">NoSuchPathError</span><span class="p">):</span>
-</span><span id="L-450"><a href="#L-450"><span class="linenos"> 450</span></a>        <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Phen directory </span><span class="si">{</span><span class="n">phen_path</span><span class="si">}</span><span class="s2"> is not a git repo&quot;</span><span class="p">)</span>
+</span><span id="L-446"><a href="#L-446"><span class="linenos"> 446</span></a>    <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
+</span><span id="L-447"><a href="#L-447"><span class="linenos"> 447</span></a>        <span class="k">if</span> <span class="n">phen_path</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
+</span><span id="L-448"><a href="#L-448"><span class="linenos"> 448</span></a>            <span class="n">shutil</span><span class="o">.</span><span class="n">rmtree</span><span class="p">(</span><span class="n">phen_path</span><span class="p">)</span>
+</span><span id="L-449"><a href="#L-449"><span class="linenos"> 449</span></a>        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Error occurred during repository fork: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-450"><a href="#L-450"><span class="linenos"> 450</span></a>
 </span><span id="L-451"><a href="#L-451"><span class="linenos"> 451</span></a>
-</span><span id="L-452"><a href="#L-452"><span class="linenos"> 452</span></a>    <span class="c1"># Load configuration File</span>
-</span><span id="L-453"><a href="#L-453"><span class="linenos"> 453</span></a>    <span class="k">if</span> <span class="n">config_path</span><span class="o">.</span><span class="n">suffix</span> <span class="o">==</span> <span class="s2">&quot;.yml&quot;</span><span class="p">:</span>
-</span><span id="L-454"><a href="#L-454"><span class="linenos"> 454</span></a>        <span class="k">try</span><span class="p">:</span>
-</span><span id="L-455"><a href="#L-455"><span class="linenos"> 455</span></a>            <span class="k">with</span> <span class="n">config_path</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="s2">&quot;r&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
-</span><span id="L-456"><a href="#L-456"><span class="linenos"> 456</span></a>                <span class="n">phenotype</span> <span class="o">=</span> <span class="n">yaml</span><span class="o">.</span><span class="n">safe_load</span><span class="p">(</span><span class="n">file</span><span class="p">)</span>
-</span><span id="L-457"><a href="#L-457"><span class="linenos"> 457</span></a>
-</span><span id="L-458"><a href="#L-458"><span class="linenos"> 458</span></a>            <span class="n">validator</span> <span class="o">=</span> <span class="n">Validator</span><span class="p">(</span><span class="n">CONFIG_SCHEMA</span><span class="p">)</span>
-</span><span id="L-459"><a href="#L-459"><span class="linenos"> 459</span></a>            <span class="k">if</span> <span class="n">validator</span><span class="o">.</span><span class="n">validate</span><span class="p">(</span><span class="n">phenotype</span><span class="p">):</span>
-</span><span id="L-460"><a href="#L-460"><span class="linenos"> 460</span></a>                <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">&quot;YAML structure is valid.&quot;</span><span class="p">)</span>
-</span><span id="L-461"><a href="#L-461"><span class="linenos"> 461</span></a>            <span class="k">else</span><span class="p">:</span>
-</span><span id="L-462"><a href="#L-462"><span class="linenos"> 462</span></a>                <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;YAML structure validation failed: </span><span class="si">{</span><span class="n">validator</span><span class="o">.</span><span class="n">errors</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-463"><a href="#L-463"><span class="linenos"> 463</span></a>                <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;YAML structure validation failed: </span><span class="si">{</span><span class="n">validator</span><span class="o">.</span><span class="n">errors</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-464"><a href="#L-464"><span class="linenos"> 464</span></a>        <span class="k">except</span> <span class="n">yaml</span><span class="o">.</span><span class="n">YAMLError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
-</span><span id="L-465"><a href="#L-465"><span class="linenos"> 465</span></a>            <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;YAML syntax error: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-466"><a href="#L-466"><span class="linenos"> 466</span></a>            <span class="k">raise</span> <span class="n">e</span>
-</span><span id="L-467"><a href="#L-467"><span class="linenos"> 467</span></a>    <span class="k">else</span><span class="p">:</span>
-</span><span id="L-468"><a href="#L-468"><span class="linenos"> 468</span></a>        <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span>
-</span><span id="L-469"><a href="#L-469"><span class="linenos"> 469</span></a>            <span class="sa">f</span><span class="s2">&quot;Unsupported configuration filetype: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">config_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-470"><a href="#L-470"><span class="linenos"> 470</span></a>        <span class="p">)</span>
-</span><span id="L-471"><a href="#L-471"><span class="linenos"> 471</span></a>
-</span><span id="L-472"><a href="#L-472"><span class="linenos"> 472</span></a>    <span class="c1"># initiatise</span>
-</span><span id="L-473"><a href="#L-473"><span class="linenos"> 473</span></a>    <span class="n">validation_errors</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-474"><a href="#L-474"><span class="linenos"> 474</span></a>    <span class="n">phenotype</span> <span class="o">=</span> <span class="n">phenotype</span><span class="p">[</span><span class="s2">&quot;phenotype&quot;</span><span class="p">]</span>
-</span><span id="L-475"><a href="#L-475"><span class="linenos"> 475</span></a>    <span class="n">code_types</span> <span class="o">=</span> <span class="n">parse</span><span class="o">.</span><span class="n">CodeTypeParser</span><span class="p">()</span><span class="o">.</span><span class="n">code_types</span>
-</span><span id="L-476"><a href="#L-476"><span class="linenos"> 476</span></a>
-</span><span id="L-477"><a href="#L-477"><span class="linenos"> 477</span></a>    <span class="c1"># check the version number is of the format vn.n.n</span>
-</span><span id="L-478"><a href="#L-478"><span class="linenos"> 478</span></a>    <span class="n">match</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;(\d+\.\d+\.\d+)&quot;</span><span class="p">,</span> <span class="n">phenotype</span><span class="p">[</span><span class="s2">&quot;version&quot;</span><span class="p">])</span>
-</span><span id="L-479"><a href="#L-479"><span class="linenos"> 479</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">match</span><span class="p">:</span>
-</span><span id="L-480"><a href="#L-480"><span class="linenos"> 480</span></a>        <span class="n">validation_errors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="L-481"><a href="#L-481"><span class="linenos"> 481</span></a>            <span class="sa">f</span><span class="s2">&quot;Invalid version format in configuration file: </span><span class="si">{</span><span class="n">phenotype</span><span class="p">[</span><span class="s1">&#39;version&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-482"><a href="#L-482"><span class="linenos"> 482</span></a>        <span class="p">)</span>
-</span><span id="L-483"><a href="#L-483"><span class="linenos"> 483</span></a>
-</span><span id="L-484"><a href="#L-484"><span class="linenos"> 484</span></a>    <span class="c1"># create a list of all the concept set names defined in the concept set configuration</span>
-</span><span id="L-485"><a href="#L-485"><span class="linenos"> 485</span></a>    <span class="n">concept_set_names</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-486"><a href="#L-486"><span class="linenos"> 486</span></a>    <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">phenotype</span><span class="p">[</span><span class="s2">&quot;concept_sets&quot;</span><span class="p">]:</span>
-</span><span id="L-487"><a href="#L-487"><span class="linenos"> 487</span></a>        <span class="k">if</span> <span class="n">item</span><span class="p">[</span><span class="s2">&quot;name&quot;</span><span class="p">]</span> <span class="ow">in</span> <span class="n">concept_set_names</span><span class="p">:</span>
-</span><span id="L-488"><a href="#L-488"><span class="linenos"> 488</span></a>            <span class="n">validation_errors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="L-489"><a href="#L-489"><span class="linenos"> 489</span></a>                <span class="sa">f</span><span class="s2">&quot;Duplicate concept set defined in concept sets </span><span class="si">{</span><span class="n">item</span><span class="p">[</span><span class="s1">&#39;name&#39;</span><span class="p">]</span><span class="w"> </span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-490"><a href="#L-490"><span class="linenos"> 490</span></a>            <span class="p">)</span>
-</span><span id="L-491"><a href="#L-491"><span class="linenos"> 491</span></a>        <span class="k">else</span><span class="p">:</span>
-</span><span id="L-492"><a href="#L-492"><span class="linenos"> 492</span></a>            <span class="n">concept_set_names</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">item</span><span class="p">[</span><span class="s2">&quot;name&quot;</span><span class="p">])</span>
-</span><span id="L-493"><a href="#L-493"><span class="linenos"> 493</span></a>
-</span><span id="L-494"><a href="#L-494"><span class="linenos"> 494</span></a>    <span class="c1"># check codes definition</span>
-</span><span id="L-495"><a href="#L-495"><span class="linenos"> 495</span></a>    <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">phenotype</span><span class="p">[</span><span class="s2">&quot;concept_sets&quot;</span><span class="p">]:</span>
-</span><span id="L-496"><a href="#L-496"><span class="linenos"> 496</span></a>        <span class="c1"># check concepte code file exists</span>
-</span><span id="L-497"><a href="#L-497"><span class="linenos"> 497</span></a>        <span class="n">concept_code_file_path</span> <span class="o">=</span> <span class="n">concepts_path</span> <span class="o">/</span> <span class="n">item</span><span class="p">[</span><span class="s2">&quot;file&quot;</span><span class="p">][</span><span class="s2">&quot;path&quot;</span><span class="p">]</span>
-</span><span id="L-498"><a href="#L-498"><span class="linenos"> 498</span></a>        <span class="k">if</span> <span class="ow">not</span> <span class="n">concept_code_file_path</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
-</span><span id="L-499"><a href="#L-499"><span class="linenos"> 499</span></a>            <span class="n">validation_errors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="L-500"><a href="#L-500"><span class="linenos"> 500</span></a>                <span class="sa">f</span><span class="s2">&quot;Coding file </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">concept_code_file_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="s2"> does not exist&quot;</span>
-</span><span id="L-501"><a href="#L-501"><span class="linenos"> 501</span></a>            <span class="p">)</span>
-</span><span id="L-502"><a href="#L-502"><span class="linenos"> 502</span></a>
-</span><span id="L-503"><a href="#L-503"><span class="linenos"> 503</span></a>        <span class="c1"># check concepte code file is not empty</span>
-</span><span id="L-504"><a href="#L-504"><span class="linenos"> 504</span></a>        <span class="k">if</span> <span class="n">concept_code_file_path</span><span class="o">.</span><span class="n">stat</span><span class="p">()</span><span class="o">.</span><span class="n">st_size</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
-</span><span id="L-505"><a href="#L-505"><span class="linenos"> 505</span></a>            <span class="n">validation_errors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="L-506"><a href="#L-506"><span class="linenos"> 506</span></a>                <span class="sa">f</span><span class="s2">&quot;Coding file </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">concept_code_file_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="s2"> is an empty file&quot;</span>
-</span><span id="L-507"><a href="#L-507"><span class="linenos"> 507</span></a>            <span class="p">)</span>
-</span><span id="L-508"><a href="#L-508"><span class="linenos"> 508</span></a>
-</span><span id="L-509"><a href="#L-509"><span class="linenos"> 509</span></a>        <span class="c1"># check code file type is supported</span>
-</span><span id="L-510"><a href="#L-510"><span class="linenos"> 510</span></a>        <span class="k">if</span> <span class="n">concept_code_file_path</span><span class="o">.</span><span class="n">suffix</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">CODE_FILE_TYPES</span><span class="p">:</span>
-</span><span id="L-511"><a href="#L-511"><span class="linenos"> 511</span></a>            <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
-</span><span id="L-512"><a href="#L-512"><span class="linenos"> 512</span></a>                <span class="sa">f</span><span class="s2">&quot;Unsupported filetype </span><span class="si">{</span><span class="n">concept_code_file_path</span><span class="o">.</span><span class="n">suffix</span><span class="si">}</span><span class="s2">, only support csv, xlsx, xls code file types&quot;</span>
-</span><span id="L-513"><a href="#L-513"><span class="linenos"> 513</span></a>            <span class="p">)</span>
-</span><span id="L-514"><a href="#L-514"><span class="linenos"> 514</span></a>
-</span><span id="L-515"><a href="#L-515"><span class="linenos"> 515</span></a>        <span class="c1"># check columns specified are a supported medical coding type</span>
-</span><span id="L-516"><a href="#L-516"><span class="linenos"> 516</span></a>        <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">item</span><span class="p">[</span><span class="s2">&quot;file&quot;</span><span class="p">][</span><span class="s2">&quot;columns&quot;</span><span class="p">]:</span>
-</span><span id="L-517"><a href="#L-517"><span class="linenos"> 517</span></a>            <span class="k">if</span> <span class="n">column</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">code_types</span><span class="p">:</span>
-</span><span id="L-518"><a href="#L-518"><span class="linenos"> 518</span></a>                <span class="n">validation_errors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="L-519"><a href="#L-519"><span class="linenos"> 519</span></a>                    <span class="sa">f</span><span class="s2">&quot;Column type </span><span class="si">{</span><span class="n">column</span><span class="si">}</span><span class="s2"> for file </span><span class="si">{</span><span class="n">concept_code_file_path</span><span class="si">}</span><span class="s2"> is not supported&quot;</span>
-</span><span id="L-520"><a href="#L-520"><span class="linenos"> 520</span></a>                <span class="p">)</span>
-</span><span id="L-521"><a href="#L-521"><span class="linenos"> 521</span></a>
-</span><span id="L-522"><a href="#L-522"><span class="linenos"> 522</span></a>        <span class="c1"># check the actions are supported</span>
-</span><span id="L-523"><a href="#L-523"><span class="linenos"> 523</span></a>        <span class="k">if</span> <span class="s2">&quot;actions&quot;</span> <span class="ow">in</span> <span class="n">item</span><span class="p">[</span><span class="s2">&quot;file&quot;</span><span class="p">]:</span>
-</span><span id="L-524"><a href="#L-524"><span class="linenos"> 524</span></a>            <span class="k">for</span> <span class="n">action</span> <span class="ow">in</span> <span class="n">item</span><span class="p">[</span><span class="s2">&quot;file&quot;</span><span class="p">][</span><span class="s2">&quot;actions&quot;</span><span class="p">]:</span>
-</span><span id="L-525"><a href="#L-525"><span class="linenos"> 525</span></a>                <span class="k">if</span> <span class="n">action</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">COL_ACTIONS</span><span class="p">:</span>
-</span><span id="L-526"><a href="#L-526"><span class="linenos"> 526</span></a>                    <span class="n">validation_errors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Action </span><span class="si">{</span><span class="n">action</span><span class="si">}</span><span class="s2"> is not supported&quot;</span><span class="p">)</span>
-</span><span id="L-527"><a href="#L-527"><span class="linenos"> 527</span></a>
-</span><span id="L-528"><a href="#L-528"><span class="linenos"> 528</span></a>    <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">validation_errors</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
-</span><span id="L-529"><a href="#L-529"><span class="linenos"> 529</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">validation_errors</span><span class="p">)</span>
-</span><span id="L-530"><a href="#L-530"><span class="linenos"> 530</span></a>        <span class="k">raise</span> <span class="n">PhenValidationException</span><span class="p">(</span>
-</span><span id="L-531"><a href="#L-531"><span class="linenos"> 531</span></a>            <span class="sa">f</span><span class="s2">&quot;Configuration file </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">config_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="s2"> failed validation&quot;</span><span class="p">,</span>
-</span><span id="L-532"><a href="#L-532"><span class="linenos"> 532</span></a>            <span class="n">validation_errors</span><span class="p">,</span>
-</span><span id="L-533"><a href="#L-533"><span class="linenos"> 533</span></a>        <span class="p">)</span>
-</span><span id="L-534"><a href="#L-534"><span class="linenos"> 534</span></a>
-</span><span id="L-535"><a href="#L-535"><span class="linenos"> 535</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Phenotype validated successfully&quot;</span><span class="p">)</span>
-</span><span id="L-536"><a href="#L-536"><span class="linenos"> 536</span></a>
-</span><span id="L-537"><a href="#L-537"><span class="linenos"> 537</span></a>
-</span><span id="L-538"><a href="#L-538"><span class="linenos"> 538</span></a><span class="k">def</span><span class="w"> </span><span class="nf">read_table_file</span><span class="p">(</span><span class="n">path</span><span class="p">:</span> <span class="n">Path</span><span class="p">,</span> <span class="n">excel_sheet</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="p">):</span>
-</span><span id="L-539"><a href="#L-539"><span class="linenos"> 539</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-540"><a href="#L-540"><span class="linenos"> 540</span></a><span class="sd">    Load Code List File</span>
-</span><span id="L-541"><a href="#L-541"><span class="linenos"> 541</span></a><span class="sd">    &quot;&quot;&quot;</span>
-</span><span id="L-542"><a href="#L-542"><span class="linenos"> 542</span></a>
-</span><span id="L-543"><a href="#L-543"><span class="linenos"> 543</span></a>    <span class="n">path</span> <span class="o">=</span> <span class="n">path</span><span class="o">.</span><span class="n">resolve</span><span class="p">()</span>
-</span><span id="L-544"><a href="#L-544"><span class="linenos"> 544</span></a>    <span class="k">if</span> <span class="n">path</span><span class="o">.</span><span class="n">suffix</span> <span class="o">==</span> <span class="s2">&quot;.csv&quot;</span><span class="p">:</span>
-</span><span id="L-545"><a href="#L-545"><span class="linenos"> 545</span></a>        <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_csv</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="nb">str</span><span class="p">)</span>
-</span><span id="L-546"><a href="#L-546"><span class="linenos"> 546</span></a>    <span class="k">elif</span> <span class="n">path</span><span class="o">.</span><span class="n">suffix</span> <span class="o">==</span> <span class="s2">&quot;.xlsx&quot;</span> <span class="ow">or</span> <span class="n">path</span><span class="o">.</span><span class="n">suffix</span> <span class="o">==</span> <span class="s2">&quot;.xls&quot;</span><span class="p">:</span>
-</span><span id="L-547"><a href="#L-547"><span class="linenos"> 547</span></a>        <span class="k">if</span> <span class="n">excel_sheet</span> <span class="o">!=</span> <span class="s2">&quot;&quot;</span><span class="p">:</span>
-</span><span id="L-548"><a href="#L-548"><span class="linenos"> 548</span></a>            <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_excel</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">sheet_name</span><span class="o">=</span><span class="n">excel_sheet</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="nb">str</span><span class="p">)</span>
-</span><span id="L-549"><a href="#L-549"><span class="linenos"> 549</span></a>        <span class="k">else</span><span class="p">:</span>
-</span><span id="L-550"><a href="#L-550"><span class="linenos"> 550</span></a>            <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_excel</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="nb">str</span><span class="p">)</span>
-</span><span id="L-551"><a href="#L-551"><span class="linenos"> 551</span></a>    <span class="k">elif</span> <span class="n">path</span><span class="o">.</span><span class="n">suffix</span> <span class="o">==</span> <span class="s2">&quot;.dta&quot;</span><span class="p">:</span>
-</span><span id="L-552"><a href="#L-552"><span class="linenos"> 552</span></a>        <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_stata</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
-</span><span id="L-553"><a href="#L-553"><span class="linenos"> 553</span></a>    <span class="k">else</span><span class="p">:</span>
-</span><span id="L-554"><a href="#L-554"><span class="linenos"> 554</span></a>        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
-</span><span id="L-555"><a href="#L-555"><span class="linenos"> 555</span></a>            <span class="sa">f</span><span class="s2">&quot;Unsupported filetype </span><span class="si">{</span><span class="n">path</span><span class="o">.</span><span class="n">suffix</span><span class="si">}</span><span class="s2">, only support</span><span class="si">{</span><span class="n">CODE_FILE_TYPES</span><span class="si">}</span><span class="s2"> code file types&quot;</span>
-</span><span id="L-556"><a href="#L-556"><span class="linenos"> 556</span></a>        <span class="p">)</span>
-</span><span id="L-557"><a href="#L-557"><span class="linenos"> 557</span></a>
-</span><span id="L-558"><a href="#L-558"><span class="linenos"> 558</span></a>    <span class="k">return</span> <span class="n">df</span>
-</span><span id="L-559"><a href="#L-559"><span class="linenos"> 559</span></a>
-</span><span id="L-560"><a href="#L-560"><span class="linenos"> 560</span></a>
-</span><span id="L-561"><a href="#L-561"><span class="linenos"> 561</span></a><span class="k">def</span><span class="w"> </span><span class="nf">process_actions</span><span class="p">(</span><span class="n">df</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">,</span> <span class="n">concept_set</span><span class="p">:</span> <span class="nb">dict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">:</span>
-</span><span id="L-562"><a href="#L-562"><span class="linenos"> 562</span></a>    <span class="c1"># Perform Structural Changes to file before preprocessing</span>
-</span><span id="L-563"><a href="#L-563"><span class="linenos"> 563</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">&quot;Processing file structural actions&quot;</span><span class="p">)</span>
-</span><span id="L-564"><a href="#L-564"><span class="linenos"> 564</span></a>    <span class="k">if</span> <span class="p">(</span>
-</span><span id="L-565"><a href="#L-565"><span class="linenos"> 565</span></a>        <span class="s2">&quot;actions&quot;</span> <span class="ow">in</span> <span class="n">concept_set</span><span class="p">[</span><span class="s2">&quot;file&quot;</span><span class="p">]</span>
-</span><span id="L-566"><a href="#L-566"><span class="linenos"> 566</span></a>        <span class="ow">and</span> <span class="s2">&quot;split_col&quot;</span> <span class="ow">in</span> <span class="n">concept_set</span><span class="p">[</span><span class="s2">&quot;file&quot;</span><span class="p">][</span><span class="s2">&quot;actions&quot;</span><span class="p">]</span>
-</span><span id="L-567"><a href="#L-567"><span class="linenos"> 567</span></a>        <span class="ow">and</span> <span class="s2">&quot;codes_col&quot;</span> <span class="ow">in</span> <span class="n">concept_set</span><span class="p">[</span><span class="s2">&quot;file&quot;</span><span class="p">][</span><span class="s2">&quot;actions&quot;</span><span class="p">]</span>
-</span><span id="L-568"><a href="#L-568"><span class="linenos"> 568</span></a>    <span class="p">):</span>
-</span><span id="L-569"><a href="#L-569"><span class="linenos"> 569</span></a>        <span class="n">split_col</span> <span class="o">=</span> <span class="n">concept_set</span><span class="p">[</span><span class="s2">&quot;file&quot;</span><span class="p">][</span><span class="s2">&quot;actions&quot;</span><span class="p">][</span><span class="s2">&quot;split_col&quot;</span><span class="p">]</span>
-</span><span id="L-570"><a href="#L-570"><span class="linenos"> 570</span></a>        <span class="n">codes_col</span> <span class="o">=</span> <span class="n">concept_set</span><span class="p">[</span><span class="s2">&quot;file&quot;</span><span class="p">][</span><span class="s2">&quot;actions&quot;</span><span class="p">][</span><span class="s2">&quot;codes_col&quot;</span><span class="p">]</span>
-</span><span id="L-571"><a href="#L-571"><span class="linenos"> 571</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span>
-</span><span id="L-572"><a href="#L-572"><span class="linenos"> 572</span></a>            <span class="s2">&quot;Action: Splitting&quot;</span><span class="p">,</span>
-</span><span id="L-573"><a href="#L-573"><span class="linenos"> 573</span></a>            <span class="n">split_col</span><span class="p">,</span>
-</span><span id="L-574"><a href="#L-574"><span class="linenos"> 574</span></a>            <span class="s2">&quot;column into:&quot;</span><span class="p">,</span>
-</span><span id="L-575"><a href="#L-575"><span class="linenos"> 575</span></a>            <span class="n">df</span><span class="p">[</span><span class="n">split_col</span><span class="p">]</span><span class="o">.</span><span class="n">unique</span><span class="p">(),</span>
-</span><span id="L-576"><a href="#L-576"><span class="linenos"> 576</span></a>        <span class="p">)</span>
-</span><span id="L-577"><a href="#L-577"><span class="linenos"> 577</span></a>        <span class="n">codes</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="n">codes_col</span><span class="p">]</span>
-</span><span id="L-578"><a href="#L-578"><span class="linenos"> 578</span></a>        <span class="n">oh</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">get_dummies</span><span class="p">(</span><span class="n">df</span><span class="p">[</span><span class="n">split_col</span><span class="p">],</span> <span class="n">dtype</span><span class="o">=</span><span class="nb">bool</span><span class="p">)</span>  <span class="c1"># one hot encode</span>
-</span><span id="L-579"><a href="#L-579"><span class="linenos"> 579</span></a>        <span class="n">oh</span> <span class="o">=</span> <span class="n">oh</span><span class="o">.</span><span class="n">where</span><span class="p">((</span><span class="n">oh</span> <span class="o">!=</span> <span class="kc">True</span><span class="p">),</span> <span class="n">codes</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>  <span class="c1"># fill in 1s with codes</span>
-</span><span id="L-580"><a href="#L-580"><span class="linenos"> 580</span></a>        <span class="n">oh</span><span class="p">[</span><span class="n">oh</span> <span class="o">==</span> <span class="kc">False</span><span class="p">]</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">nan</span>  <span class="c1"># replace 0s with None</span>
-</span><span id="L-581"><a href="#L-581"><span class="linenos"> 581</span></a>        <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">concat</span><span class="p">([</span><span class="n">df</span><span class="p">,</span> <span class="n">oh</span><span class="p">],</span> <span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>  <span class="c1"># merge in new columns</span>
-</span><span id="L-582"><a href="#L-582"><span class="linenos"> 582</span></a>
-</span><span id="L-583"><a href="#L-583"><span class="linenos"> 583</span></a>    <span class="k">return</span> <span class="n">df</span>
+</span><span id="L-452"><a href="#L-452"><span class="linenos"> 452</span></a><span class="k">def</span><span class="w"> </span><span class="nf">validate</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
+</span><span id="L-453"><a href="#L-453"><span class="linenos"> 453</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Validates the phenotype directory is a git repo with standard structure&quot;&quot;&quot;</span>
+</span><span id="L-454"><a href="#L-454"><span class="linenos"> 454</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Validating phenotype: </span><span class="si">{</span><span class="n">phen_dir</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-455"><a href="#L-455"><span class="linenos"> 455</span></a>    <span class="n">phen_path</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">)</span>
+</span><span id="L-456"><a href="#L-456"><span class="linenos"> 456</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">phen_path</span><span class="o">.</span><span class="n">is_dir</span><span class="p">():</span>
+</span><span id="L-457"><a href="#L-457"><span class="linenos"> 457</span></a>        <span class="k">raise</span> <span class="ne">NotADirectoryError</span><span class="p">(</span>
+</span><span id="L-458"><a href="#L-458"><span class="linenos"> 458</span></a>            <span class="sa">f</span><span class="s2">&quot;Error: &#39;</span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">phen_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="s2">&#39; is not a directory&quot;</span>
+</span><span id="L-459"><a href="#L-459"><span class="linenos"> 459</span></a>        <span class="p">)</span>
+</span><span id="L-460"><a href="#L-460"><span class="linenos"> 460</span></a>
+</span><span id="L-461"><a href="#L-461"><span class="linenos"> 461</span></a>    <span class="n">config_path</span> <span class="o">=</span> <span class="n">phen_path</span> <span class="o">/</span> <span class="n">CONFIG_FILE</span>
+</span><span id="L-462"><a href="#L-462"><span class="linenos"> 462</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">config_path</span><span class="o">.</span><span class="n">is_file</span><span class="p">():</span>
+</span><span id="L-463"><a href="#L-463"><span class="linenos"> 463</span></a>        <span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span>
+</span><span id="L-464"><a href="#L-464"><span class="linenos"> 464</span></a>            <span class="sa">f</span><span class="s2">&quot;Error: phen configuration file &#39;</span><span class="si">{</span><span class="n">config_path</span><span class="si">}</span><span class="s2">&#39; does not exist.&quot;</span>
+</span><span id="L-465"><a href="#L-465"><span class="linenos"> 465</span></a>        <span class="p">)</span>
+</span><span id="L-466"><a href="#L-466"><span class="linenos"> 466</span></a>
+</span><span id="L-467"><a href="#L-467"><span class="linenos"> 467</span></a>    <span class="n">concepts_path</span> <span class="o">=</span> <span class="n">phen_path</span> <span class="o">/</span> <span class="n">CONCEPTS_DIR</span>
+</span><span id="L-468"><a href="#L-468"><span class="linenos"> 468</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">concepts_path</span><span class="o">.</span><span class="n">is_dir</span><span class="p">():</span>
+</span><span id="L-469"><a href="#L-469"><span class="linenos"> 469</span></a>        <span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span>
+</span><span id="L-470"><a href="#L-470"><span class="linenos"> 470</span></a>            <span class="sa">f</span><span class="s2">&quot;Error: source concepts directory </span><span class="si">{</span><span class="n">concepts_path</span><span class="si">}</span><span class="s2"> does not exist.&quot;</span>
+</span><span id="L-471"><a href="#L-471"><span class="linenos"> 471</span></a>        <span class="p">)</span>
+</span><span id="L-472"><a href="#L-472"><span class="linenos"> 472</span></a>
+</span><span id="L-473"><a href="#L-473"><span class="linenos"> 473</span></a>    <span class="c1"># Calidate the directory is a git repo</span>
+</span><span id="L-474"><a href="#L-474"><span class="linenos"> 474</span></a>    <span class="k">try</span><span class="p">:</span>
+</span><span id="L-475"><a href="#L-475"><span class="linenos"> 475</span></a>        <span class="n">git</span><span class="o">.</span><span class="n">Repo</span><span class="p">(</span><span class="n">phen_path</span><span class="p">)</span>
+</span><span id="L-476"><a href="#L-476"><span class="linenos"> 476</span></a>    <span class="k">except</span> <span class="p">(</span><span class="n">git</span><span class="o">.</span><span class="n">exc</span><span class="o">.</span><span class="n">InvalidGitRepositoryError</span><span class="p">,</span> <span class="n">git</span><span class="o">.</span><span class="n">exc</span><span class="o">.</span><span class="n">NoSuchPathError</span><span class="p">):</span>
+</span><span id="L-477"><a href="#L-477"><span class="linenos"> 477</span></a>        <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Phen directory </span><span class="si">{</span><span class="n">phen_path</span><span class="si">}</span><span class="s2"> is not a git repo&quot;</span><span class="p">)</span>
+</span><span id="L-478"><a href="#L-478"><span class="linenos"> 478</span></a>
+</span><span id="L-479"><a href="#L-479"><span class="linenos"> 479</span></a>    <span class="c1"># Load configuration File</span>
+</span><span id="L-480"><a href="#L-480"><span class="linenos"> 480</span></a>    <span class="k">if</span> <span class="n">config_path</span><span class="o">.</span><span class="n">suffix</span> <span class="o">==</span> <span class="s2">&quot;.yml&quot;</span><span class="p">:</span>
+</span><span id="L-481"><a href="#L-481"><span class="linenos"> 481</span></a>        <span class="k">try</span><span class="p">:</span>
+</span><span id="L-482"><a href="#L-482"><span class="linenos"> 482</span></a>            <span class="k">with</span> <span class="n">config_path</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="s2">&quot;r&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
+</span><span id="L-483"><a href="#L-483"><span class="linenos"> 483</span></a>                <span class="n">phenotype</span> <span class="o">=</span> <span class="n">yaml</span><span class="o">.</span><span class="n">safe_load</span><span class="p">(</span><span class="n">file</span><span class="p">)</span>
+</span><span id="L-484"><a href="#L-484"><span class="linenos"> 484</span></a>
+</span><span id="L-485"><a href="#L-485"><span class="linenos"> 485</span></a>            <span class="n">validator</span> <span class="o">=</span> <span class="n">Validator</span><span class="p">(</span><span class="n">CONFIG_SCHEMA</span><span class="p">)</span>
+</span><span id="L-486"><a href="#L-486"><span class="linenos"> 486</span></a>            <span class="k">if</span> <span class="n">validator</span><span class="o">.</span><span class="n">validate</span><span class="p">(</span><span class="n">phenotype</span><span class="p">):</span>
+</span><span id="L-487"><a href="#L-487"><span class="linenos"> 487</span></a>                <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">&quot;YAML structure is valid.&quot;</span><span class="p">)</span>
+</span><span id="L-488"><a href="#L-488"><span class="linenos"> 488</span></a>            <span class="k">else</span><span class="p">:</span>
+</span><span id="L-489"><a href="#L-489"><span class="linenos"> 489</span></a>                <span class="n">_logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;YAML structure validation failed: </span><span class="si">{</span><span class="n">validator</span><span class="o">.</span><span class="n">errors</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-490"><a href="#L-490"><span class="linenos"> 490</span></a>                <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;YAML structure validation failed: </span><span class="si">{</span><span class="n">validator</span><span class="o">.</span><span class="n">errors</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-491"><a href="#L-491"><span class="linenos"> 491</span></a>        <span class="k">except</span> <span class="n">yaml</span><span class="o">.</span><span class="n">YAMLError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
+</span><span id="L-492"><a href="#L-492"><span class="linenos"> 492</span></a>            <span class="n">_logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;YAML syntax error: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-493"><a href="#L-493"><span class="linenos"> 493</span></a>            <span class="k">raise</span> <span class="n">e</span>
+</span><span id="L-494"><a href="#L-494"><span class="linenos"> 494</span></a>    <span class="k">else</span><span class="p">:</span>
+</span><span id="L-495"><a href="#L-495"><span class="linenos"> 495</span></a>        <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span>
+</span><span id="L-496"><a href="#L-496"><span class="linenos"> 496</span></a>            <span class="sa">f</span><span class="s2">&quot;Unsupported configuration filetype: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">config_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-497"><a href="#L-497"><span class="linenos"> 497</span></a>        <span class="p">)</span>
+</span><span id="L-498"><a href="#L-498"><span class="linenos"> 498</span></a>
+</span><span id="L-499"><a href="#L-499"><span class="linenos"> 499</span></a>    <span class="c1"># initiatise</span>
+</span><span id="L-500"><a href="#L-500"><span class="linenos"> 500</span></a>    <span class="n">validation_errors</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-501"><a href="#L-501"><span class="linenos"> 501</span></a>    <span class="n">phenotype</span> <span class="o">=</span> <span class="n">phenotype</span><span class="p">[</span><span class="s2">&quot;phenotype&quot;</span><span class="p">]</span>
+</span><span id="L-502"><a href="#L-502"><span class="linenos"> 502</span></a>    <span class="n">code_types</span> <span class="o">=</span> <span class="n">parse</span><span class="o">.</span><span class="n">CodeTypeParser</span><span class="p">()</span><span class="o">.</span><span class="n">code_types</span>
+</span><span id="L-503"><a href="#L-503"><span class="linenos"> 503</span></a>
+</span><span id="L-504"><a href="#L-504"><span class="linenos"> 504</span></a>    <span class="c1"># check the version number is of the format vn.n.n</span>
+</span><span id="L-505"><a href="#L-505"><span class="linenos"> 505</span></a>    <span class="n">match</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;(\d+\.\d+\.\d+)&quot;</span><span class="p">,</span> <span class="n">phenotype</span><span class="p">[</span><span class="s2">&quot;version&quot;</span><span class="p">])</span>
+</span><span id="L-506"><a href="#L-506"><span class="linenos"> 506</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">match</span><span class="p">:</span>
+</span><span id="L-507"><a href="#L-507"><span class="linenos"> 507</span></a>        <span class="n">validation_errors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="L-508"><a href="#L-508"><span class="linenos"> 508</span></a>            <span class="sa">f</span><span class="s2">&quot;Invalid version format in configuration file: </span><span class="si">{</span><span class="n">phenotype</span><span class="p">[</span><span class="s1">&#39;version&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-509"><a href="#L-509"><span class="linenos"> 509</span></a>        <span class="p">)</span>
+</span><span id="L-510"><a href="#L-510"><span class="linenos"> 510</span></a>
+</span><span id="L-511"><a href="#L-511"><span class="linenos"> 511</span></a>    <span class="c1"># create a list of all the concept set names defined in the concept set configuration</span>
+</span><span id="L-512"><a href="#L-512"><span class="linenos"> 512</span></a>    <span class="n">concept_set_names</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-513"><a href="#L-513"><span class="linenos"> 513</span></a>    <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">phenotype</span><span class="p">[</span><span class="s2">&quot;concept_sets&quot;</span><span class="p">]:</span>
+</span><span id="L-514"><a href="#L-514"><span class="linenos"> 514</span></a>        <span class="k">if</span> <span class="n">item</span><span class="p">[</span><span class="s2">&quot;name&quot;</span><span class="p">]</span> <span class="ow">in</span> <span class="n">concept_set_names</span><span class="p">:</span>
+</span><span id="L-515"><a href="#L-515"><span class="linenos"> 515</span></a>            <span class="n">validation_errors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="L-516"><a href="#L-516"><span class="linenos"> 516</span></a>                <span class="sa">f</span><span class="s2">&quot;Duplicate concept set defined in concept sets </span><span class="si">{</span><span class="n">item</span><span class="p">[</span><span class="s1">&#39;name&#39;</span><span class="p">]</span><span class="w"> </span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-517"><a href="#L-517"><span class="linenos"> 517</span></a>            <span class="p">)</span>
+</span><span id="L-518"><a href="#L-518"><span class="linenos"> 518</span></a>        <span class="k">else</span><span class="p">:</span>
+</span><span id="L-519"><a href="#L-519"><span class="linenos"> 519</span></a>            <span class="n">concept_set_names</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">item</span><span class="p">[</span><span class="s2">&quot;name&quot;</span><span class="p">])</span>
+</span><span id="L-520"><a href="#L-520"><span class="linenos"> 520</span></a>
+</span><span id="L-521"><a href="#L-521"><span class="linenos"> 521</span></a>    <span class="c1"># check codes definition</span>
+</span><span id="L-522"><a href="#L-522"><span class="linenos"> 522</span></a>    <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">phenotype</span><span class="p">[</span><span class="s2">&quot;concept_sets&quot;</span><span class="p">]:</span>
+</span><span id="L-523"><a href="#L-523"><span class="linenos"> 523</span></a>        <span class="c1"># check concepte code file exists</span>
+</span><span id="L-524"><a href="#L-524"><span class="linenos"> 524</span></a>        <span class="n">concept_code_file_path</span> <span class="o">=</span> <span class="n">concepts_path</span> <span class="o">/</span> <span class="n">item</span><span class="p">[</span><span class="s2">&quot;file&quot;</span><span class="p">][</span><span class="s2">&quot;path&quot;</span><span class="p">]</span>
+</span><span id="L-525"><a href="#L-525"><span class="linenos"> 525</span></a>        <span class="k">if</span> <span class="ow">not</span> <span class="n">concept_code_file_path</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
+</span><span id="L-526"><a href="#L-526"><span class="linenos"> 526</span></a>            <span class="n">validation_errors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="L-527"><a href="#L-527"><span class="linenos"> 527</span></a>                <span class="sa">f</span><span class="s2">&quot;Coding file </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">concept_code_file_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="s2"> does not exist&quot;</span>
+</span><span id="L-528"><a href="#L-528"><span class="linenos"> 528</span></a>            <span class="p">)</span>
+</span><span id="L-529"><a href="#L-529"><span class="linenos"> 529</span></a>
+</span><span id="L-530"><a href="#L-530"><span class="linenos"> 530</span></a>        <span class="c1"># check concepte code file is not empty</span>
+</span><span id="L-531"><a href="#L-531"><span class="linenos"> 531</span></a>        <span class="k">if</span> <span class="n">concept_code_file_path</span><span class="o">.</span><span class="n">stat</span><span class="p">()</span><span class="o">.</span><span class="n">st_size</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
+</span><span id="L-532"><a href="#L-532"><span class="linenos"> 532</span></a>            <span class="n">validation_errors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="L-533"><a href="#L-533"><span class="linenos"> 533</span></a>                <span class="sa">f</span><span class="s2">&quot;Coding file </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">concept_code_file_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="s2"> is an empty file&quot;</span>
+</span><span id="L-534"><a href="#L-534"><span class="linenos"> 534</span></a>            <span class="p">)</span>
+</span><span id="L-535"><a href="#L-535"><span class="linenos"> 535</span></a>
+</span><span id="L-536"><a href="#L-536"><span class="linenos"> 536</span></a>        <span class="c1"># check code file type is supported</span>
+</span><span id="L-537"><a href="#L-537"><span class="linenos"> 537</span></a>        <span class="k">if</span> <span class="n">concept_code_file_path</span><span class="o">.</span><span class="n">suffix</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">CODE_FILE_TYPES</span><span class="p">:</span>
+</span><span id="L-538"><a href="#L-538"><span class="linenos"> 538</span></a>            <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
+</span><span id="L-539"><a href="#L-539"><span class="linenos"> 539</span></a>                <span class="sa">f</span><span class="s2">&quot;Unsupported filetype </span><span class="si">{</span><span class="n">concept_code_file_path</span><span class="o">.</span><span class="n">suffix</span><span class="si">}</span><span class="s2">, only support csv, xlsx, xls code file types&quot;</span>
+</span><span id="L-540"><a href="#L-540"><span class="linenos"> 540</span></a>            <span class="p">)</span>
+</span><span id="L-541"><a href="#L-541"><span class="linenos"> 541</span></a>
+</span><span id="L-542"><a href="#L-542"><span class="linenos"> 542</span></a>        <span class="c1"># check columns specified are a supported medical coding type</span>
+</span><span id="L-543"><a href="#L-543"><span class="linenos"> 543</span></a>        <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">item</span><span class="p">[</span><span class="s2">&quot;file&quot;</span><span class="p">][</span><span class="s2">&quot;columns&quot;</span><span class="p">]:</span>
+</span><span id="L-544"><a href="#L-544"><span class="linenos"> 544</span></a>            <span class="k">if</span> <span class="n">column</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">code_types</span><span class="p">:</span>
+</span><span id="L-545"><a href="#L-545"><span class="linenos"> 545</span></a>                <span class="n">validation_errors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="L-546"><a href="#L-546"><span class="linenos"> 546</span></a>                    <span class="sa">f</span><span class="s2">&quot;Column type </span><span class="si">{</span><span class="n">column</span><span class="si">}</span><span class="s2"> for file </span><span class="si">{</span><span class="n">concept_code_file_path</span><span class="si">}</span><span class="s2"> is not supported&quot;</span>
+</span><span id="L-547"><a href="#L-547"><span class="linenos"> 547</span></a>                <span class="p">)</span>
+</span><span id="L-548"><a href="#L-548"><span class="linenos"> 548</span></a>
+</span><span id="L-549"><a href="#L-549"><span class="linenos"> 549</span></a>        <span class="c1"># check the actions are supported</span>
+</span><span id="L-550"><a href="#L-550"><span class="linenos"> 550</span></a>        <span class="k">if</span> <span class="s2">&quot;actions&quot;</span> <span class="ow">in</span> <span class="n">item</span><span class="p">[</span><span class="s2">&quot;file&quot;</span><span class="p">]:</span>
+</span><span id="L-551"><a href="#L-551"><span class="linenos"> 551</span></a>            <span class="k">for</span> <span class="n">action</span> <span class="ow">in</span> <span class="n">item</span><span class="p">[</span><span class="s2">&quot;file&quot;</span><span class="p">][</span><span class="s2">&quot;actions&quot;</span><span class="p">]:</span>
+</span><span id="L-552"><a href="#L-552"><span class="linenos"> 552</span></a>                <span class="k">if</span> <span class="n">action</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">COL_ACTIONS</span><span class="p">:</span>
+</span><span id="L-553"><a href="#L-553"><span class="linenos"> 553</span></a>                    <span class="n">validation_errors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Action </span><span class="si">{</span><span class="n">action</span><span class="si">}</span><span class="s2"> is not supported&quot;</span><span class="p">)</span>
+</span><span id="L-554"><a href="#L-554"><span class="linenos"> 554</span></a>
+</span><span id="L-555"><a href="#L-555"><span class="linenos"> 555</span></a>    <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">validation_errors</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
+</span><span id="L-556"><a href="#L-556"><span class="linenos"> 556</span></a>        <span class="n">_logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">validation_errors</span><span class="p">)</span>
+</span><span id="L-557"><a href="#L-557"><span class="linenos"> 557</span></a>        <span class="k">raise</span> <span class="n">PhenValidationException</span><span class="p">(</span>
+</span><span id="L-558"><a href="#L-558"><span class="linenos"> 558</span></a>            <span class="sa">f</span><span class="s2">&quot;Configuration file </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">config_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="s2"> failed validation&quot;</span><span class="p">,</span>
+</span><span id="L-559"><a href="#L-559"><span class="linenos"> 559</span></a>            <span class="n">validation_errors</span><span class="p">,</span>
+</span><span id="L-560"><a href="#L-560"><span class="linenos"> 560</span></a>        <span class="p">)</span>
+</span><span id="L-561"><a href="#L-561"><span class="linenos"> 561</span></a>
+</span><span id="L-562"><a href="#L-562"><span class="linenos"> 562</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Phenotype validated successfully&quot;</span><span class="p">)</span>
+</span><span id="L-563"><a href="#L-563"><span class="linenos"> 563</span></a>
+</span><span id="L-564"><a href="#L-564"><span class="linenos"> 564</span></a>
+</span><span id="L-565"><a href="#L-565"><span class="linenos"> 565</span></a><span class="k">def</span><span class="w"> </span><span class="nf">_read_table_file</span><span class="p">(</span><span class="n">path</span><span class="p">:</span> <span class="n">Path</span><span class="p">,</span> <span class="n">excel_sheet</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="p">):</span>
+</span><span id="L-566"><a href="#L-566"><span class="linenos"> 566</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-567"><a href="#L-567"><span class="linenos"> 567</span></a><span class="sd">    Load Code List File</span>
+</span><span id="L-568"><a href="#L-568"><span class="linenos"> 568</span></a><span class="sd">    &quot;&quot;&quot;</span>
+</span><span id="L-569"><a href="#L-569"><span class="linenos"> 569</span></a>
+</span><span id="L-570"><a href="#L-570"><span class="linenos"> 570</span></a>    <span class="n">path</span> <span class="o">=</span> <span class="n">path</span><span class="o">.</span><span class="n">resolve</span><span class="p">()</span>
+</span><span id="L-571"><a href="#L-571"><span class="linenos"> 571</span></a>    <span class="k">if</span> <span class="n">path</span><span class="o">.</span><span class="n">suffix</span> <span class="o">==</span> <span class="s2">&quot;.csv&quot;</span><span class="p">:</span>
+</span><span id="L-572"><a href="#L-572"><span class="linenos"> 572</span></a>        <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_csv</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="nb">str</span><span class="p">)</span>
+</span><span id="L-573"><a href="#L-573"><span class="linenos"> 573</span></a>    <span class="k">elif</span> <span class="n">path</span><span class="o">.</span><span class="n">suffix</span> <span class="o">==</span> <span class="s2">&quot;.xlsx&quot;</span> <span class="ow">or</span> <span class="n">path</span><span class="o">.</span><span class="n">suffix</span> <span class="o">==</span> <span class="s2">&quot;.xls&quot;</span><span class="p">:</span>
+</span><span id="L-574"><a href="#L-574"><span class="linenos"> 574</span></a>        <span class="k">if</span> <span class="n">excel_sheet</span> <span class="o">!=</span> <span class="s2">&quot;&quot;</span><span class="p">:</span>
+</span><span id="L-575"><a href="#L-575"><span class="linenos"> 575</span></a>            <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_excel</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">sheet_name</span><span class="o">=</span><span class="n">excel_sheet</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="nb">str</span><span class="p">)</span>
+</span><span id="L-576"><a href="#L-576"><span class="linenos"> 576</span></a>        <span class="k">else</span><span class="p">:</span>
+</span><span id="L-577"><a href="#L-577"><span class="linenos"> 577</span></a>            <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_excel</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="nb">str</span><span class="p">)</span>
+</span><span id="L-578"><a href="#L-578"><span class="linenos"> 578</span></a>    <span class="k">elif</span> <span class="n">path</span><span class="o">.</span><span class="n">suffix</span> <span class="o">==</span> <span class="s2">&quot;.dta&quot;</span><span class="p">:</span>
+</span><span id="L-579"><a href="#L-579"><span class="linenos"> 579</span></a>        <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_stata</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
+</span><span id="L-580"><a href="#L-580"><span class="linenos"> 580</span></a>    <span class="k">else</span><span class="p">:</span>
+</span><span id="L-581"><a href="#L-581"><span class="linenos"> 581</span></a>        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
+</span><span id="L-582"><a href="#L-582"><span class="linenos"> 582</span></a>            <span class="sa">f</span><span class="s2">&quot;Unsupported filetype </span><span class="si">{</span><span class="n">path</span><span class="o">.</span><span class="n">suffix</span><span class="si">}</span><span class="s2">, only support</span><span class="si">{</span><span class="n">CODE_FILE_TYPES</span><span class="si">}</span><span class="s2"> code file types&quot;</span>
+</span><span id="L-583"><a href="#L-583"><span class="linenos"> 583</span></a>        <span class="p">)</span>
 </span><span id="L-584"><a href="#L-584"><span class="linenos"> 584</span></a>
-</span><span id="L-585"><a href="#L-585"><span class="linenos"> 585</span></a>
-</span><span id="L-586"><a href="#L-586"><span class="linenos"> 586</span></a><span class="c1"># Perform QA Checks on columns individually and append to df</span>
-</span><span id="L-587"><a href="#L-587"><span class="linenos"> 587</span></a><span class="k">def</span><span class="w"> </span><span class="nf">preprocess_source_concepts</span><span class="p">(</span>
-</span><span id="L-588"><a href="#L-588"><span class="linenos"> 588</span></a>    <span class="n">df</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">,</span> <span class="n">concept_set</span><span class="p">:</span> <span class="nb">dict</span><span class="p">,</span> <span class="n">code_file_path</span><span class="p">:</span> <span class="n">Path</span>
-</span><span id="L-589"><a href="#L-589"><span class="linenos"> 589</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Tuple</span><span class="p">[</span><span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">,</span> <span class="nb">list</span><span class="p">]:</span>
-</span><span id="L-590"><a href="#L-590"><span class="linenos"> 590</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Parses each column individually - Order and length will not be preserved!&quot;&quot;&quot;</span>
-</span><span id="L-591"><a href="#L-591"><span class="linenos"> 591</span></a>    <span class="n">out</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">([])</span>  <span class="c1"># create output df to append to</span>
-</span><span id="L-592"><a href="#L-592"><span class="linenos"> 592</span></a>    <span class="n">code_errors</span> <span class="o">=</span> <span class="p">[]</span>  <span class="c1"># list of errors from processing</span>
-</span><span id="L-593"><a href="#L-593"><span class="linenos"> 593</span></a>
-</span><span id="L-594"><a href="#L-594"><span class="linenos"> 594</span></a>    <span class="c1"># remove unnamed columns due to extra commas, missing headers, or incorrect parsing</span>
-</span><span id="L-595"><a href="#L-595"><span class="linenos"> 595</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">drop</span><span class="p">(</span><span class="n">columns</span><span class="o">=</span><span class="p">[</span><span class="n">col</span> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">df</span><span class="o">.</span><span class="n">columns</span> <span class="k">if</span> <span class="s2">&quot;Unnamed&quot;</span> <span class="ow">in</span> <span class="n">col</span><span class="p">])</span>
-</span><span id="L-596"><a href="#L-596"><span class="linenos"> 596</span></a>
-</span><span id="L-597"><a href="#L-597"><span class="linenos"> 597</span></a>    <span class="c1"># Preprocess codes</span>
-</span><span id="L-598"><a href="#L-598"><span class="linenos"> 598</span></a>    <span class="n">code_types</span> <span class="o">=</span> <span class="n">parse</span><span class="o">.</span><span class="n">CodeTypeParser</span><span class="p">()</span><span class="o">.</span><span class="n">code_types</span>
-</span><span id="L-599"><a href="#L-599"><span class="linenos"> 599</span></a>    <span class="k">for</span> <span class="n">code_type</span> <span class="ow">in</span> <span class="n">concept_set</span><span class="p">[</span><span class="s2">&quot;file&quot;</span><span class="p">][</span><span class="s2">&quot;columns&quot;</span><span class="p">]:</span>
-</span><span id="L-600"><a href="#L-600"><span class="linenos"> 600</span></a>        <span class="n">parser</span> <span class="o">=</span> <span class="n">code_types</span><span class="p">[</span><span class="n">code_type</span><span class="p">]</span>
-</span><span id="L-601"><a href="#L-601"><span class="linenos"> 601</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Processing </span><span class="si">{</span><span class="n">code_type</span><span class="si">}</span><span class="s2"> codes for </span><span class="si">{</span><span class="n">code_file_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-602"><a href="#L-602"><span class="linenos"> 602</span></a>
-</span><span id="L-603"><a href="#L-603"><span class="linenos"> 603</span></a>        <span class="c1"># get codes by column name</span>
-</span><span id="L-604"><a href="#L-604"><span class="linenos"> 604</span></a>        <span class="n">source_col_name</span> <span class="o">=</span> <span class="n">concept_set</span><span class="p">[</span><span class="s2">&quot;file&quot;</span><span class="p">][</span><span class="s2">&quot;columns&quot;</span><span class="p">][</span><span class="n">code_type</span><span class="p">]</span>
-</span><span id="L-605"><a href="#L-605"><span class="linenos"> 605</span></a>        <span class="n">codes</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="n">source_col_name</span><span class="p">]</span><span class="o">.</span><span class="n">dropna</span><span class="p">()</span>
-</span><span id="L-606"><a href="#L-606"><span class="linenos"> 606</span></a>        <span class="n">codes</span> <span class="o">=</span> <span class="n">codes</span><span class="o">.</span><span class="n">astype</span><span class="p">(</span><span class="nb">str</span><span class="p">)</span>  <span class="c1"># convert to string</span>
-</span><span id="L-607"><a href="#L-607"><span class="linenos"> 607</span></a>        <span class="n">codes</span> <span class="o">=</span> <span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>  <span class="c1"># remove excess spaces</span>
-</span><span id="L-608"><a href="#L-608"><span class="linenos"> 608</span></a>
-</span><span id="L-609"><a href="#L-609"><span class="linenos"> 609</span></a>        <span class="c1"># process codes, validating them using parser and returning the errors</span>
-</span><span id="L-610"><a href="#L-610"><span class="linenos"> 610</span></a>        <span class="n">codes</span><span class="p">,</span> <span class="n">errors</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">process</span><span class="p">(</span><span class="n">codes</span><span class="p">,</span> <span class="n">code_file_path</span><span class="p">)</span>
-</span><span id="L-611"><a href="#L-611"><span class="linenos"> 611</span></a>        <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">errors</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
-</span><span id="L-612"><a href="#L-612"><span class="linenos"> 612</span></a>            <span class="n">code_errors</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">errors</span><span class="p">)</span>
-</span><span id="L-613"><a href="#L-613"><span class="linenos"> 613</span></a>            <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Codes validation failed with </span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="n">errors</span><span class="p">)</span><span class="si">}</span><span class="s2"> errors&quot;</span><span class="p">)</span>
-</span><span id="L-614"><a href="#L-614"><span class="linenos"> 614</span></a>
-</span><span id="L-615"><a href="#L-615"><span class="linenos"> 615</span></a>        <span class="c1"># add processed codes to df</span>
-</span><span id="L-616"><a href="#L-616"><span class="linenos"> 616</span></a>        <span class="n">new_col_name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">source_col_name</span><span class="si">}</span><span class="s2">_SOURCE&quot;</span>
-</span><span id="L-617"><a href="#L-617"><span class="linenos"> 617</span></a>        <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="n">source_col_name</span><span class="p">:</span> <span class="n">new_col_name</span><span class="p">})</span>
-</span><span id="L-618"><a href="#L-618"><span class="linenos"> 618</span></a>        <span class="n">process_codes</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">({</span><span class="n">code_type</span><span class="p">:</span> <span class="n">codes</span><span class="p">})</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">df</span><span class="p">)</span>
-</span><span id="L-619"><a href="#L-619"><span class="linenos"> 619</span></a>        <span class="n">out</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">concat</span><span class="p">(</span>
-</span><span id="L-620"><a href="#L-620"><span class="linenos"> 620</span></a>            <span class="p">[</span><span class="n">out</span><span class="p">,</span> <span class="n">process_codes</span><span class="p">],</span>
-</span><span id="L-621"><a href="#L-621"><span class="linenos"> 621</span></a>            <span class="n">ignore_index</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
-</span><span id="L-622"><a href="#L-622"><span class="linenos"> 622</span></a>        <span class="p">)</span>
-</span><span id="L-623"><a href="#L-623"><span class="linenos"> 623</span></a>
-</span><span id="L-624"><a href="#L-624"><span class="linenos"> 624</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">out</span><span class="o">.</span><span class="n">head</span><span class="p">())</span>
-</span><span id="L-625"><a href="#L-625"><span class="linenos"> 625</span></a>
-</span><span id="L-626"><a href="#L-626"><span class="linenos"> 626</span></a>    <span class="k">return</span> <span class="n">out</span><span class="p">,</span> <span class="n">code_errors</span>
-</span><span id="L-627"><a href="#L-627"><span class="linenos"> 627</span></a>
+</span><span id="L-585"><a href="#L-585"><span class="linenos"> 585</span></a>    <span class="k">return</span> <span class="n">df</span>
+</span><span id="L-586"><a href="#L-586"><span class="linenos"> 586</span></a>
+</span><span id="L-587"><a href="#L-587"><span class="linenos"> 587</span></a>
+</span><span id="L-588"><a href="#L-588"><span class="linenos"> 588</span></a><span class="k">def</span><span class="w"> </span><span class="nf">_process_actions</span><span class="p">(</span><span class="n">df</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">,</span> <span class="n">concept_set</span><span class="p">:</span> <span class="nb">dict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">:</span>
+</span><span id="L-589"><a href="#L-589"><span class="linenos"> 589</span></a>    <span class="c1"># Perform Structural Changes to file before preprocessing</span>
+</span><span id="L-590"><a href="#L-590"><span class="linenos"> 590</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">&quot;Processing file structural actions&quot;</span><span class="p">)</span>
+</span><span id="L-591"><a href="#L-591"><span class="linenos"> 591</span></a>    <span class="k">if</span> <span class="p">(</span>
+</span><span id="L-592"><a href="#L-592"><span class="linenos"> 592</span></a>        <span class="s2">&quot;actions&quot;</span> <span class="ow">in</span> <span class="n">concept_set</span><span class="p">[</span><span class="s2">&quot;file&quot;</span><span class="p">]</span>
+</span><span id="L-593"><a href="#L-593"><span class="linenos"> 593</span></a>        <span class="ow">and</span> <span class="s2">&quot;split_col&quot;</span> <span class="ow">in</span> <span class="n">concept_set</span><span class="p">[</span><span class="s2">&quot;file&quot;</span><span class="p">][</span><span class="s2">&quot;actions&quot;</span><span class="p">]</span>
+</span><span id="L-594"><a href="#L-594"><span class="linenos"> 594</span></a>        <span class="ow">and</span> <span class="s2">&quot;codes_col&quot;</span> <span class="ow">in</span> <span class="n">concept_set</span><span class="p">[</span><span class="s2">&quot;file&quot;</span><span class="p">][</span><span class="s2">&quot;actions&quot;</span><span class="p">]</span>
+</span><span id="L-595"><a href="#L-595"><span class="linenos"> 595</span></a>    <span class="p">):</span>
+</span><span id="L-596"><a href="#L-596"><span class="linenos"> 596</span></a>        <span class="n">split_col</span> <span class="o">=</span> <span class="n">concept_set</span><span class="p">[</span><span class="s2">&quot;file&quot;</span><span class="p">][</span><span class="s2">&quot;actions&quot;</span><span class="p">][</span><span class="s2">&quot;split_col&quot;</span><span class="p">]</span>
+</span><span id="L-597"><a href="#L-597"><span class="linenos"> 597</span></a>        <span class="n">codes_col</span> <span class="o">=</span> <span class="n">concept_set</span><span class="p">[</span><span class="s2">&quot;file&quot;</span><span class="p">][</span><span class="s2">&quot;actions&quot;</span><span class="p">][</span><span class="s2">&quot;codes_col&quot;</span><span class="p">]</span>
+</span><span id="L-598"><a href="#L-598"><span class="linenos"> 598</span></a>        <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span>
+</span><span id="L-599"><a href="#L-599"><span class="linenos"> 599</span></a>            <span class="s2">&quot;Action: Splitting&quot;</span><span class="p">,</span>
+</span><span id="L-600"><a href="#L-600"><span class="linenos"> 600</span></a>            <span class="n">split_col</span><span class="p">,</span>
+</span><span id="L-601"><a href="#L-601"><span class="linenos"> 601</span></a>            <span class="s2">&quot;column into:&quot;</span><span class="p">,</span>
+</span><span id="L-602"><a href="#L-602"><span class="linenos"> 602</span></a>            <span class="n">df</span><span class="p">[</span><span class="n">split_col</span><span class="p">]</span><span class="o">.</span><span class="n">unique</span><span class="p">(),</span>
+</span><span id="L-603"><a href="#L-603"><span class="linenos"> 603</span></a>        <span class="p">)</span>
+</span><span id="L-604"><a href="#L-604"><span class="linenos"> 604</span></a>        <span class="n">codes</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="n">codes_col</span><span class="p">]</span>
+</span><span id="L-605"><a href="#L-605"><span class="linenos"> 605</span></a>        <span class="n">oh</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">get_dummies</span><span class="p">(</span><span class="n">df</span><span class="p">[</span><span class="n">split_col</span><span class="p">],</span> <span class="n">dtype</span><span class="o">=</span><span class="nb">bool</span><span class="p">)</span>  <span class="c1"># one hot encode</span>
+</span><span id="L-606"><a href="#L-606"><span class="linenos"> 606</span></a>        <span class="n">oh</span> <span class="o">=</span> <span class="n">oh</span><span class="o">.</span><span class="n">where</span><span class="p">((</span><span class="n">oh</span> <span class="o">!=</span> <span class="kc">True</span><span class="p">),</span> <span class="n">codes</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>  <span class="c1"># fill in 1s with codes</span>
+</span><span id="L-607"><a href="#L-607"><span class="linenos"> 607</span></a>        <span class="n">oh</span><span class="p">[</span><span class="n">oh</span> <span class="o">==</span> <span class="kc">False</span><span class="p">]</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">nan</span>  <span class="c1"># replace 0s with None</span>
+</span><span id="L-608"><a href="#L-608"><span class="linenos"> 608</span></a>        <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">concat</span><span class="p">([</span><span class="n">df</span><span class="p">,</span> <span class="n">oh</span><span class="p">],</span> <span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>  <span class="c1"># merge in new columns</span>
+</span><span id="L-609"><a href="#L-609"><span class="linenos"> 609</span></a>
+</span><span id="L-610"><a href="#L-610"><span class="linenos"> 610</span></a>    <span class="k">return</span> <span class="n">df</span>
+</span><span id="L-611"><a href="#L-611"><span class="linenos"> 611</span></a>
+</span><span id="L-612"><a href="#L-612"><span class="linenos"> 612</span></a>
+</span><span id="L-613"><a href="#L-613"><span class="linenos"> 613</span></a><span class="k">def</span><span class="w"> </span><span class="nf">_preprocess_source_concepts</span><span class="p">(</span>
+</span><span id="L-614"><a href="#L-614"><span class="linenos"> 614</span></a>    <span class="n">df</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">,</span> <span class="n">concept_set</span><span class="p">:</span> <span class="nb">dict</span><span class="p">,</span> <span class="n">code_file_path</span><span class="p">:</span> <span class="n">Path</span>
+</span><span id="L-615"><a href="#L-615"><span class="linenos"> 615</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Tuple</span><span class="p">[</span><span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">,</span> <span class="nb">list</span><span class="p">]:</span>
+</span><span id="L-616"><a href="#L-616"><span class="linenos"> 616</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Perform QA Checks on columns individually and append to df&quot;&quot;&quot;</span>
+</span><span id="L-617"><a href="#L-617"><span class="linenos"> 617</span></a>    <span class="n">out</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">([])</span>  <span class="c1"># create output df to append to</span>
+</span><span id="L-618"><a href="#L-618"><span class="linenos"> 618</span></a>    <span class="n">code_errors</span> <span class="o">=</span> <span class="p">[]</span>  <span class="c1"># list of errors from processing</span>
+</span><span id="L-619"><a href="#L-619"><span class="linenos"> 619</span></a>
+</span><span id="L-620"><a href="#L-620"><span class="linenos"> 620</span></a>    <span class="c1"># remove unnamed columns due to extra commas, missing headers, or incorrect parsing</span>
+</span><span id="L-621"><a href="#L-621"><span class="linenos"> 621</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">drop</span><span class="p">(</span><span class="n">columns</span><span class="o">=</span><span class="p">[</span><span class="n">col</span> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">df</span><span class="o">.</span><span class="n">columns</span> <span class="k">if</span> <span class="s2">&quot;Unnamed&quot;</span> <span class="ow">in</span> <span class="n">col</span><span class="p">])</span>
+</span><span id="L-622"><a href="#L-622"><span class="linenos"> 622</span></a>
+</span><span id="L-623"><a href="#L-623"><span class="linenos"> 623</span></a>    <span class="c1"># Preprocess codes</span>
+</span><span id="L-624"><a href="#L-624"><span class="linenos"> 624</span></a>    <span class="n">code_types</span> <span class="o">=</span> <span class="n">parse</span><span class="o">.</span><span class="n">CodeTypeParser</span><span class="p">()</span><span class="o">.</span><span class="n">code_types</span>
+</span><span id="L-625"><a href="#L-625"><span class="linenos"> 625</span></a>    <span class="k">for</span> <span class="n">code_type</span> <span class="ow">in</span> <span class="n">concept_set</span><span class="p">[</span><span class="s2">&quot;file&quot;</span><span class="p">][</span><span class="s2">&quot;columns&quot;</span><span class="p">]:</span>
+</span><span id="L-626"><a href="#L-626"><span class="linenos"> 626</span></a>        <span class="n">parser</span> <span class="o">=</span> <span class="n">code_types</span><span class="p">[</span><span class="n">code_type</span><span class="p">]</span>
+</span><span id="L-627"><a href="#L-627"><span class="linenos"> 627</span></a>        <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Processing </span><span class="si">{</span><span class="n">code_type</span><span class="si">}</span><span class="s2"> codes for </span><span class="si">{</span><span class="n">code_file_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
 </span><span id="L-628"><a href="#L-628"><span class="linenos"> 628</span></a>
-</span><span id="L-629"><a href="#L-629"><span class="linenos"> 629</span></a><span class="k">def</span><span class="w"> </span><span class="nf">get_code_type_from_col_name</span><span class="p">(</span><span class="n">col_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
-</span><span id="L-630"><a href="#L-630"><span class="linenos"> 630</span></a>    <span class="k">return</span> <span class="n">col_name</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;_&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
-</span><span id="L-631"><a href="#L-631"><span class="linenos"> 631</span></a>
-</span><span id="L-632"><a href="#L-632"><span class="linenos"> 632</span></a>
-</span><span id="L-633"><a href="#L-633"><span class="linenos"> 633</span></a><span class="c1"># Translate Df with multiple codes into single code type Series</span>
-</span><span id="L-634"><a href="#L-634"><span class="linenos"> 634</span></a><span class="k">def</span><span class="w"> </span><span class="nf">translate_codes</span><span class="p">(</span>
-</span><span id="L-635"><a href="#L-635"><span class="linenos"> 635</span></a>    <span class="n">source_df</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">,</span> <span class="n">target_code_type</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">concept_name</span><span class="p">:</span> <span class="nb">str</span>
-</span><span id="L-636"><a href="#L-636"><span class="linenos"> 636</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">:</span>
-</span><span id="L-637"><a href="#L-637"><span class="linenos"> 637</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Translates each source code type the source coding list into a target type and returns all conversions as a concept set&quot;&quot;&quot;</span>
-</span><span id="L-638"><a href="#L-638"><span class="linenos"> 638</span></a>
-</span><span id="L-639"><a href="#L-639"><span class="linenos"> 639</span></a>    <span class="c1"># codes = pd.DataFrame([], dtype=str)</span>
-</span><span id="L-640"><a href="#L-640"><span class="linenos"> 640</span></a>    <span class="n">codes</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">(</span>
-</span><span id="L-641"><a href="#L-641"><span class="linenos"> 641</span></a>        <span class="n">columns</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;SOURCE_CONCEPT&quot;</span><span class="p">,</span> <span class="s2">&quot;SOURCE_CONCEPT_TYPE&quot;</span><span class="p">,</span> <span class="s2">&quot;CONCEPT&quot;</span><span class="p">],</span> <span class="n">dtype</span><span class="o">=</span><span class="s2">&quot;string&quot;</span>
-</span><span id="L-642"><a href="#L-642"><span class="linenos"> 642</span></a>    <span class="p">)</span>
-</span><span id="L-643"><a href="#L-643"><span class="linenos"> 643</span></a>    <span class="c1"># Convert codes to target type</span>
-</span><span id="L-644"><a href="#L-644"><span class="linenos"> 644</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Converting to target code type </span><span class="si">{</span><span class="n">target_code_type</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-645"><a href="#L-645"><span class="linenos"> 645</span></a>
-</span><span id="L-646"><a href="#L-646"><span class="linenos"> 646</span></a>    <span class="k">for</span> <span class="n">source_code_type</span> <span class="ow">in</span> <span class="n">source_df</span><span class="o">.</span><span class="n">columns</span><span class="p">:</span>
-</span><span id="L-647"><a href="#L-647"><span class="linenos"> 647</span></a>        <span class="c1"># if target code type is the same as thet source code type, no translation, just appending source as target</span>
-</span><span id="L-648"><a href="#L-648"><span class="linenos"> 648</span></a>        <span class="k">if</span> <span class="n">source_code_type</span> <span class="o">==</span> <span class="n">target_code_type</span><span class="p">:</span>
-</span><span id="L-649"><a href="#L-649"><span class="linenos"> 649</span></a>            <span class="n">copy_df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">(</span>
-</span><span id="L-650"><a href="#L-650"><span class="linenos"> 650</span></a>                <span class="p">{</span>
-</span><span id="L-651"><a href="#L-651"><span class="linenos"> 651</span></a>                    <span class="s2">&quot;SOURCE_CONCEPT&quot;</span><span class="p">:</span> <span class="n">source_df</span><span class="p">[</span><span class="n">source_code_type</span><span class="p">],</span>
-</span><span id="L-652"><a href="#L-652"><span class="linenos"> 652</span></a>                    <span class="s2">&quot;SOURCE_CONCEPT_TYPE&quot;</span><span class="p">:</span> <span class="n">source_code_type</span><span class="p">,</span>
-</span><span id="L-653"><a href="#L-653"><span class="linenos"> 653</span></a>                    <span class="s2">&quot;CONCEPT&quot;</span><span class="p">:</span> <span class="n">source_df</span><span class="p">[</span><span class="n">source_code_type</span><span class="p">],</span>
-</span><span id="L-654"><a href="#L-654"><span class="linenos"> 654</span></a>                <span class="p">}</span>
-</span><span id="L-655"><a href="#L-655"><span class="linenos"> 655</span></a>            <span class="p">)</span>
-</span><span id="L-656"><a href="#L-656"><span class="linenos"> 656</span></a>            <span class="n">codes</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">concat</span><span class="p">([</span><span class="n">codes</span><span class="p">,</span> <span class="n">copy_df</span><span class="p">])</span>
-</span><span id="L-657"><a href="#L-657"><span class="linenos"> 657</span></a>            <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span>
-</span><span id="L-658"><a href="#L-658"><span class="linenos"> 658</span></a>                <span class="sa">f</span><span class="s2">&quot;Target code type </span><span class="si">{</span><span class="n">target_code_type</span><span class="si">}</span><span class="s2"> is the same as source code type </span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="n">source_df</span><span class="p">)</span><span class="si">}</span><span class="s2">, copying codes rather than translating&quot;</span>
-</span><span id="L-659"><a href="#L-659"><span class="linenos"> 659</span></a>            <span class="p">)</span>
-</span><span id="L-660"><a href="#L-660"><span class="linenos"> 660</span></a>        <span class="k">else</span><span class="p">:</span>
-</span><span id="L-661"><a href="#L-661"><span class="linenos"> 661</span></a>            <span class="c1"># get the translation filename using source to target code types</span>
-</span><span id="L-662"><a href="#L-662"><span class="linenos"> 662</span></a>            <span class="n">filename</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">source_code_type</span><span class="si">}</span><span class="s2">_to_</span><span class="si">{</span><span class="n">target_code_type</span><span class="si">}</span><span class="s2">.parquet&quot;</span>
-</span><span id="L-663"><a href="#L-663"><span class="linenos"> 663</span></a>            <span class="n">map_path</span> <span class="o">=</span> <span class="n">trud</span><span class="o">.</span><span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="n">filename</span>
-</span><span id="L-664"><a href="#L-664"><span class="linenos"> 664</span></a>
-</span><span id="L-665"><a href="#L-665"><span class="linenos"> 665</span></a>            <span class="c1"># do the mapping if it exists</span>
-</span><span id="L-666"><a href="#L-666"><span class="linenos"> 666</span></a>            <span class="k">if</span> <span class="n">map_path</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
-</span><span id="L-667"><a href="#L-667"><span class="linenos"> 667</span></a>                <span class="c1"># get mapping</span>
-</span><span id="L-668"><a href="#L-668"><span class="linenos"> 668</span></a>                <span class="n">df_map</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_parquet</span><span class="p">(</span><span class="n">map_path</span><span class="p">)</span>
-</span><span id="L-669"><a href="#L-669"><span class="linenos"> 669</span></a>
-</span><span id="L-670"><a href="#L-670"><span class="linenos"> 670</span></a>                <span class="c1"># do mapping</span>
-</span><span id="L-671"><a href="#L-671"><span class="linenos"> 671</span></a>                <span class="n">translated_df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">merge</span><span class="p">(</span>
-</span><span id="L-672"><a href="#L-672"><span class="linenos"> 672</span></a>                    <span class="n">source_df</span><span class="p">[</span><span class="n">source_code_type</span><span class="p">],</span> <span class="n">df_map</span><span class="p">,</span> <span class="n">how</span><span class="o">=</span><span class="s2">&quot;left&quot;</span>
-</span><span id="L-673"><a href="#L-673"><span class="linenos"> 673</span></a>                <span class="p">)</span>
-</span><span id="L-674"><a href="#L-674"><span class="linenos"> 674</span></a>
-</span><span id="L-675"><a href="#L-675"><span class="linenos"> 675</span></a>                <span class="c1"># normalise the output</span>
-</span><span id="L-676"><a href="#L-676"><span class="linenos"> 676</span></a>                <span class="n">translated_df</span><span class="o">.</span><span class="n">columns</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">Index</span><span class="p">([</span><span class="s2">&quot;SOURCE_CONCEPT&quot;</span><span class="p">,</span> <span class="s2">&quot;CONCEPT&quot;</span><span class="p">])</span>
-</span><span id="L-677"><a href="#L-677"><span class="linenos"> 677</span></a>                <span class="n">translated_df</span><span class="p">[</span><span class="s2">&quot;SOURCE_CONCEPT_TYPE&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">source_code_type</span>
-</span><span id="L-678"><a href="#L-678"><span class="linenos"> 678</span></a>
-</span><span id="L-679"><a href="#L-679"><span class="linenos"> 679</span></a>                <span class="c1"># add to list of codes</span>
-</span><span id="L-680"><a href="#L-680"><span class="linenos"> 680</span></a>                <span class="n">codes</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">concat</span><span class="p">([</span><span class="n">codes</span><span class="p">,</span> <span class="n">translated_df</span><span class="p">])</span>
-</span><span id="L-681"><a href="#L-681"><span class="linenos"> 681</span></a>
-</span><span id="L-682"><a href="#L-682"><span class="linenos"> 682</span></a>            <span class="k">else</span><span class="p">:</span>
-</span><span id="L-683"><a href="#L-683"><span class="linenos"> 683</span></a>                <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span>
-</span><span id="L-684"><a href="#L-684"><span class="linenos"> 684</span></a>                    <span class="sa">f</span><span class="s2">&quot;No mapping from </span><span class="si">{</span><span class="n">source_code_type</span><span class="si">}</span><span class="s2"> to </span><span class="si">{</span><span class="n">target_code_type</span><span class="si">}</span><span class="s2">, file </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">map_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="s2"> does not exist&quot;</span>
-</span><span id="L-685"><a href="#L-685"><span class="linenos"> 685</span></a>                <span class="p">)</span>
+</span><span id="L-629"><a href="#L-629"><span class="linenos"> 629</span></a>        <span class="c1"># get codes by column name</span>
+</span><span id="L-630"><a href="#L-630"><span class="linenos"> 630</span></a>        <span class="n">source_col_name</span> <span class="o">=</span> <span class="n">concept_set</span><span class="p">[</span><span class="s2">&quot;file&quot;</span><span class="p">][</span><span class="s2">&quot;columns&quot;</span><span class="p">][</span><span class="n">code_type</span><span class="p">]</span>
+</span><span id="L-631"><a href="#L-631"><span class="linenos"> 631</span></a>        <span class="n">codes</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="n">source_col_name</span><span class="p">]</span><span class="o">.</span><span class="n">dropna</span><span class="p">()</span>
+</span><span id="L-632"><a href="#L-632"><span class="linenos"> 632</span></a>        <span class="n">codes</span> <span class="o">=</span> <span class="n">codes</span><span class="o">.</span><span class="n">astype</span><span class="p">(</span><span class="nb">str</span><span class="p">)</span>  <span class="c1"># convert to string</span>
+</span><span id="L-633"><a href="#L-633"><span class="linenos"> 633</span></a>        <span class="n">codes</span> <span class="o">=</span> <span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>  <span class="c1"># remove excess spaces</span>
+</span><span id="L-634"><a href="#L-634"><span class="linenos"> 634</span></a>
+</span><span id="L-635"><a href="#L-635"><span class="linenos"> 635</span></a>        <span class="c1"># process codes, validating them using parser and returning the errors</span>
+</span><span id="L-636"><a href="#L-636"><span class="linenos"> 636</span></a>        <span class="n">codes</span><span class="p">,</span> <span class="n">errors</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">process</span><span class="p">(</span><span class="n">codes</span><span class="p">,</span> <span class="n">code_file_path</span><span class="p">)</span>
+</span><span id="L-637"><a href="#L-637"><span class="linenos"> 637</span></a>        <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">errors</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
+</span><span id="L-638"><a href="#L-638"><span class="linenos"> 638</span></a>            <span class="n">code_errors</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">errors</span><span class="p">)</span>
+</span><span id="L-639"><a href="#L-639"><span class="linenos"> 639</span></a>            <span class="n">_logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Codes validation failed with </span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="n">errors</span><span class="p">)</span><span class="si">}</span><span class="s2"> errors&quot;</span><span class="p">)</span>
+</span><span id="L-640"><a href="#L-640"><span class="linenos"> 640</span></a>
+</span><span id="L-641"><a href="#L-641"><span class="linenos"> 641</span></a>        <span class="c1"># add processed codes to df</span>
+</span><span id="L-642"><a href="#L-642"><span class="linenos"> 642</span></a>        <span class="n">new_col_name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">source_col_name</span><span class="si">}</span><span class="s2">_SOURCE&quot;</span>
+</span><span id="L-643"><a href="#L-643"><span class="linenos"> 643</span></a>        <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="n">source_col_name</span><span class="p">:</span> <span class="n">new_col_name</span><span class="p">})</span>
+</span><span id="L-644"><a href="#L-644"><span class="linenos"> 644</span></a>        <span class="n">process_codes</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">({</span><span class="n">code_type</span><span class="p">:</span> <span class="n">codes</span><span class="p">})</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">df</span><span class="p">)</span>
+</span><span id="L-645"><a href="#L-645"><span class="linenos"> 645</span></a>        <span class="n">out</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">concat</span><span class="p">(</span>
+</span><span id="L-646"><a href="#L-646"><span class="linenos"> 646</span></a>            <span class="p">[</span><span class="n">out</span><span class="p">,</span> <span class="n">process_codes</span><span class="p">],</span>
+</span><span id="L-647"><a href="#L-647"><span class="linenos"> 647</span></a>            <span class="n">ignore_index</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+</span><span id="L-648"><a href="#L-648"><span class="linenos"> 648</span></a>        <span class="p">)</span>
+</span><span id="L-649"><a href="#L-649"><span class="linenos"> 649</span></a>
+</span><span id="L-650"><a href="#L-650"><span class="linenos"> 650</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">out</span><span class="o">.</span><span class="n">head</span><span class="p">())</span>
+</span><span id="L-651"><a href="#L-651"><span class="linenos"> 651</span></a>
+</span><span id="L-652"><a href="#L-652"><span class="linenos"> 652</span></a>    <span class="k">return</span> <span class="n">out</span><span class="p">,</span> <span class="n">code_errors</span>
+</span><span id="L-653"><a href="#L-653"><span class="linenos"> 653</span></a>
+</span><span id="L-654"><a href="#L-654"><span class="linenos"> 654</span></a>
+</span><span id="L-655"><a href="#L-655"><span class="linenos"> 655</span></a><span class="c1"># Translate Df with multiple codes into single code type Series</span>
+</span><span id="L-656"><a href="#L-656"><span class="linenos"> 656</span></a><span class="k">def</span><span class="w"> </span><span class="nf">translate_codes</span><span class="p">(</span>
+</span><span id="L-657"><a href="#L-657"><span class="linenos"> 657</span></a>    <span class="n">source_df</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">,</span> <span class="n">target_code_type</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">concept_name</span><span class="p">:</span> <span class="nb">str</span>
+</span><span id="L-658"><a href="#L-658"><span class="linenos"> 658</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">:</span>
+</span><span id="L-659"><a href="#L-659"><span class="linenos"> 659</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Translates each source code type the source coding list into a target type and returns all conversions as a concept set&quot;&quot;&quot;</span>
+</span><span id="L-660"><a href="#L-660"><span class="linenos"> 660</span></a>
+</span><span id="L-661"><a href="#L-661"><span class="linenos"> 661</span></a>    <span class="c1"># codes = pd.DataFrame([], dtype=str)</span>
+</span><span id="L-662"><a href="#L-662"><span class="linenos"> 662</span></a>    <span class="n">codes</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">(</span>
+</span><span id="L-663"><a href="#L-663"><span class="linenos"> 663</span></a>        <span class="n">columns</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;SOURCE_CONCEPT&quot;</span><span class="p">,</span> <span class="s2">&quot;SOURCE_CONCEPT_TYPE&quot;</span><span class="p">,</span> <span class="s2">&quot;CONCEPT&quot;</span><span class="p">],</span> <span class="n">dtype</span><span class="o">=</span><span class="s2">&quot;string&quot;</span>
+</span><span id="L-664"><a href="#L-664"><span class="linenos"> 664</span></a>    <span class="p">)</span>
+</span><span id="L-665"><a href="#L-665"><span class="linenos"> 665</span></a>    <span class="c1"># Convert codes to target type</span>
+</span><span id="L-666"><a href="#L-666"><span class="linenos"> 666</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Converting to target code type </span><span class="si">{</span><span class="n">target_code_type</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-667"><a href="#L-667"><span class="linenos"> 667</span></a>
+</span><span id="L-668"><a href="#L-668"><span class="linenos"> 668</span></a>    <span class="k">for</span> <span class="n">source_code_type</span> <span class="ow">in</span> <span class="n">source_df</span><span class="o">.</span><span class="n">columns</span><span class="p">:</span>
+</span><span id="L-669"><a href="#L-669"><span class="linenos"> 669</span></a>        <span class="c1"># if target code type is the same as thet source code type, no translation, just appending source as target</span>
+</span><span id="L-670"><a href="#L-670"><span class="linenos"> 670</span></a>        <span class="k">if</span> <span class="n">source_code_type</span> <span class="o">==</span> <span class="n">target_code_type</span><span class="p">:</span>
+</span><span id="L-671"><a href="#L-671"><span class="linenos"> 671</span></a>            <span class="n">copy_df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">(</span>
+</span><span id="L-672"><a href="#L-672"><span class="linenos"> 672</span></a>                <span class="p">{</span>
+</span><span id="L-673"><a href="#L-673"><span class="linenos"> 673</span></a>                    <span class="s2">&quot;SOURCE_CONCEPT&quot;</span><span class="p">:</span> <span class="n">source_df</span><span class="p">[</span><span class="n">source_code_type</span><span class="p">],</span>
+</span><span id="L-674"><a href="#L-674"><span class="linenos"> 674</span></a>                    <span class="s2">&quot;SOURCE_CONCEPT_TYPE&quot;</span><span class="p">:</span> <span class="n">source_code_type</span><span class="p">,</span>
+</span><span id="L-675"><a href="#L-675"><span class="linenos"> 675</span></a>                    <span class="s2">&quot;CONCEPT&quot;</span><span class="p">:</span> <span class="n">source_df</span><span class="p">[</span><span class="n">source_code_type</span><span class="p">],</span>
+</span><span id="L-676"><a href="#L-676"><span class="linenos"> 676</span></a>                <span class="p">}</span>
+</span><span id="L-677"><a href="#L-677"><span class="linenos"> 677</span></a>            <span class="p">)</span>
+</span><span id="L-678"><a href="#L-678"><span class="linenos"> 678</span></a>            <span class="n">codes</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">concat</span><span class="p">([</span><span class="n">codes</span><span class="p">,</span> <span class="n">copy_df</span><span class="p">])</span>
+</span><span id="L-679"><a href="#L-679"><span class="linenos"> 679</span></a>            <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span>
+</span><span id="L-680"><a href="#L-680"><span class="linenos"> 680</span></a>                <span class="sa">f</span><span class="s2">&quot;Target code type </span><span class="si">{</span><span class="n">target_code_type</span><span class="si">}</span><span class="s2"> is the same as source code type </span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="n">source_df</span><span class="p">)</span><span class="si">}</span><span class="s2">, copying codes rather than translating&quot;</span>
+</span><span id="L-681"><a href="#L-681"><span class="linenos"> 681</span></a>            <span class="p">)</span>
+</span><span id="L-682"><a href="#L-682"><span class="linenos"> 682</span></a>        <span class="k">else</span><span class="p">:</span>
+</span><span id="L-683"><a href="#L-683"><span class="linenos"> 683</span></a>            <span class="c1"># get the translation filename using source to target code types</span>
+</span><span id="L-684"><a href="#L-684"><span class="linenos"> 684</span></a>            <span class="n">filename</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">source_code_type</span><span class="si">}</span><span class="s2">_to_</span><span class="si">{</span><span class="n">target_code_type</span><span class="si">}</span><span class="s2">.parquet&quot;</span>
+</span><span id="L-685"><a href="#L-685"><span class="linenos"> 685</span></a>            <span class="n">map_path</span> <span class="o">=</span> <span class="n">trud</span><span class="o">.</span><span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="n">filename</span>
 </span><span id="L-686"><a href="#L-686"><span class="linenos"> 686</span></a>
-</span><span id="L-687"><a href="#L-687"><span class="linenos"> 687</span></a>    <span class="n">codes</span> <span class="o">=</span> <span class="n">codes</span><span class="o">.</span><span class="n">dropna</span><span class="p">()</span>  <span class="c1"># delete NaNs</span>
-</span><span id="L-688"><a href="#L-688"><span class="linenos"> 688</span></a>
-</span><span id="L-689"><a href="#L-689"><span class="linenos"> 689</span></a>    <span class="c1"># added concept set type to output if any translations</span>
-</span><span id="L-690"><a href="#L-690"><span class="linenos"> 690</span></a>    <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">codes</span><span class="o">.</span><span class="n">index</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
-</span><span id="L-691"><a href="#L-691"><span class="linenos"> 691</span></a>        <span class="n">codes</span><span class="p">[</span><span class="s2">&quot;CONCEPT_SET&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">concept_name</span>
-</span><span id="L-692"><a href="#L-692"><span class="linenos"> 692</span></a>    <span class="k">else</span><span class="p">:</span>
-</span><span id="L-693"><a href="#L-693"><span class="linenos"> 693</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;No codes converted with target code type </span><span class="si">{</span><span class="n">target_code_type</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-694"><a href="#L-694"><span class="linenos"> 694</span></a>
-</span><span id="L-695"><a href="#L-695"><span class="linenos"> 695</span></a>    <span class="k">return</span> <span class="n">codes</span>
+</span><span id="L-687"><a href="#L-687"><span class="linenos"> 687</span></a>            <span class="c1"># do the mapping if it exists</span>
+</span><span id="L-688"><a href="#L-688"><span class="linenos"> 688</span></a>            <span class="k">if</span> <span class="n">map_path</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
+</span><span id="L-689"><a href="#L-689"><span class="linenos"> 689</span></a>                <span class="c1"># get mapping</span>
+</span><span id="L-690"><a href="#L-690"><span class="linenos"> 690</span></a>                <span class="n">df_map</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_parquet</span><span class="p">(</span><span class="n">map_path</span><span class="p">)</span>
+</span><span id="L-691"><a href="#L-691"><span class="linenos"> 691</span></a>
+</span><span id="L-692"><a href="#L-692"><span class="linenos"> 692</span></a>                <span class="c1"># do mapping</span>
+</span><span id="L-693"><a href="#L-693"><span class="linenos"> 693</span></a>                <span class="n">translated_df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">merge</span><span class="p">(</span>
+</span><span id="L-694"><a href="#L-694"><span class="linenos"> 694</span></a>                    <span class="n">source_df</span><span class="p">[</span><span class="n">source_code_type</span><span class="p">],</span> <span class="n">df_map</span><span class="p">,</span> <span class="n">how</span><span class="o">=</span><span class="s2">&quot;left&quot;</span>
+</span><span id="L-695"><a href="#L-695"><span class="linenos"> 695</span></a>                <span class="p">)</span>
 </span><span id="L-696"><a href="#L-696"><span class="linenos"> 696</span></a>
-</span><span id="L-697"><a href="#L-697"><span class="linenos"> 697</span></a>
-</span><span id="L-698"><a href="#L-698"><span class="linenos"> 698</span></a><span class="k">def</span><span class="w"> </span><span class="nf">sql_row_exist</span><span class="p">(</span>
-</span><span id="L-699"><a href="#L-699"><span class="linenos"> 699</span></a>    <span class="n">conn</span><span class="p">:</span> <span class="n">sqlite3</span><span class="o">.</span><span class="n">Connection</span><span class="p">,</span> <span class="n">table</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">column</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">value</span><span class="p">:</span> <span class="nb">str</span>
-</span><span id="L-700"><a href="#L-700"><span class="linenos"> 700</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="L-701"><a href="#L-701"><span class="linenos"> 701</span></a>    <span class="c1"># Execute and check if a result exists</span>
-</span><span id="L-702"><a href="#L-702"><span class="linenos"> 702</span></a>    <span class="n">cur</span> <span class="o">=</span> <span class="n">conn</span><span class="o">.</span><span class="n">cursor</span><span class="p">()</span>
-</span><span id="L-703"><a href="#L-703"><span class="linenos"> 703</span></a>    <span class="n">query</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;SELECT 1 FROM </span><span class="si">{</span><span class="n">table</span><span class="si">}</span><span class="s2"> WHERE </span><span class="si">{</span><span class="n">column</span><span class="si">}</span><span class="s2"> = ? LIMIT 1;&quot;</span>
-</span><span id="L-704"><a href="#L-704"><span class="linenos"> 704</span></a>    <span class="n">cur</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">query</span><span class="p">,</span> <span class="p">(</span><span class="n">value</span><span class="p">,))</span>
-</span><span id="L-705"><a href="#L-705"><span class="linenos"> 705</span></a>    <span class="n">exists</span> <span class="o">=</span> <span class="n">cur</span><span class="o">.</span><span class="n">fetchone</span><span class="p">()</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span>
-</span><span id="L-706"><a href="#L-706"><span class="linenos"> 706</span></a>
-</span><span id="L-707"><a href="#L-707"><span class="linenos"> 707</span></a>    <span class="k">return</span> <span class="n">exists</span>
+</span><span id="L-697"><a href="#L-697"><span class="linenos"> 697</span></a>                <span class="c1"># normalise the output</span>
+</span><span id="L-698"><a href="#L-698"><span class="linenos"> 698</span></a>                <span class="n">translated_df</span><span class="o">.</span><span class="n">columns</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">Index</span><span class="p">([</span><span class="s2">&quot;SOURCE_CONCEPT&quot;</span><span class="p">,</span> <span class="s2">&quot;CONCEPT&quot;</span><span class="p">])</span>
+</span><span id="L-699"><a href="#L-699"><span class="linenos"> 699</span></a>                <span class="n">translated_df</span><span class="p">[</span><span class="s2">&quot;SOURCE_CONCEPT_TYPE&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">source_code_type</span>
+</span><span id="L-700"><a href="#L-700"><span class="linenos"> 700</span></a>
+</span><span id="L-701"><a href="#L-701"><span class="linenos"> 701</span></a>                <span class="c1"># add to list of codes</span>
+</span><span id="L-702"><a href="#L-702"><span class="linenos"> 702</span></a>                <span class="n">codes</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">concat</span><span class="p">([</span><span class="n">codes</span><span class="p">,</span> <span class="n">translated_df</span><span class="p">])</span>
+</span><span id="L-703"><a href="#L-703"><span class="linenos"> 703</span></a>
+</span><span id="L-704"><a href="#L-704"><span class="linenos"> 704</span></a>            <span class="k">else</span><span class="p">:</span>
+</span><span id="L-705"><a href="#L-705"><span class="linenos"> 705</span></a>                <span class="n">_logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span>
+</span><span id="L-706"><a href="#L-706"><span class="linenos"> 706</span></a>                    <span class="sa">f</span><span class="s2">&quot;No mapping from </span><span class="si">{</span><span class="n">source_code_type</span><span class="si">}</span><span class="s2"> to </span><span class="si">{</span><span class="n">target_code_type</span><span class="si">}</span><span class="s2">, file </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">map_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="s2"> does not exist&quot;</span>
+</span><span id="L-707"><a href="#L-707"><span class="linenos"> 707</span></a>                <span class="p">)</span>
 </span><span id="L-708"><a href="#L-708"><span class="linenos"> 708</span></a>
-</span><span id="L-709"><a href="#L-709"><span class="linenos"> 709</span></a>
-</span><span id="L-710"><a href="#L-710"><span class="linenos"> 710</span></a><span class="k">def</span><span class="w"> </span><span class="nf">write_code_errors</span><span class="p">(</span><span class="n">code_errors</span><span class="p">:</span> <span class="nb">list</span><span class="p">,</span> <span class="n">code_errors_path</span><span class="p">:</span> <span class="n">Path</span><span class="p">):</span>
-</span><span id="L-711"><a href="#L-711"><span class="linenos"> 711</span></a>    <span class="n">err_df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">(</span>
-</span><span id="L-712"><a href="#L-712"><span class="linenos"> 712</span></a>        <span class="p">[</span>
-</span><span id="L-713"><a href="#L-713"><span class="linenos"> 713</span></a>            <span class="p">{</span>
-</span><span id="L-714"><a href="#L-714"><span class="linenos"> 714</span></a>                <span class="s2">&quot;CONCEPT&quot;</span><span class="p">:</span> <span class="s2">&quot;, &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">err</span><span class="o">.</span><span class="n">codes</span><span class="p">[</span><span class="o">~</span><span class="n">err</span><span class="o">.</span><span class="n">mask</span><span class="p">]</span><span class="o">.</span><span class="n">tolist</span><span class="p">()),</span>
-</span><span id="L-715"><a href="#L-715"><span class="linenos"> 715</span></a>                <span class="s2">&quot;VOCABULARY&quot;</span><span class="p">:</span> <span class="n">err</span><span class="o">.</span><span class="n">code_type</span><span class="p">,</span>
-</span><span id="L-716"><a href="#L-716"><span class="linenos"> 716</span></a>                <span class="s2">&quot;SOURCE&quot;</span><span class="p">:</span> <span class="n">err</span><span class="o">.</span><span class="n">codes_file</span><span class="p">,</span>
-</span><span id="L-717"><a href="#L-717"><span class="linenos"> 717</span></a>                <span class="s2">&quot;CAUSE&quot;</span><span class="p">:</span> <span class="n">err</span><span class="o">.</span><span class="n">message</span><span class="p">,</span>
-</span><span id="L-718"><a href="#L-718"><span class="linenos"> 718</span></a>            <span class="p">}</span>
-</span><span id="L-719"><a href="#L-719"><span class="linenos"> 719</span></a>            <span class="k">for</span> <span class="n">err</span> <span class="ow">in</span> <span class="n">code_errors</span>
-</span><span id="L-720"><a href="#L-720"><span class="linenos"> 720</span></a>        <span class="p">]</span>
-</span><span id="L-721"><a href="#L-721"><span class="linenos"> 721</span></a>    <span class="p">)</span>
-</span><span id="L-722"><a href="#L-722"><span class="linenos"> 722</span></a>
-</span><span id="L-723"><a href="#L-723"><span class="linenos"> 723</span></a>    <span class="n">err_df</span> <span class="o">=</span> <span class="n">err_df</span><span class="o">.</span><span class="n">drop_duplicates</span><span class="p">()</span>  <span class="c1"># Remove Duplicates from Error file</span>
-</span><span id="L-724"><a href="#L-724"><span class="linenos"> 724</span></a>    <span class="n">err_df</span> <span class="o">=</span> <span class="n">err_df</span><span class="o">.</span><span class="n">sort_values</span><span class="p">(</span><span class="n">by</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;SOURCE&quot;</span><span class="p">,</span> <span class="s2">&quot;VOCABULARY&quot;</span><span class="p">,</span> <span class="s2">&quot;CONCEPT&quot;</span><span class="p">])</span>
-</span><span id="L-725"><a href="#L-725"><span class="linenos"> 725</span></a>    <span class="n">err_df</span><span class="o">.</span><span class="n">to_csv</span><span class="p">(</span><span class="n">code_errors_path</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">mode</span><span class="o">=</span><span class="s2">&quot;w&quot;</span><span class="p">)</span>
-</span><span id="L-726"><a href="#L-726"><span class="linenos"> 726</span></a>
-</span><span id="L-727"><a href="#L-727"><span class="linenos"> 727</span></a>
-</span><span id="L-728"><a href="#L-728"><span class="linenos"> 728</span></a><span class="k">def</span><span class="w"> </span><span class="nf">write_vocab_version</span><span class="p">(</span><span class="n">phen_path</span><span class="p">:</span> <span class="n">Path</span><span class="p">):</span>
-</span><span id="L-729"><a href="#L-729"><span class="linenos"> 729</span></a>    <span class="c1"># write the vocab version files</span>
-</span><span id="L-730"><a href="#L-730"><span class="linenos"> 730</span></a>
-</span><span id="L-731"><a href="#L-731"><span class="linenos"> 731</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">trud</span><span class="o">.</span><span class="n">VERSION_PATH</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
-</span><span id="L-732"><a href="#L-732"><span class="linenos"> 732</span></a>        <span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span>
-</span><span id="L-733"><a href="#L-733"><span class="linenos"> 733</span></a>            <span class="sa">f</span><span class="s2">&quot;TRUD version path </span><span class="si">{</span><span class="n">trud</span><span class="o">.</span><span class="n">VERSION_PATH</span><span class="si">}</span><span class="s2"> does not exist, please check TRUD is installed&quot;</span>
-</span><span id="L-734"><a href="#L-734"><span class="linenos"> 734</span></a>        <span class="p">)</span>
-</span><span id="L-735"><a href="#L-735"><span class="linenos"> 735</span></a>
-</span><span id="L-736"><a href="#L-736"><span class="linenos"> 736</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">omop</span><span class="o">.</span><span class="n">VERSION_PATH</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
-</span><span id="L-737"><a href="#L-737"><span class="linenos"> 737</span></a>        <span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span>
-</span><span id="L-738"><a href="#L-738"><span class="linenos"> 738</span></a>            <span class="sa">f</span><span class="s2">&quot;OMOP version path </span><span class="si">{</span><span class="n">omop</span><span class="o">.</span><span class="n">VERSION_PATH</span><span class="si">}</span><span class="s2"> does not exist, please check OMOP is installed&quot;</span>
-</span><span id="L-739"><a href="#L-739"><span class="linenos"> 739</span></a>        <span class="p">)</span>
+</span><span id="L-709"><a href="#L-709"><span class="linenos"> 709</span></a>    <span class="n">codes</span> <span class="o">=</span> <span class="n">codes</span><span class="o">.</span><span class="n">dropna</span><span class="p">()</span>  <span class="c1"># delete NaNs</span>
+</span><span id="L-710"><a href="#L-710"><span class="linenos"> 710</span></a>
+</span><span id="L-711"><a href="#L-711"><span class="linenos"> 711</span></a>    <span class="c1"># added concept set type to output if any translations</span>
+</span><span id="L-712"><a href="#L-712"><span class="linenos"> 712</span></a>    <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">codes</span><span class="o">.</span><span class="n">index</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
+</span><span id="L-713"><a href="#L-713"><span class="linenos"> 713</span></a>        <span class="n">codes</span><span class="p">[</span><span class="s2">&quot;CONCEPT_SET&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">concept_name</span>
+</span><span id="L-714"><a href="#L-714"><span class="linenos"> 714</span></a>    <span class="k">else</span><span class="p">:</span>
+</span><span id="L-715"><a href="#L-715"><span class="linenos"> 715</span></a>        <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;No codes converted with target code type </span><span class="si">{</span><span class="n">target_code_type</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-716"><a href="#L-716"><span class="linenos"> 716</span></a>
+</span><span id="L-717"><a href="#L-717"><span class="linenos"> 717</span></a>    <span class="k">return</span> <span class="n">codes</span>
+</span><span id="L-718"><a href="#L-718"><span class="linenos"> 718</span></a>
+</span><span id="L-719"><a href="#L-719"><span class="linenos"> 719</span></a>
+</span><span id="L-720"><a href="#L-720"><span class="linenos"> 720</span></a><span class="k">def</span><span class="w"> </span><span class="nf">_write_code_errors</span><span class="p">(</span><span class="n">code_errors</span><span class="p">:</span> <span class="nb">list</span><span class="p">,</span> <span class="n">code_errors_path</span><span class="p">:</span> <span class="n">Path</span><span class="p">):</span>
+</span><span id="L-721"><a href="#L-721"><span class="linenos"> 721</span></a>    <span class="n">err_df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">(</span>
+</span><span id="L-722"><a href="#L-722"><span class="linenos"> 722</span></a>        <span class="p">[</span>
+</span><span id="L-723"><a href="#L-723"><span class="linenos"> 723</span></a>            <span class="p">{</span>
+</span><span id="L-724"><a href="#L-724"><span class="linenos"> 724</span></a>                <span class="s2">&quot;CONCEPT&quot;</span><span class="p">:</span> <span class="s2">&quot;, &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">err</span><span class="o">.</span><span class="n">codes</span><span class="p">[</span><span class="o">~</span><span class="n">err</span><span class="o">.</span><span class="n">mask</span><span class="p">]</span><span class="o">.</span><span class="n">tolist</span><span class="p">()),</span>
+</span><span id="L-725"><a href="#L-725"><span class="linenos"> 725</span></a>                <span class="s2">&quot;VOCABULARY&quot;</span><span class="p">:</span> <span class="n">err</span><span class="o">.</span><span class="n">code_type</span><span class="p">,</span>
+</span><span id="L-726"><a href="#L-726"><span class="linenos"> 726</span></a>                <span class="s2">&quot;SOURCE&quot;</span><span class="p">:</span> <span class="n">err</span><span class="o">.</span><span class="n">codes_file</span><span class="p">,</span>
+</span><span id="L-727"><a href="#L-727"><span class="linenos"> 727</span></a>                <span class="s2">&quot;CAUSE&quot;</span><span class="p">:</span> <span class="n">err</span><span class="o">.</span><span class="n">message</span><span class="p">,</span>
+</span><span id="L-728"><a href="#L-728"><span class="linenos"> 728</span></a>            <span class="p">}</span>
+</span><span id="L-729"><a href="#L-729"><span class="linenos"> 729</span></a>            <span class="k">for</span> <span class="n">err</span> <span class="ow">in</span> <span class="n">code_errors</span>
+</span><span id="L-730"><a href="#L-730"><span class="linenos"> 730</span></a>        <span class="p">]</span>
+</span><span id="L-731"><a href="#L-731"><span class="linenos"> 731</span></a>    <span class="p">)</span>
+</span><span id="L-732"><a href="#L-732"><span class="linenos"> 732</span></a>
+</span><span id="L-733"><a href="#L-733"><span class="linenos"> 733</span></a>    <span class="n">err_df</span> <span class="o">=</span> <span class="n">err_df</span><span class="o">.</span><span class="n">drop_duplicates</span><span class="p">()</span>  <span class="c1"># Remove Duplicates from Error file</span>
+</span><span id="L-734"><a href="#L-734"><span class="linenos"> 734</span></a>    <span class="n">err_df</span> <span class="o">=</span> <span class="n">err_df</span><span class="o">.</span><span class="n">sort_values</span><span class="p">(</span><span class="n">by</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;SOURCE&quot;</span><span class="p">,</span> <span class="s2">&quot;VOCABULARY&quot;</span><span class="p">,</span> <span class="s2">&quot;CONCEPT&quot;</span><span class="p">])</span>
+</span><span id="L-735"><a href="#L-735"><span class="linenos"> 735</span></a>    <span class="n">err_df</span><span class="o">.</span><span class="n">to_csv</span><span class="p">(</span><span class="n">code_errors_path</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">mode</span><span class="o">=</span><span class="s2">&quot;w&quot;</span><span class="p">)</span>
+</span><span id="L-736"><a href="#L-736"><span class="linenos"> 736</span></a>
+</span><span id="L-737"><a href="#L-737"><span class="linenos"> 737</span></a>
+</span><span id="L-738"><a href="#L-738"><span class="linenos"> 738</span></a><span class="k">def</span><span class="w"> </span><span class="nf">write_vocab_version</span><span class="p">(</span><span class="n">phen_path</span><span class="p">:</span> <span class="n">Path</span><span class="p">):</span>
+</span><span id="L-739"><a href="#L-739"><span class="linenos"> 739</span></a>    <span class="c1"># write the vocab version files</span>
 </span><span id="L-740"><a href="#L-740"><span class="linenos"> 740</span></a>
-</span><span id="L-741"><a href="#L-741"><span class="linenos"> 741</span></a>    <span class="k">with</span> <span class="n">trud</span><span class="o">.</span><span class="n">VERSION_PATH</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="s2">&quot;r&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
-</span><span id="L-742"><a href="#L-742"><span class="linenos"> 742</span></a>        <span class="n">trud_version</span> <span class="o">=</span> <span class="n">yaml</span><span class="o">.</span><span class="n">safe_load</span><span class="p">(</span><span class="n">file</span><span class="p">)</span>
-</span><span id="L-743"><a href="#L-743"><span class="linenos"> 743</span></a>
-</span><span id="L-744"><a href="#L-744"><span class="linenos"> 744</span></a>    <span class="k">with</span> <span class="n">omop</span><span class="o">.</span><span class="n">VERSION_PATH</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="s2">&quot;r&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
-</span><span id="L-745"><a href="#L-745"><span class="linenos"> 745</span></a>        <span class="n">omop_version</span> <span class="o">=</span> <span class="n">yaml</span><span class="o">.</span><span class="n">safe_load</span><span class="p">(</span><span class="n">file</span><span class="p">)</span>
-</span><span id="L-746"><a href="#L-746"><span class="linenos"> 746</span></a>
-</span><span id="L-747"><a href="#L-747"><span class="linenos"> 747</span></a>    <span class="c1"># Create the combined YAML structure</span>
-</span><span id="L-748"><a href="#L-748"><span class="linenos"> 748</span></a>    <span class="n">version_data</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-749"><a href="#L-749"><span class="linenos"> 749</span></a>        <span class="s2">&quot;versions&quot;</span><span class="p">:</span> <span class="p">{</span>
-</span><span id="L-750"><a href="#L-750"><span class="linenos"> 750</span></a>            <span class="s2">&quot;acmc&quot;</span><span class="p">:</span> <span class="n">acmc</span><span class="o">.</span><span class="n">__version__</span><span class="p">,</span>
-</span><span id="L-751"><a href="#L-751"><span class="linenos"> 751</span></a>            <span class="s2">&quot;trud&quot;</span><span class="p">:</span> <span class="n">trud_version</span><span class="p">,</span>
-</span><span id="L-752"><a href="#L-752"><span class="linenos"> 752</span></a>            <span class="s2">&quot;omop&quot;</span><span class="p">:</span> <span class="n">omop_version</span><span class="p">,</span>
-</span><span id="L-753"><a href="#L-753"><span class="linenos"> 753</span></a>        <span class="p">}</span>
-</span><span id="L-754"><a href="#L-754"><span class="linenos"> 754</span></a>    <span class="p">}</span>
-</span><span id="L-755"><a href="#L-755"><span class="linenos"> 755</span></a>
-</span><span id="L-756"><a href="#L-756"><span class="linenos"> 756</span></a>    <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">phen_path</span> <span class="o">/</span> <span class="n">VOCAB_VERSION_FILE</span><span class="p">,</span> <span class="s2">&quot;w&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
-</span><span id="L-757"><a href="#L-757"><span class="linenos"> 757</span></a>        <span class="n">yaml</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span>
-</span><span id="L-758"><a href="#L-758"><span class="linenos"> 758</span></a>            <span class="n">version_data</span><span class="p">,</span>
-</span><span id="L-759"><a href="#L-759"><span class="linenos"> 759</span></a>            <span class="n">file</span><span class="p">,</span>
-</span><span id="L-760"><a href="#L-760"><span class="linenos"> 760</span></a>            <span class="n">Dumper</span><span class="o">=</span><span class="n">util</span><span class="o">.</span><span class="n">QuotedDumper</span><span class="p">,</span>
-</span><span id="L-761"><a href="#L-761"><span class="linenos"> 761</span></a>            <span class="n">default_flow_style</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-</span><span id="L-762"><a href="#L-762"><span class="linenos"> 762</span></a>            <span class="n">sort_keys</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-</span><span id="L-763"><a href="#L-763"><span class="linenos"> 763</span></a>            <span class="n">default_style</span><span class="o">=</span><span class="s1">&#39;&quot;&#39;</span><span class="p">,</span>
-</span><span id="L-764"><a href="#L-764"><span class="linenos"> 764</span></a>        <span class="p">)</span>
+</span><span id="L-741"><a href="#L-741"><span class="linenos"> 741</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">trud</span><span class="o">.</span><span class="n">VERSION_PATH</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
+</span><span id="L-742"><a href="#L-742"><span class="linenos"> 742</span></a>        <span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span>
+</span><span id="L-743"><a href="#L-743"><span class="linenos"> 743</span></a>            <span class="sa">f</span><span class="s2">&quot;TRUD version path </span><span class="si">{</span><span class="n">trud</span><span class="o">.</span><span class="n">VERSION_PATH</span><span class="si">}</span><span class="s2"> does not exist, please check TRUD is installed&quot;</span>
+</span><span id="L-744"><a href="#L-744"><span class="linenos"> 744</span></a>        <span class="p">)</span>
+</span><span id="L-745"><a href="#L-745"><span class="linenos"> 745</span></a>
+</span><span id="L-746"><a href="#L-746"><span class="linenos"> 746</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">omop</span><span class="o">.</span><span class="n">VERSION_PATH</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
+</span><span id="L-747"><a href="#L-747"><span class="linenos"> 747</span></a>        <span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span>
+</span><span id="L-748"><a href="#L-748"><span class="linenos"> 748</span></a>            <span class="sa">f</span><span class="s2">&quot;OMOP version path </span><span class="si">{</span><span class="n">omop</span><span class="o">.</span><span class="n">VERSION_PATH</span><span class="si">}</span><span class="s2"> does not exist, please check OMOP is installed&quot;</span>
+</span><span id="L-749"><a href="#L-749"><span class="linenos"> 749</span></a>        <span class="p">)</span>
+</span><span id="L-750"><a href="#L-750"><span class="linenos"> 750</span></a>
+</span><span id="L-751"><a href="#L-751"><span class="linenos"> 751</span></a>    <span class="k">with</span> <span class="n">trud</span><span class="o">.</span><span class="n">VERSION_PATH</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="s2">&quot;r&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
+</span><span id="L-752"><a href="#L-752"><span class="linenos"> 752</span></a>        <span class="n">trud_version</span> <span class="o">=</span> <span class="n">yaml</span><span class="o">.</span><span class="n">safe_load</span><span class="p">(</span><span class="n">file</span><span class="p">)</span>
+</span><span id="L-753"><a href="#L-753"><span class="linenos"> 753</span></a>
+</span><span id="L-754"><a href="#L-754"><span class="linenos"> 754</span></a>    <span class="k">with</span> <span class="n">omop</span><span class="o">.</span><span class="n">VERSION_PATH</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="s2">&quot;r&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
+</span><span id="L-755"><a href="#L-755"><span class="linenos"> 755</span></a>        <span class="n">omop_version</span> <span class="o">=</span> <span class="n">yaml</span><span class="o">.</span><span class="n">safe_load</span><span class="p">(</span><span class="n">file</span><span class="p">)</span>
+</span><span id="L-756"><a href="#L-756"><span class="linenos"> 756</span></a>
+</span><span id="L-757"><a href="#L-757"><span class="linenos"> 757</span></a>    <span class="c1"># Create the combined YAML structure</span>
+</span><span id="L-758"><a href="#L-758"><span class="linenos"> 758</span></a>    <span class="n">version_data</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-759"><a href="#L-759"><span class="linenos"> 759</span></a>        <span class="s2">&quot;versions&quot;</span><span class="p">:</span> <span class="p">{</span>
+</span><span id="L-760"><a href="#L-760"><span class="linenos"> 760</span></a>            <span class="s2">&quot;acmc&quot;</span><span class="p">:</span> <span class="n">acmc</span><span class="o">.</span><span class="n">__version__</span><span class="p">,</span>
+</span><span id="L-761"><a href="#L-761"><span class="linenos"> 761</span></a>            <span class="s2">&quot;trud&quot;</span><span class="p">:</span> <span class="n">trud_version</span><span class="p">,</span>
+</span><span id="L-762"><a href="#L-762"><span class="linenos"> 762</span></a>            <span class="s2">&quot;omop&quot;</span><span class="p">:</span> <span class="n">omop_version</span><span class="p">,</span>
+</span><span id="L-763"><a href="#L-763"><span class="linenos"> 763</span></a>        <span class="p">}</span>
+</span><span id="L-764"><a href="#L-764"><span class="linenos"> 764</span></a>    <span class="p">}</span>
 </span><span id="L-765"><a href="#L-765"><span class="linenos"> 765</span></a>
-</span><span id="L-766"><a href="#L-766"><span class="linenos"> 766</span></a>
-</span><span id="L-767"><a href="#L-767"><span class="linenos"> 767</span></a><span class="k">def</span><span class="w"> </span><span class="nf">map</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">target_code_type</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
-</span><span id="L-768"><a href="#L-768"><span class="linenos"> 768</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Processing phenotype: </span><span class="si">{</span><span class="n">phen_dir</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-769"><a href="#L-769"><span class="linenos"> 769</span></a>
-</span><span id="L-770"><a href="#L-770"><span class="linenos"> 770</span></a>    <span class="c1"># Validate configuration</span>
-</span><span id="L-771"><a href="#L-771"><span class="linenos"> 771</span></a>    <span class="n">validate</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">)</span>
-</span><span id="L-772"><a href="#L-772"><span class="linenos"> 772</span></a>
-</span><span id="L-773"><a href="#L-773"><span class="linenos"> 773</span></a>    <span class="c1"># initialise paths</span>
-</span><span id="L-774"><a href="#L-774"><span class="linenos"> 774</span></a>    <span class="n">phen_path</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">)</span>
-</span><span id="L-775"><a href="#L-775"><span class="linenos"> 775</span></a>    <span class="n">config_path</span> <span class="o">=</span> <span class="n">phen_path</span> <span class="o">/</span> <span class="n">CONFIG_FILE</span>
+</span><span id="L-766"><a href="#L-766"><span class="linenos"> 766</span></a>    <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">phen_path</span> <span class="o">/</span> <span class="n">VOCAB_VERSION_FILE</span><span class="p">,</span> <span class="s2">&quot;w&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
+</span><span id="L-767"><a href="#L-767"><span class="linenos"> 767</span></a>        <span class="n">yaml</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span>
+</span><span id="L-768"><a href="#L-768"><span class="linenos"> 768</span></a>            <span class="n">version_data</span><span class="p">,</span>
+</span><span id="L-769"><a href="#L-769"><span class="linenos"> 769</span></a>            <span class="n">file</span><span class="p">,</span>
+</span><span id="L-770"><a href="#L-770"><span class="linenos"> 770</span></a>            <span class="n">Dumper</span><span class="o">=</span><span class="n">util</span><span class="o">.</span><span class="n">QuotedDumper</span><span class="p">,</span>
+</span><span id="L-771"><a href="#L-771"><span class="linenos"> 771</span></a>            <span class="n">default_flow_style</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="L-772"><a href="#L-772"><span class="linenos"> 772</span></a>            <span class="n">sort_keys</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="L-773"><a href="#L-773"><span class="linenos"> 773</span></a>            <span class="n">default_style</span><span class="o">=</span><span class="s1">&#39;&quot;&#39;</span><span class="p">,</span>
+</span><span id="L-774"><a href="#L-774"><span class="linenos"> 774</span></a>        <span class="p">)</span>
+</span><span id="L-775"><a href="#L-775"><span class="linenos"> 775</span></a>
 </span><span id="L-776"><a href="#L-776"><span class="linenos"> 776</span></a>
-</span><span id="L-777"><a href="#L-777"><span class="linenos"> 777</span></a>    <span class="c1"># load configuration</span>
-</span><span id="L-778"><a href="#L-778"><span class="linenos"> 778</span></a>    <span class="k">with</span> <span class="n">config_path</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="s2">&quot;r&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
-</span><span id="L-779"><a href="#L-779"><span class="linenos"> 779</span></a>        <span class="n">config</span> <span class="o">=</span> <span class="n">yaml</span><span class="o">.</span><span class="n">safe_load</span><span class="p">(</span><span class="n">file</span><span class="p">)</span>
-</span><span id="L-780"><a href="#L-780"><span class="linenos"> 780</span></a>    <span class="n">phenotype</span> <span class="o">=</span> <span class="n">config</span><span class="p">[</span><span class="s2">&quot;phenotype&quot;</span><span class="p">]</span>
-</span><span id="L-781"><a href="#L-781"><span class="linenos"> 781</span></a>
-</span><span id="L-782"><a href="#L-782"><span class="linenos"> 782</span></a>    <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">phenotype</span><span class="p">[</span><span class="s2">&quot;map&quot;</span><span class="p">])</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
-</span><span id="L-783"><a href="#L-783"><span class="linenos"> 783</span></a>        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;No map codes defined in the phenotype configuration&quot;</span><span class="p">)</span>
-</span><span id="L-784"><a href="#L-784"><span class="linenos"> 784</span></a>
-</span><span id="L-785"><a href="#L-785"><span class="linenos"> 785</span></a>    <span class="k">if</span> <span class="n">target_code_type</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">target_code_type</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">phenotype</span><span class="p">[</span><span class="s2">&quot;map&quot;</span><span class="p">]:</span>
-</span><span id="L-786"><a href="#L-786"><span class="linenos"> 786</span></a>        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
-</span><span id="L-787"><a href="#L-787"><span class="linenos"> 787</span></a>            <span class="sa">f</span><span class="s2">&quot;Target code type </span><span class="si">{</span><span class="n">target_code_type</span><span class="si">}</span><span class="s2"> not in phenotype configuration map </span><span class="si">{</span><span class="n">phenotype</span><span class="p">[</span><span class="s1">&#39;map&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-788"><a href="#L-788"><span class="linenos"> 788</span></a>        <span class="p">)</span>
-</span><span id="L-789"><a href="#L-789"><span class="linenos"> 789</span></a>
-</span><span id="L-790"><a href="#L-790"><span class="linenos"> 790</span></a>    <span class="k">if</span> <span class="n">target_code_type</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-791"><a href="#L-791"><span class="linenos"> 791</span></a>        <span class="n">map_target_code_type</span><span class="p">(</span><span class="n">phen_path</span><span class="p">,</span> <span class="n">phenotype</span><span class="p">,</span> <span class="n">target_code_type</span><span class="p">)</span>
-</span><span id="L-792"><a href="#L-792"><span class="linenos"> 792</span></a>    <span class="k">else</span><span class="p">:</span>
-</span><span id="L-793"><a href="#L-793"><span class="linenos"> 793</span></a>        <span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">phenotype</span><span class="p">[</span><span class="s2">&quot;map&quot;</span><span class="p">]:</span>
-</span><span id="L-794"><a href="#L-794"><span class="linenos"> 794</span></a>            <span class="n">map_target_code_type</span><span class="p">(</span><span class="n">phen_path</span><span class="p">,</span> <span class="n">phenotype</span><span class="p">,</span> <span class="n">t</span><span class="p">)</span>
-</span><span id="L-795"><a href="#L-795"><span class="linenos"> 795</span></a>
-</span><span id="L-796"><a href="#L-796"><span class="linenos"> 796</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Phenotype processed successfully&quot;</span><span class="p">)</span>
-</span><span id="L-797"><a href="#L-797"><span class="linenos"> 797</span></a>
-</span><span id="L-798"><a href="#L-798"><span class="linenos"> 798</span></a>
-</span><span id="L-799"><a href="#L-799"><span class="linenos"> 799</span></a><span class="k">def</span><span class="w"> </span><span class="nf">map_target_code_type</span><span class="p">(</span><span class="n">phen_path</span><span class="p">:</span> <span class="n">Path</span><span class="p">,</span> <span class="n">phenotype</span><span class="p">:</span> <span class="nb">dict</span><span class="p">,</span> <span class="n">target_code_type</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
-</span><span id="L-800"><a href="#L-800"><span class="linenos"> 800</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Target coding format: </span><span class="si">{</span><span class="n">target_code_type</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-801"><a href="#L-801"><span class="linenos"> 801</span></a>    <span class="n">concepts_path</span> <span class="o">=</span> <span class="n">phen_path</span> <span class="o">/</span> <span class="n">CONCEPTS_DIR</span>
-</span><span id="L-802"><a href="#L-802"><span class="linenos"> 802</span></a>    <span class="c1"># Create output dataframe</span>
-</span><span id="L-803"><a href="#L-803"><span class="linenos"> 803</span></a>    <span class="n">out</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">([])</span>
-</span><span id="L-804"><a href="#L-804"><span class="linenos"> 804</span></a>    <span class="n">code_errors</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-777"><a href="#L-777"><span class="linenos"> 777</span></a><span class="k">def</span><span class="w"> </span><span class="nf">map</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">target_code_type</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
+</span><span id="L-778"><a href="#L-778"><span class="linenos"> 778</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Processing phenotype: </span><span class="si">{</span><span class="n">phen_dir</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-779"><a href="#L-779"><span class="linenos"> 779</span></a>
+</span><span id="L-780"><a href="#L-780"><span class="linenos"> 780</span></a>    <span class="c1"># Validate configuration</span>
+</span><span id="L-781"><a href="#L-781"><span class="linenos"> 781</span></a>    <span class="n">validate</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">)</span>
+</span><span id="L-782"><a href="#L-782"><span class="linenos"> 782</span></a>
+</span><span id="L-783"><a href="#L-783"><span class="linenos"> 783</span></a>    <span class="c1"># initialise paths</span>
+</span><span id="L-784"><a href="#L-784"><span class="linenos"> 784</span></a>    <span class="n">phen_path</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">)</span>
+</span><span id="L-785"><a href="#L-785"><span class="linenos"> 785</span></a>    <span class="n">config_path</span> <span class="o">=</span> <span class="n">phen_path</span> <span class="o">/</span> <span class="n">CONFIG_FILE</span>
+</span><span id="L-786"><a href="#L-786"><span class="linenos"> 786</span></a>
+</span><span id="L-787"><a href="#L-787"><span class="linenos"> 787</span></a>    <span class="c1"># load configuration</span>
+</span><span id="L-788"><a href="#L-788"><span class="linenos"> 788</span></a>    <span class="k">with</span> <span class="n">config_path</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="s2">&quot;r&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
+</span><span id="L-789"><a href="#L-789"><span class="linenos"> 789</span></a>        <span class="n">config</span> <span class="o">=</span> <span class="n">yaml</span><span class="o">.</span><span class="n">safe_load</span><span class="p">(</span><span class="n">file</span><span class="p">)</span>
+</span><span id="L-790"><a href="#L-790"><span class="linenos"> 790</span></a>    <span class="n">phenotype</span> <span class="o">=</span> <span class="n">config</span><span class="p">[</span><span class="s2">&quot;phenotype&quot;</span><span class="p">]</span>
+</span><span id="L-791"><a href="#L-791"><span class="linenos"> 791</span></a>
+</span><span id="L-792"><a href="#L-792"><span class="linenos"> 792</span></a>    <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">phenotype</span><span class="p">[</span><span class="s2">&quot;map&quot;</span><span class="p">])</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
+</span><span id="L-793"><a href="#L-793"><span class="linenos"> 793</span></a>        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;No map codes defined in the phenotype configuration&quot;</span><span class="p">)</span>
+</span><span id="L-794"><a href="#L-794"><span class="linenos"> 794</span></a>
+</span><span id="L-795"><a href="#L-795"><span class="linenos"> 795</span></a>    <span class="k">if</span> <span class="n">target_code_type</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">target_code_type</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">phenotype</span><span class="p">[</span><span class="s2">&quot;map&quot;</span><span class="p">]:</span>
+</span><span id="L-796"><a href="#L-796"><span class="linenos"> 796</span></a>        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
+</span><span id="L-797"><a href="#L-797"><span class="linenos"> 797</span></a>            <span class="sa">f</span><span class="s2">&quot;Target code type </span><span class="si">{</span><span class="n">target_code_type</span><span class="si">}</span><span class="s2"> not in phenotype configuration map </span><span class="si">{</span><span class="n">phenotype</span><span class="p">[</span><span class="s1">&#39;map&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-798"><a href="#L-798"><span class="linenos"> 798</span></a>        <span class="p">)</span>
+</span><span id="L-799"><a href="#L-799"><span class="linenos"> 799</span></a>
+</span><span id="L-800"><a href="#L-800"><span class="linenos"> 800</span></a>    <span class="k">if</span> <span class="n">target_code_type</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-801"><a href="#L-801"><span class="linenos"> 801</span></a>        <span class="n">_map_target_code_type</span><span class="p">(</span><span class="n">phen_path</span><span class="p">,</span> <span class="n">phenotype</span><span class="p">,</span> <span class="n">target_code_type</span><span class="p">)</span>
+</span><span id="L-802"><a href="#L-802"><span class="linenos"> 802</span></a>    <span class="k">else</span><span class="p">:</span>
+</span><span id="L-803"><a href="#L-803"><span class="linenos"> 803</span></a>        <span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">phenotype</span><span class="p">[</span><span class="s2">&quot;map&quot;</span><span class="p">]:</span>
+</span><span id="L-804"><a href="#L-804"><span class="linenos"> 804</span></a>            <span class="n">_map_target_code_type</span><span class="p">(</span><span class="n">phen_path</span><span class="p">,</span> <span class="n">phenotype</span><span class="p">,</span> <span class="n">t</span><span class="p">)</span>
 </span><span id="L-805"><a href="#L-805"><span class="linenos"> 805</span></a>
-</span><span id="L-806"><a href="#L-806"><span class="linenos"> 806</span></a>    <span class="c1"># Process each folder in codes section</span>
-</span><span id="L-807"><a href="#L-807"><span class="linenos"> 807</span></a>    <span class="k">for</span> <span class="n">concept_set</span> <span class="ow">in</span> <span class="n">phenotype</span><span class="p">[</span><span class="s2">&quot;concept_sets&quot;</span><span class="p">]:</span>
-</span><span id="L-808"><a href="#L-808"><span class="linenos"> 808</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;--- </span><span class="si">{</span><span class="n">concept_set</span><span class="p">[</span><span class="s1">&#39;file&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2"> ---&quot;</span><span class="p">)</span>
-</span><span id="L-809"><a href="#L-809"><span class="linenos"> 809</span></a>
-</span><span id="L-810"><a href="#L-810"><span class="linenos"> 810</span></a>        <span class="c1"># Load code file</span>
-</span><span id="L-811"><a href="#L-811"><span class="linenos"> 811</span></a>        <span class="n">codes_file_path</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="n">concepts_path</span> <span class="o">/</span> <span class="n">concept_set</span><span class="p">[</span><span class="s2">&quot;file&quot;</span><span class="p">][</span><span class="s2">&quot;path&quot;</span><span class="p">])</span>
-</span><span id="L-812"><a href="#L-812"><span class="linenos"> 812</span></a>        <span class="n">df</span> <span class="o">=</span> <span class="n">read_table_file</span><span class="p">(</span><span class="n">codes_file_path</span><span class="p">)</span>
-</span><span id="L-813"><a href="#L-813"><span class="linenos"> 813</span></a>
-</span><span id="L-814"><a href="#L-814"><span class="linenos"> 814</span></a>        <span class="c1"># process structural actions</span>
-</span><span id="L-815"><a href="#L-815"><span class="linenos"> 815</span></a>        <span class="n">df</span> <span class="o">=</span> <span class="n">process_actions</span><span class="p">(</span><span class="n">df</span><span class="p">,</span> <span class="n">concept_set</span><span class="p">)</span>
-</span><span id="L-816"><a href="#L-816"><span class="linenos"> 816</span></a>
-</span><span id="L-817"><a href="#L-817"><span class="linenos"> 817</span></a>        <span class="c1"># preprocessing and validate of source concepts</span>
-</span><span id="L-818"><a href="#L-818"><span class="linenos"> 818</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">&quot;Processing and validating source concept codes&quot;</span><span class="p">)</span>
-</span><span id="L-819"><a href="#L-819"><span class="linenos"> 819</span></a>        <span class="n">df</span><span class="p">,</span> <span class="n">errors</span> <span class="o">=</span> <span class="n">preprocess_source_concepts</span><span class="p">(</span>
-</span><span id="L-820"><a href="#L-820"><span class="linenos"> 820</span></a>            <span class="n">df</span><span class="p">,</span>
-</span><span id="L-821"><a href="#L-821"><span class="linenos"> 821</span></a>            <span class="n">concept_set</span><span class="p">,</span>
-</span><span id="L-822"><a href="#L-822"><span class="linenos"> 822</span></a>            <span class="n">codes_file_path</span><span class="p">,</span>
-</span><span id="L-823"><a href="#L-823"><span class="linenos"> 823</span></a>        <span class="p">)</span>
-</span><span id="L-824"><a href="#L-824"><span class="linenos"> 824</span></a>
-</span><span id="L-825"><a href="#L-825"><span class="linenos"> 825</span></a>        <span class="c1"># create df with just the source code columns</span>
-</span><span id="L-826"><a href="#L-826"><span class="linenos"> 826</span></a>        <span class="n">source_column_names</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">concept_set</span><span class="p">[</span><span class="s2">&quot;file&quot;</span><span class="p">][</span><span class="s2">&quot;columns&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span>
-</span><span id="L-827"><a href="#L-827"><span class="linenos"> 827</span></a>        <span class="n">source_df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="n">source_column_names</span><span class="p">]</span>
-</span><span id="L-828"><a href="#L-828"><span class="linenos"> 828</span></a>
-</span><span id="L-829"><a href="#L-829"><span class="linenos"> 829</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">source_df</span><span class="o">.</span><span class="n">columns</span><span class="p">)</span>
-</span><span id="L-830"><a href="#L-830"><span class="linenos"> 830</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">source_df</span><span class="o">.</span><span class="n">head</span><span class="p">())</span>
-</span><span id="L-831"><a href="#L-831"><span class="linenos"> 831</span></a>
-</span><span id="L-832"><a href="#L-832"><span class="linenos"> 832</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Length of errors from preprocess_source_concepts </span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="n">errors</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-833"><a href="#L-833"><span class="linenos"> 833</span></a>        <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">errors</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
-</span><span id="L-834"><a href="#L-834"><span class="linenos"> 834</span></a>            <span class="n">code_errors</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">errors</span><span class="p">)</span>
-</span><span id="L-835"><a href="#L-835"><span class="linenos"> 835</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot; Length of code_errors </span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="n">code_errors</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-836"><a href="#L-836"><span class="linenos"> 836</span></a>
-</span><span id="L-837"><a href="#L-837"><span class="linenos"> 837</span></a>        <span class="c1"># Map source concepts codes to target codes</span>
-</span><span id="L-838"><a href="#L-838"><span class="linenos"> 838</span></a>        <span class="c1"># if processing a source coding list with categorical data</span>
-</span><span id="L-839"><a href="#L-839"><span class="linenos"> 839</span></a>        <span class="k">if</span> <span class="p">(</span>
-</span><span id="L-840"><a href="#L-840"><span class="linenos"> 840</span></a>            <span class="s2">&quot;actions&quot;</span> <span class="ow">in</span> <span class="n">concept_set</span><span class="p">[</span><span class="s2">&quot;file&quot;</span><span class="p">]</span>
-</span><span id="L-841"><a href="#L-841"><span class="linenos"> 841</span></a>            <span class="ow">and</span> <span class="s2">&quot;divide_col&quot;</span> <span class="ow">in</span> <span class="n">concept_set</span><span class="p">[</span><span class="s2">&quot;file&quot;</span><span class="p">][</span><span class="s2">&quot;actions&quot;</span><span class="p">]</span>
-</span><span id="L-842"><a href="#L-842"><span class="linenos"> 842</span></a>            <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">df</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span>
-</span><span id="L-843"><a href="#L-843"><span class="linenos"> 843</span></a>        <span class="p">):</span>
-</span><span id="L-844"><a href="#L-844"><span class="linenos"> 844</span></a>            <span class="n">divide_col</span> <span class="o">=</span> <span class="n">concept_set</span><span class="p">[</span><span class="s2">&quot;file&quot;</span><span class="p">][</span><span class="s2">&quot;actions&quot;</span><span class="p">][</span><span class="s2">&quot;divide_col&quot;</span><span class="p">]</span>
-</span><span id="L-845"><a href="#L-845"><span class="linenos"> 845</span></a>            <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Action: Dividing Table by </span><span class="si">{</span><span class="n">divide_col</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-846"><a href="#L-846"><span class="linenos"> 846</span></a>            <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;column into: </span><span class="si">{</span><span class="n">df</span><span class="p">[</span><span class="n">divide_col</span><span class="p">]</span><span class="o">.</span><span class="n">unique</span><span class="p">()</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-847"><a href="#L-847"><span class="linenos"> 847</span></a>            <span class="n">df_grp</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">groupby</span><span class="p">(</span><span class="n">divide_col</span><span class="p">)</span>
-</span><span id="L-848"><a href="#L-848"><span class="linenos"> 848</span></a>            <span class="k">for</span> <span class="n">cat</span><span class="p">,</span> <span class="n">grp</span> <span class="ow">in</span> <span class="n">df_grp</span><span class="p">:</span>
-</span><span id="L-849"><a href="#L-849"><span class="linenos"> 849</span></a>                <span class="k">if</span> <span class="n">cat</span> <span class="o">==</span> <span class="n">concept_set</span><span class="p">[</span><span class="s2">&quot;file&quot;</span><span class="p">][</span><span class="s2">&quot;category&quot;</span><span class="p">]:</span>
-</span><span id="L-850"><a href="#L-850"><span class="linenos"> 850</span></a>                    <span class="n">grp</span> <span class="o">=</span> <span class="n">grp</span><span class="o">.</span><span class="n">drop</span><span class="p">(</span><span class="n">columns</span><span class="o">=</span><span class="p">[</span><span class="n">divide_col</span><span class="p">])</span>  <span class="c1"># delete categorical column</span>
-</span><span id="L-851"><a href="#L-851"><span class="linenos"> 851</span></a>                    <span class="n">source_df</span> <span class="o">=</span> <span class="n">grp</span><span class="p">[</span><span class="n">source_column_names</span><span class="p">]</span>
-</span><span id="L-852"><a href="#L-852"><span class="linenos"> 852</span></a>                    <span class="n">trans_out</span> <span class="o">=</span> <span class="n">translate_codes</span><span class="p">(</span>
-</span><span id="L-853"><a href="#L-853"><span class="linenos"> 853</span></a>                        <span class="n">source_df</span><span class="p">,</span>
-</span><span id="L-854"><a href="#L-854"><span class="linenos"> 854</span></a>                        <span class="n">target_code_type</span><span class="o">=</span><span class="n">target_code_type</span><span class="p">,</span>
-</span><span id="L-855"><a href="#L-855"><span class="linenos"> 855</span></a>                        <span class="n">concept_name</span><span class="o">=</span><span class="n">concept_set</span><span class="p">[</span><span class="s2">&quot;name&quot;</span><span class="p">],</span>
-</span><span id="L-856"><a href="#L-856"><span class="linenos"> 856</span></a>                    <span class="p">)</span>
-</span><span id="L-857"><a href="#L-857"><span class="linenos"> 857</span></a>                    <span class="n">out</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">concat</span><span class="p">([</span><span class="n">out</span><span class="p">,</span> <span class="n">trans_out</span><span class="p">])</span>
-</span><span id="L-858"><a href="#L-858"><span class="linenos"> 858</span></a>        <span class="k">else</span><span class="p">:</span>
-</span><span id="L-859"><a href="#L-859"><span class="linenos"> 859</span></a>            <span class="n">source_df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="n">source_column_names</span><span class="p">]</span>
-</span><span id="L-860"><a href="#L-860"><span class="linenos"> 860</span></a>            <span class="n">trans_out</span> <span class="o">=</span> <span class="n">translate_codes</span><span class="p">(</span>
-</span><span id="L-861"><a href="#L-861"><span class="linenos"> 861</span></a>                <span class="n">source_df</span><span class="p">,</span>
-</span><span id="L-862"><a href="#L-862"><span class="linenos"> 862</span></a>                <span class="n">target_code_type</span><span class="o">=</span><span class="n">target_code_type</span><span class="p">,</span>
-</span><span id="L-863"><a href="#L-863"><span class="linenos"> 863</span></a>                <span class="n">concept_name</span><span class="o">=</span><span class="n">concept_set</span><span class="p">[</span><span class="s2">&quot;name&quot;</span><span class="p">],</span>
-</span><span id="L-864"><a href="#L-864"><span class="linenos"> 864</span></a>            <span class="p">)</span>
-</span><span id="L-865"><a href="#L-865"><span class="linenos"> 865</span></a>            <span class="n">out</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">concat</span><span class="p">([</span><span class="n">out</span><span class="p">,</span> <span class="n">trans_out</span><span class="p">])</span>
-</span><span id="L-866"><a href="#L-866"><span class="linenos"> 866</span></a>
-</span><span id="L-867"><a href="#L-867"><span class="linenos"> 867</span></a>    <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">code_errors</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
-</span><span id="L-868"><a href="#L-868"><span class="linenos"> 868</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;The map processing has </span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="n">code_errors</span><span class="p">)</span><span class="si">}</span><span class="s2"> errors&quot;</span><span class="p">)</span>
-</span><span id="L-869"><a href="#L-869"><span class="linenos"> 869</span></a>        <span class="n">error_path</span> <span class="o">=</span> <span class="n">phen_path</span> <span class="o">/</span> <span class="n">MAP_DIR</span> <span class="o">/</span> <span class="s2">&quot;errors&quot;</span>
-</span><span id="L-870"><a href="#L-870"><span class="linenos"> 870</span></a>        <span class="n">error_path</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">parents</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-871"><a href="#L-871"><span class="linenos"> 871</span></a>        <span class="n">error_filename</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">target_code_type</span><span class="si">}</span><span class="s2">-code-errors.csv&quot;</span>
-</span><span id="L-872"><a href="#L-872"><span class="linenos"> 872</span></a>        <span class="n">write_code_errors</span><span class="p">(</span><span class="n">code_errors</span><span class="p">,</span> <span class="n">error_path</span> <span class="o">/</span> <span class="n">error_filename</span><span class="p">)</span>
-</span><span id="L-873"><a href="#L-873"><span class="linenos"> 873</span></a>
-</span><span id="L-874"><a href="#L-874"><span class="linenos"> 874</span></a>    <span class="c1"># Check there is output from processing</span>
-</span><span id="L-875"><a href="#L-875"><span class="linenos"> 875</span></a>    <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">out</span><span class="o">.</span><span class="n">index</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
-</span><span id="L-876"><a href="#L-876"><span class="linenos"> 876</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;No output after map processing&quot;</span><span class="p">)</span>
-</span><span id="L-877"><a href="#L-877"><span class="linenos"> 877</span></a>        <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span>
-</span><span id="L-878"><a href="#L-878"><span class="linenos"> 878</span></a>            <span class="sa">f</span><span class="s2">&quot;No output after map processing, check config </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">phen_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-879"><a href="#L-879"><span class="linenos"> 879</span></a>        <span class="p">)</span>
-</span><span id="L-880"><a href="#L-880"><span class="linenos"> 880</span></a>
-</span><span id="L-881"><a href="#L-881"><span class="linenos"> 881</span></a>    <span class="c1"># final processing</span>
-</span><span id="L-882"><a href="#L-882"><span class="linenos"> 882</span></a>    <span class="n">out</span> <span class="o">=</span> <span class="n">out</span><span class="o">.</span><span class="n">reset_index</span><span class="p">(</span><span class="n">drop</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-883"><a href="#L-883"><span class="linenos"> 883</span></a>    <span class="n">out</span> <span class="o">=</span> <span class="n">out</span><span class="o">.</span><span class="n">drop_duplicates</span><span class="p">(</span><span class="n">subset</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;CONCEPT_SET&quot;</span><span class="p">,</span> <span class="s2">&quot;CONCEPT&quot;</span><span class="p">])</span>
-</span><span id="L-884"><a href="#L-884"><span class="linenos"> 884</span></a>    <span class="n">out</span> <span class="o">=</span> <span class="n">out</span><span class="o">.</span><span class="n">sort_values</span><span class="p">(</span><span class="n">by</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;CONCEPT_SET&quot;</span><span class="p">,</span> <span class="s2">&quot;CONCEPT&quot;</span><span class="p">])</span>
+</span><span id="L-806"><a href="#L-806"><span class="linenos"> 806</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Phenotype processed successfully&quot;</span><span class="p">)</span>
+</span><span id="L-807"><a href="#L-807"><span class="linenos"> 807</span></a>
+</span><span id="L-808"><a href="#L-808"><span class="linenos"> 808</span></a>
+</span><span id="L-809"><a href="#L-809"><span class="linenos"> 809</span></a><span class="k">def</span><span class="w"> </span><span class="nf">_map_target_code_type</span><span class="p">(</span><span class="n">phen_path</span><span class="p">:</span> <span class="n">Path</span><span class="p">,</span> <span class="n">phenotype</span><span class="p">:</span> <span class="nb">dict</span><span class="p">,</span> <span class="n">target_code_type</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
+</span><span id="L-810"><a href="#L-810"><span class="linenos"> 810</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Target coding format: </span><span class="si">{</span><span class="n">target_code_type</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-811"><a href="#L-811"><span class="linenos"> 811</span></a>    <span class="n">concepts_path</span> <span class="o">=</span> <span class="n">phen_path</span> <span class="o">/</span> <span class="n">CONCEPTS_DIR</span>
+</span><span id="L-812"><a href="#L-812"><span class="linenos"> 812</span></a>    <span class="c1"># Create output dataframe</span>
+</span><span id="L-813"><a href="#L-813"><span class="linenos"> 813</span></a>    <span class="n">out</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">([])</span>
+</span><span id="L-814"><a href="#L-814"><span class="linenos"> 814</span></a>    <span class="n">code_errors</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-815"><a href="#L-815"><span class="linenos"> 815</span></a>
+</span><span id="L-816"><a href="#L-816"><span class="linenos"> 816</span></a>    <span class="c1"># Process each folder in codes section</span>
+</span><span id="L-817"><a href="#L-817"><span class="linenos"> 817</span></a>    <span class="k">for</span> <span class="n">concept_set</span> <span class="ow">in</span> <span class="n">phenotype</span><span class="p">[</span><span class="s2">&quot;concept_sets&quot;</span><span class="p">]:</span>
+</span><span id="L-818"><a href="#L-818"><span class="linenos"> 818</span></a>        <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;--- </span><span class="si">{</span><span class="n">concept_set</span><span class="p">[</span><span class="s1">&#39;file&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2"> ---&quot;</span><span class="p">)</span>
+</span><span id="L-819"><a href="#L-819"><span class="linenos"> 819</span></a>
+</span><span id="L-820"><a href="#L-820"><span class="linenos"> 820</span></a>        <span class="c1"># Load code file</span>
+</span><span id="L-821"><a href="#L-821"><span class="linenos"> 821</span></a>        <span class="n">codes_file_path</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="n">concepts_path</span> <span class="o">/</span> <span class="n">concept_set</span><span class="p">[</span><span class="s2">&quot;file&quot;</span><span class="p">][</span><span class="s2">&quot;path&quot;</span><span class="p">])</span>
+</span><span id="L-822"><a href="#L-822"><span class="linenos"> 822</span></a>        <span class="n">df</span> <span class="o">=</span> <span class="n">_read_table_file</span><span class="p">(</span><span class="n">codes_file_path</span><span class="p">)</span>
+</span><span id="L-823"><a href="#L-823"><span class="linenos"> 823</span></a>
+</span><span id="L-824"><a href="#L-824"><span class="linenos"> 824</span></a>        <span class="c1"># process structural actions</span>
+</span><span id="L-825"><a href="#L-825"><span class="linenos"> 825</span></a>        <span class="n">df</span> <span class="o">=</span> <span class="n">_process_actions</span><span class="p">(</span><span class="n">df</span><span class="p">,</span> <span class="n">concept_set</span><span class="p">)</span>
+</span><span id="L-826"><a href="#L-826"><span class="linenos"> 826</span></a>
+</span><span id="L-827"><a href="#L-827"><span class="linenos"> 827</span></a>        <span class="c1"># preprocessing and validate of source concepts</span>
+</span><span id="L-828"><a href="#L-828"><span class="linenos"> 828</span></a>        <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">&quot;Processing and validating source concept codes&quot;</span><span class="p">)</span>
+</span><span id="L-829"><a href="#L-829"><span class="linenos"> 829</span></a>        <span class="n">df</span><span class="p">,</span> <span class="n">errors</span> <span class="o">=</span> <span class="n">_preprocess_source_concepts</span><span class="p">(</span>
+</span><span id="L-830"><a href="#L-830"><span class="linenos"> 830</span></a>            <span class="n">df</span><span class="p">,</span>
+</span><span id="L-831"><a href="#L-831"><span class="linenos"> 831</span></a>            <span class="n">concept_set</span><span class="p">,</span>
+</span><span id="L-832"><a href="#L-832"><span class="linenos"> 832</span></a>            <span class="n">codes_file_path</span><span class="p">,</span>
+</span><span id="L-833"><a href="#L-833"><span class="linenos"> 833</span></a>        <span class="p">)</span>
+</span><span id="L-834"><a href="#L-834"><span class="linenos"> 834</span></a>
+</span><span id="L-835"><a href="#L-835"><span class="linenos"> 835</span></a>        <span class="c1"># create df with just the source code columns</span>
+</span><span id="L-836"><a href="#L-836"><span class="linenos"> 836</span></a>        <span class="n">source_column_names</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">concept_set</span><span class="p">[</span><span class="s2">&quot;file&quot;</span><span class="p">][</span><span class="s2">&quot;columns&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span>
+</span><span id="L-837"><a href="#L-837"><span class="linenos"> 837</span></a>        <span class="n">source_df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="n">source_column_names</span><span class="p">]</span>
+</span><span id="L-838"><a href="#L-838"><span class="linenos"> 838</span></a>
+</span><span id="L-839"><a href="#L-839"><span class="linenos"> 839</span></a>        <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">source_df</span><span class="o">.</span><span class="n">columns</span><span class="p">)</span>
+</span><span id="L-840"><a href="#L-840"><span class="linenos"> 840</span></a>        <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">source_df</span><span class="o">.</span><span class="n">head</span><span class="p">())</span>
+</span><span id="L-841"><a href="#L-841"><span class="linenos"> 841</span></a>
+</span><span id="L-842"><a href="#L-842"><span class="linenos"> 842</span></a>        <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span>
+</span><span id="L-843"><a href="#L-843"><span class="linenos"> 843</span></a>            <span class="sa">f</span><span class="s2">&quot;Length of errors from _preprocess_source_concepts </span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="n">errors</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-844"><a href="#L-844"><span class="linenos"> 844</span></a>        <span class="p">)</span>
+</span><span id="L-845"><a href="#L-845"><span class="linenos"> 845</span></a>        <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">errors</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
+</span><span id="L-846"><a href="#L-846"><span class="linenos"> 846</span></a>            <span class="n">code_errors</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">errors</span><span class="p">)</span>
+</span><span id="L-847"><a href="#L-847"><span class="linenos"> 847</span></a>        <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot; Length of code_errors </span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="n">code_errors</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-848"><a href="#L-848"><span class="linenos"> 848</span></a>
+</span><span id="L-849"><a href="#L-849"><span class="linenos"> 849</span></a>        <span class="c1"># Map source concepts codes to target codes</span>
+</span><span id="L-850"><a href="#L-850"><span class="linenos"> 850</span></a>        <span class="c1"># if processing a source coding list with categorical data</span>
+</span><span id="L-851"><a href="#L-851"><span class="linenos"> 851</span></a>        <span class="k">if</span> <span class="p">(</span>
+</span><span id="L-852"><a href="#L-852"><span class="linenos"> 852</span></a>            <span class="s2">&quot;actions&quot;</span> <span class="ow">in</span> <span class="n">concept_set</span><span class="p">[</span><span class="s2">&quot;file&quot;</span><span class="p">]</span>
+</span><span id="L-853"><a href="#L-853"><span class="linenos"> 853</span></a>            <span class="ow">and</span> <span class="s2">&quot;divide_col&quot;</span> <span class="ow">in</span> <span class="n">concept_set</span><span class="p">[</span><span class="s2">&quot;file&quot;</span><span class="p">][</span><span class="s2">&quot;actions&quot;</span><span class="p">]</span>
+</span><span id="L-854"><a href="#L-854"><span class="linenos"> 854</span></a>            <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">df</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span>
+</span><span id="L-855"><a href="#L-855"><span class="linenos"> 855</span></a>        <span class="p">):</span>
+</span><span id="L-856"><a href="#L-856"><span class="linenos"> 856</span></a>            <span class="n">divide_col</span> <span class="o">=</span> <span class="n">concept_set</span><span class="p">[</span><span class="s2">&quot;file&quot;</span><span class="p">][</span><span class="s2">&quot;actions&quot;</span><span class="p">][</span><span class="s2">&quot;divide_col&quot;</span><span class="p">]</span>
+</span><span id="L-857"><a href="#L-857"><span class="linenos"> 857</span></a>            <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Action: Dividing Table by </span><span class="si">{</span><span class="n">divide_col</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-858"><a href="#L-858"><span class="linenos"> 858</span></a>            <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;column into: </span><span class="si">{</span><span class="n">df</span><span class="p">[</span><span class="n">divide_col</span><span class="p">]</span><span class="o">.</span><span class="n">unique</span><span class="p">()</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-859"><a href="#L-859"><span class="linenos"> 859</span></a>            <span class="n">df_grp</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">groupby</span><span class="p">(</span><span class="n">divide_col</span><span class="p">)</span>
+</span><span id="L-860"><a href="#L-860"><span class="linenos"> 860</span></a>            <span class="k">for</span> <span class="n">cat</span><span class="p">,</span> <span class="n">grp</span> <span class="ow">in</span> <span class="n">df_grp</span><span class="p">:</span>
+</span><span id="L-861"><a href="#L-861"><span class="linenos"> 861</span></a>                <span class="k">if</span> <span class="n">cat</span> <span class="o">==</span> <span class="n">concept_set</span><span class="p">[</span><span class="s2">&quot;file&quot;</span><span class="p">][</span><span class="s2">&quot;category&quot;</span><span class="p">]:</span>
+</span><span id="L-862"><a href="#L-862"><span class="linenos"> 862</span></a>                    <span class="n">grp</span> <span class="o">=</span> <span class="n">grp</span><span class="o">.</span><span class="n">drop</span><span class="p">(</span><span class="n">columns</span><span class="o">=</span><span class="p">[</span><span class="n">divide_col</span><span class="p">])</span>  <span class="c1"># delete categorical column</span>
+</span><span id="L-863"><a href="#L-863"><span class="linenos"> 863</span></a>                    <span class="n">source_df</span> <span class="o">=</span> <span class="n">grp</span><span class="p">[</span><span class="n">source_column_names</span><span class="p">]</span>
+</span><span id="L-864"><a href="#L-864"><span class="linenos"> 864</span></a>                    <span class="n">trans_out</span> <span class="o">=</span> <span class="n">translate_codes</span><span class="p">(</span>
+</span><span id="L-865"><a href="#L-865"><span class="linenos"> 865</span></a>                        <span class="n">source_df</span><span class="p">,</span>
+</span><span id="L-866"><a href="#L-866"><span class="linenos"> 866</span></a>                        <span class="n">target_code_type</span><span class="o">=</span><span class="n">target_code_type</span><span class="p">,</span>
+</span><span id="L-867"><a href="#L-867"><span class="linenos"> 867</span></a>                        <span class="n">concept_name</span><span class="o">=</span><span class="n">concept_set</span><span class="p">[</span><span class="s2">&quot;name&quot;</span><span class="p">],</span>
+</span><span id="L-868"><a href="#L-868"><span class="linenos"> 868</span></a>                    <span class="p">)</span>
+</span><span id="L-869"><a href="#L-869"><span class="linenos"> 869</span></a>                    <span class="n">out</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">concat</span><span class="p">([</span><span class="n">out</span><span class="p">,</span> <span class="n">trans_out</span><span class="p">])</span>
+</span><span id="L-870"><a href="#L-870"><span class="linenos"> 870</span></a>        <span class="k">else</span><span class="p">:</span>
+</span><span id="L-871"><a href="#L-871"><span class="linenos"> 871</span></a>            <span class="n">source_df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="n">source_column_names</span><span class="p">]</span>
+</span><span id="L-872"><a href="#L-872"><span class="linenos"> 872</span></a>            <span class="n">trans_out</span> <span class="o">=</span> <span class="n">translate_codes</span><span class="p">(</span>
+</span><span id="L-873"><a href="#L-873"><span class="linenos"> 873</span></a>                <span class="n">source_df</span><span class="p">,</span>
+</span><span id="L-874"><a href="#L-874"><span class="linenos"> 874</span></a>                <span class="n">target_code_type</span><span class="o">=</span><span class="n">target_code_type</span><span class="p">,</span>
+</span><span id="L-875"><a href="#L-875"><span class="linenos"> 875</span></a>                <span class="n">concept_name</span><span class="o">=</span><span class="n">concept_set</span><span class="p">[</span><span class="s2">&quot;name&quot;</span><span class="p">],</span>
+</span><span id="L-876"><a href="#L-876"><span class="linenos"> 876</span></a>            <span class="p">)</span>
+</span><span id="L-877"><a href="#L-877"><span class="linenos"> 877</span></a>            <span class="n">out</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">concat</span><span class="p">([</span><span class="n">out</span><span class="p">,</span> <span class="n">trans_out</span><span class="p">])</span>
+</span><span id="L-878"><a href="#L-878"><span class="linenos"> 878</span></a>
+</span><span id="L-879"><a href="#L-879"><span class="linenos"> 879</span></a>    <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">code_errors</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
+</span><span id="L-880"><a href="#L-880"><span class="linenos"> 880</span></a>        <span class="n">_logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;The map processing has </span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="n">code_errors</span><span class="p">)</span><span class="si">}</span><span class="s2"> errors&quot;</span><span class="p">)</span>
+</span><span id="L-881"><a href="#L-881"><span class="linenos"> 881</span></a>        <span class="n">error_path</span> <span class="o">=</span> <span class="n">phen_path</span> <span class="o">/</span> <span class="n">MAP_DIR</span> <span class="o">/</span> <span class="s2">&quot;errors&quot;</span>
+</span><span id="L-882"><a href="#L-882"><span class="linenos"> 882</span></a>        <span class="n">error_path</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">parents</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-883"><a href="#L-883"><span class="linenos"> 883</span></a>        <span class="n">error_filename</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">target_code_type</span><span class="si">}</span><span class="s2">-code-errors.csv&quot;</span>
+</span><span id="L-884"><a href="#L-884"><span class="linenos"> 884</span></a>        <span class="n">_write_code_errors</span><span class="p">(</span><span class="n">code_errors</span><span class="p">,</span> <span class="n">error_path</span> <span class="o">/</span> <span class="n">error_filename</span><span class="p">)</span>
 </span><span id="L-885"><a href="#L-885"><span class="linenos"> 885</span></a>
-</span><span id="L-886"><a href="#L-886"><span class="linenos"> 886</span></a>    <span class="n">out_count</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">out</span><span class="o">.</span><span class="n">index</span><span class="p">)</span>
-</span><span id="L-887"><a href="#L-887"><span class="linenos"> 887</span></a>    <span class="c1"># added metadata</span>
-</span><span id="L-888"><a href="#L-888"><span class="linenos"> 888</span></a>    <span class="c1"># Loop over each source_concept_type and perform the left join on all columns apart from source code columns</span>
-</span><span id="L-889"><a href="#L-889"><span class="linenos"> 889</span></a>    <span class="n">result_list</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-890"><a href="#L-890"><span class="linenos"> 890</span></a>    <span class="n">source_column_names</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">concept_set</span><span class="p">[</span><span class="s2">&quot;file&quot;</span><span class="p">][</span><span class="s2">&quot;columns&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span>
-</span><span id="L-891"><a href="#L-891"><span class="linenos"> 891</span></a>    <span class="k">for</span> <span class="n">source_concept_type</span> <span class="ow">in</span> <span class="n">source_column_names</span><span class="p">:</span>
-</span><span id="L-892"><a href="#L-892"><span class="linenos"> 892</span></a>        <span class="c1"># Filter output based on the current source_concept_type</span>
-</span><span id="L-893"><a href="#L-893"><span class="linenos"> 893</span></a>        <span class="n">out_filtered_df</span> <span class="o">=</span> <span class="n">out</span><span class="p">[</span><span class="n">out</span><span class="p">[</span><span class="s2">&quot;SOURCE_CONCEPT_TYPE&quot;</span><span class="p">]</span> <span class="o">==</span> <span class="n">source_concept_type</span><span class="p">]</span>
-</span><span id="L-894"><a href="#L-894"><span class="linenos"> 894</span></a>        <span class="n">filtered_count</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">out_filtered_df</span><span class="o">.</span><span class="n">index</span><span class="p">)</span>
-</span><span id="L-895"><a href="#L-895"><span class="linenos"> 895</span></a>
-</span><span id="L-896"><a href="#L-896"><span class="linenos"> 896</span></a>        <span class="c1"># Remove the source type columns except the current type will leave the metadata and the join</span>
-</span><span id="L-897"><a href="#L-897"><span class="linenos"> 897</span></a>        <span class="n">remove_types</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="L-898"><a href="#L-898"><span class="linenos"> 898</span></a>            <span class="nb">type</span> <span class="k">for</span> <span class="nb">type</span> <span class="ow">in</span> <span class="n">source_column_names</span> <span class="k">if</span> <span class="nb">type</span> <span class="o">!=</span> <span class="n">source_concept_type</span>
-</span><span id="L-899"><a href="#L-899"><span class="linenos"> 899</span></a>        <span class="p">]</span>
-</span><span id="L-900"><a href="#L-900"><span class="linenos"> 900</span></a>        <span class="n">metadata_df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">drop</span><span class="p">(</span><span class="n">columns</span><span class="o">=</span><span class="n">remove_types</span><span class="p">)</span>
-</span><span id="L-901"><a href="#L-901"><span class="linenos"> 901</span></a>        <span class="n">metadata_df</span> <span class="o">=</span> <span class="n">metadata_df</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span>
-</span><span id="L-902"><a href="#L-902"><span class="linenos"> 902</span></a>            <span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="n">source_concept_type</span><span class="p">:</span> <span class="s2">&quot;SOURCE_CONCEPT&quot;</span><span class="p">}</span>
-</span><span id="L-903"><a href="#L-903"><span class="linenos"> 903</span></a>        <span class="p">)</span>
-</span><span id="L-904"><a href="#L-904"><span class="linenos"> 904</span></a>        <span class="n">metadata_df_count</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">metadata_df</span><span class="o">.</span><span class="n">index</span><span class="p">)</span>
-</span><span id="L-905"><a href="#L-905"><span class="linenos"> 905</span></a>
-</span><span id="L-906"><a href="#L-906"><span class="linenos"> 906</span></a>        <span class="c1"># Perform the left join with df2 on SOURCE_CONCEPT to add the metadata</span>
-</span><span id="L-907"><a href="#L-907"><span class="linenos"> 907</span></a>        <span class="n">result</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">merge</span><span class="p">(</span><span class="n">out_filtered_df</span><span class="p">,</span> <span class="n">metadata_df</span><span class="p">,</span> <span class="n">how</span><span class="o">=</span><span class="s2">&quot;left&quot;</span><span class="p">,</span> <span class="n">on</span><span class="o">=</span><span class="s2">&quot;SOURCE_CONCEPT&quot;</span><span class="p">)</span>
-</span><span id="L-908"><a href="#L-908"><span class="linenos"> 908</span></a>        <span class="n">result_count</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">result</span><span class="o">.</span><span class="n">index</span><span class="p">)</span>
-</span><span id="L-909"><a href="#L-909"><span class="linenos"> 909</span></a>
-</span><span id="L-910"><a href="#L-910"><span class="linenos"> 910</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span>
-</span><span id="L-911"><a href="#L-911"><span class="linenos"> 911</span></a>            <span class="sa">f</span><span class="s2">&quot;Adding metadata for </span><span class="si">{</span><span class="n">source_concept_type</span><span class="si">}</span><span class="s2">: out_count </span><span class="si">{</span><span class="n">out_count</span><span class="si">}</span><span class="s2">, filtered_count </span><span class="si">{</span><span class="n">filtered_count</span><span class="si">}</span><span class="s2">, metadata_df_count </span><span class="si">{</span><span class="n">metadata_df_count</span><span class="si">}</span><span class="s2">, result_count </span><span class="si">{</span><span class="n">result_count</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-912"><a href="#L-912"><span class="linenos"> 912</span></a>        <span class="p">)</span>
-</span><span id="L-913"><a href="#L-913"><span class="linenos"> 913</span></a>
-</span><span id="L-914"><a href="#L-914"><span class="linenos"> 914</span></a>        <span class="c1"># Append the result to the result_list</span>
-</span><span id="L-915"><a href="#L-915"><span class="linenos"> 915</span></a>        <span class="n">result_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
-</span><span id="L-916"><a href="#L-916"><span class="linenos"> 916</span></a>
-</span><span id="L-917"><a href="#L-917"><span class="linenos"> 917</span></a>    <span class="c1"># Concatenate all the results into a single DataFrame</span>
-</span><span id="L-918"><a href="#L-918"><span class="linenos"> 918</span></a>    <span class="n">final_out</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">concat</span><span class="p">(</span><span class="n">result_list</span><span class="p">,</span> <span class="n">ignore_index</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-919"><a href="#L-919"><span class="linenos"> 919</span></a>    <span class="n">final_out</span> <span class="o">=</span> <span class="n">final_out</span><span class="o">.</span><span class="n">drop_duplicates</span><span class="p">(</span><span class="n">subset</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;CONCEPT_SET&quot;</span><span class="p">,</span> <span class="s2">&quot;CONCEPT&quot;</span><span class="p">])</span>
-</span><span id="L-920"><a href="#L-920"><span class="linenos"> 920</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span>
-</span><span id="L-921"><a href="#L-921"><span class="linenos"> 921</span></a>        <span class="sa">f</span><span class="s2">&quot;Check metadata processing counts: before </span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="n">out</span><span class="o">.</span><span class="n">index</span><span class="p">)</span><span class="si">}</span><span class="s2"> : after </span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="n">final_out</span><span class="o">.</span><span class="n">index</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-922"><a href="#L-922"><span class="linenos"> 922</span></a>    <span class="p">)</span>
-</span><span id="L-923"><a href="#L-923"><span class="linenos"> 923</span></a>
-</span><span id="L-924"><a href="#L-924"><span class="linenos"> 924</span></a>    <span class="c1"># Save output to map directory</span>
-</span><span id="L-925"><a href="#L-925"><span class="linenos"> 925</span></a>    <span class="n">output_filename</span> <span class="o">=</span> <span class="n">target_code_type</span> <span class="o">+</span> <span class="s2">&quot;.csv&quot;</span>
-</span><span id="L-926"><a href="#L-926"><span class="linenos"> 926</span></a>    <span class="n">map_path</span> <span class="o">=</span> <span class="n">phen_path</span> <span class="o">/</span> <span class="n">MAP_DIR</span> <span class="o">/</span> <span class="n">output_filename</span>
-</span><span id="L-927"><a href="#L-927"><span class="linenos"> 927</span></a>    <span class="n">final_out</span><span class="o">.</span><span class="n">to_csv</span><span class="p">(</span><span class="n">map_path</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="L-928"><a href="#L-928"><span class="linenos"> 928</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Saved mapped concepts to </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">map_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-929"><a href="#L-929"><span class="linenos"> 929</span></a>
-</span><span id="L-930"><a href="#L-930"><span class="linenos"> 930</span></a>    <span class="c1"># save concept sets as separate files</span>
-</span><span id="L-931"><a href="#L-931"><span class="linenos"> 931</span></a>    <span class="n">concept_set_path</span> <span class="o">=</span> <span class="n">phen_path</span> <span class="o">/</span> <span class="n">CSV_PATH</span> <span class="o">/</span> <span class="n">target_code_type</span>
-</span><span id="L-932"><a href="#L-932"><span class="linenos"> 932</span></a>
-</span><span id="L-933"><a href="#L-933"><span class="linenos"> 933</span></a>    <span class="c1"># empty the concept-set directory except for hiddle files, e.g. .git</span>
-</span><span id="L-934"><a href="#L-934"><span class="linenos"> 934</span></a>    <span class="k">if</span> <span class="n">concept_set_path</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
-</span><span id="L-935"><a href="#L-935"><span class="linenos"> 935</span></a>        <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">concept_set_path</span><span class="o">.</span><span class="n">iterdir</span><span class="p">():</span>
-</span><span id="L-936"><a href="#L-936"><span class="linenos"> 936</span></a>            <span class="k">if</span> <span class="ow">not</span> <span class="n">item</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;.&quot;</span><span class="p">):</span>
-</span><span id="L-937"><a href="#L-937"><span class="linenos"> 937</span></a>                <span class="n">item</span><span class="o">.</span><span class="n">unlink</span><span class="p">()</span>
-</span><span id="L-938"><a href="#L-938"><span class="linenos"> 938</span></a>    <span class="k">else</span><span class="p">:</span>
-</span><span id="L-939"><a href="#L-939"><span class="linenos"> 939</span></a>        <span class="n">concept_set_path</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">parents</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-940"><a href="#L-940"><span class="linenos"> 940</span></a>
-</span><span id="L-941"><a href="#L-941"><span class="linenos"> 941</span></a>    <span class="c1"># write each concept as a separate file</span>
-</span><span id="L-942"><a href="#L-942"><span class="linenos"> 942</span></a>    <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">concept</span> <span class="ow">in</span> <span class="n">final_out</span><span class="o">.</span><span class="n">groupby</span><span class="p">(</span><span class="s2">&quot;CONCEPT_SET&quot;</span><span class="p">):</span>
-</span><span id="L-943"><a href="#L-943"><span class="linenos"> 943</span></a>        <span class="n">concept</span> <span class="o">=</span> <span class="n">concept</span><span class="o">.</span><span class="n">sort_values</span><span class="p">(</span><span class="n">by</span><span class="o">=</span><span class="s2">&quot;CONCEPT&quot;</span><span class="p">)</span>  <span class="c1"># sort rows</span>
-</span><span id="L-944"><a href="#L-944"><span class="linenos"> 944</span></a>        <span class="n">concept</span> <span class="o">=</span> <span class="n">concept</span><span class="o">.</span><span class="n">dropna</span><span class="p">(</span><span class="n">how</span><span class="o">=</span><span class="s2">&quot;all&quot;</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>  <span class="c1"># remove empty cols</span>
-</span><span id="L-945"><a href="#L-945"><span class="linenos"> 945</span></a>        <span class="n">concept</span> <span class="o">=</span> <span class="n">concept</span><span class="o">.</span><span class="n">reindex</span><span class="p">(</span>
-</span><span id="L-946"><a href="#L-946"><span class="linenos"> 946</span></a>            <span class="nb">sorted</span><span class="p">(</span><span class="n">concept</span><span class="o">.</span><span class="n">columns</span><span class="p">),</span> <span class="n">axis</span><span class="o">=</span><span class="mi">1</span>
-</span><span id="L-947"><a href="#L-947"><span class="linenos"> 947</span></a>        <span class="p">)</span>  <span class="c1"># sort cols alphabetically</span>
-</span><span id="L-948"><a href="#L-948"><span class="linenos"> 948</span></a>        <span class="n">filename</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">.csv&quot;</span>
-</span><span id="L-949"><a href="#L-949"><span class="linenos"> 949</span></a>        <span class="n">concept_path</span> <span class="o">=</span> <span class="n">concept_set_path</span> <span class="o">/</span> <span class="n">filename</span>
-</span><span id="L-950"><a href="#L-950"><span class="linenos"> 950</span></a>        <span class="n">concept</span><span class="o">.</span><span class="n">to_csv</span><span class="p">(</span><span class="n">concept_path</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="L-951"><a href="#L-951"><span class="linenos"> 951</span></a>
-</span><span id="L-952"><a href="#L-952"><span class="linenos"> 952</span></a>    <span class="n">write_vocab_version</span><span class="p">(</span><span class="n">phen_path</span><span class="p">)</span>
-</span><span id="L-953"><a href="#L-953"><span class="linenos"> 953</span></a>
-</span><span id="L-954"><a href="#L-954"><span class="linenos"> 954</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Phenotype processed target code type </span><span class="si">{</span><span class="n">target_code_type</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-955"><a href="#L-955"><span class="linenos"> 955</span></a>
-</span><span id="L-956"><a href="#L-956"><span class="linenos"> 956</span></a>
-</span><span id="L-957"><a href="#L-957"><span class="linenos"> 957</span></a><span class="k">def</span><span class="w"> </span><span class="nf">generate_version_tag</span><span class="p">(</span>
-</span><span id="L-958"><a href="#L-958"><span class="linenos"> 958</span></a>    <span class="n">repo</span><span class="p">:</span> <span class="n">git</span><span class="o">.</span><span class="n">Repo</span><span class="p">,</span> <span class="n">increment</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="n">DEFAULT_VERSION_INC</span><span class="p">,</span> <span class="n">use_v_prefix</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-959"><a href="#L-959"><span class="linenos"> 959</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-960"><a href="#L-960"><span class="linenos"> 960</span></a>    <span class="c1"># Get all valid semantic version tags</span>
-</span><span id="L-961"><a href="#L-961"><span class="linenos"> 961</span></a>    <span class="n">versions</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-962"><a href="#L-962"><span class="linenos"> 962</span></a>    <span class="k">for</span> <span class="n">tag</span> <span class="ow">in</span> <span class="n">repo</span><span class="o">.</span><span class="n">tags</span><span class="p">:</span>
-</span><span id="L-963"><a href="#L-963"><span class="linenos"> 963</span></a>        <span class="n">tag_name</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-964"><a href="#L-964"><span class="linenos"> 964</span></a>            <span class="n">tag</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">lstrip</span><span class="p">(</span><span class="s2">&quot;v&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">use_v_prefix</span> <span class="k">else</span> <span class="n">tag</span><span class="o">.</span><span class="n">name</span>
-</span><span id="L-965"><a href="#L-965"><span class="linenos"> 965</span></a>        <span class="p">)</span>  <span class="c1"># Remove &#39;v&#39; if needed</span>
-</span><span id="L-966"><a href="#L-966"><span class="linenos"> 966</span></a>        <span class="k">if</span> <span class="n">semver</span><span class="o">.</span><span class="n">Version</span><span class="o">.</span><span class="n">is_valid</span><span class="p">(</span><span class="n">tag_name</span><span class="p">):</span>
-</span><span id="L-967"><a href="#L-967"><span class="linenos"> 967</span></a>            <span class="n">versions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">semver</span><span class="o">.</span><span class="n">Version</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">tag_name</span><span class="p">))</span>
+</span><span id="L-886"><a href="#L-886"><span class="linenos"> 886</span></a>    <span class="c1"># Check there is output from processing</span>
+</span><span id="L-887"><a href="#L-887"><span class="linenos"> 887</span></a>    <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">out</span><span class="o">.</span><span class="n">index</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
+</span><span id="L-888"><a href="#L-888"><span class="linenos"> 888</span></a>        <span class="n">_logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;No output after map processing&quot;</span><span class="p">)</span>
+</span><span id="L-889"><a href="#L-889"><span class="linenos"> 889</span></a>        <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span>
+</span><span id="L-890"><a href="#L-890"><span class="linenos"> 890</span></a>            <span class="sa">f</span><span class="s2">&quot;No output after map processing, check config </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">phen_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-891"><a href="#L-891"><span class="linenos"> 891</span></a>        <span class="p">)</span>
+</span><span id="L-892"><a href="#L-892"><span class="linenos"> 892</span></a>
+</span><span id="L-893"><a href="#L-893"><span class="linenos"> 893</span></a>    <span class="c1"># final processing</span>
+</span><span id="L-894"><a href="#L-894"><span class="linenos"> 894</span></a>    <span class="n">out</span> <span class="o">=</span> <span class="n">out</span><span class="o">.</span><span class="n">reset_index</span><span class="p">(</span><span class="n">drop</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-895"><a href="#L-895"><span class="linenos"> 895</span></a>    <span class="n">out</span> <span class="o">=</span> <span class="n">out</span><span class="o">.</span><span class="n">drop_duplicates</span><span class="p">(</span><span class="n">subset</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;CONCEPT_SET&quot;</span><span class="p">,</span> <span class="s2">&quot;CONCEPT&quot;</span><span class="p">])</span>
+</span><span id="L-896"><a href="#L-896"><span class="linenos"> 896</span></a>    <span class="n">out</span> <span class="o">=</span> <span class="n">out</span><span class="o">.</span><span class="n">sort_values</span><span class="p">(</span><span class="n">by</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;CONCEPT_SET&quot;</span><span class="p">,</span> <span class="s2">&quot;CONCEPT&quot;</span><span class="p">])</span>
+</span><span id="L-897"><a href="#L-897"><span class="linenos"> 897</span></a>
+</span><span id="L-898"><a href="#L-898"><span class="linenos"> 898</span></a>    <span class="n">out_count</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">out</span><span class="o">.</span><span class="n">index</span><span class="p">)</span>
+</span><span id="L-899"><a href="#L-899"><span class="linenos"> 899</span></a>    <span class="c1"># added metadata</span>
+</span><span id="L-900"><a href="#L-900"><span class="linenos"> 900</span></a>    <span class="c1"># Loop over each source_concept_type and perform the left join on all columns apart from source code columns</span>
+</span><span id="L-901"><a href="#L-901"><span class="linenos"> 901</span></a>    <span class="n">result_list</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-902"><a href="#L-902"><span class="linenos"> 902</span></a>    <span class="n">source_column_names</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">concept_set</span><span class="p">[</span><span class="s2">&quot;file&quot;</span><span class="p">][</span><span class="s2">&quot;columns&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span>
+</span><span id="L-903"><a href="#L-903"><span class="linenos"> 903</span></a>    <span class="k">for</span> <span class="n">source_concept_type</span> <span class="ow">in</span> <span class="n">source_column_names</span><span class="p">:</span>
+</span><span id="L-904"><a href="#L-904"><span class="linenos"> 904</span></a>        <span class="c1"># Filter output based on the current source_concept_type</span>
+</span><span id="L-905"><a href="#L-905"><span class="linenos"> 905</span></a>        <span class="n">out_filtered_df</span> <span class="o">=</span> <span class="n">out</span><span class="p">[</span><span class="n">out</span><span class="p">[</span><span class="s2">&quot;SOURCE_CONCEPT_TYPE&quot;</span><span class="p">]</span> <span class="o">==</span> <span class="n">source_concept_type</span><span class="p">]</span>
+</span><span id="L-906"><a href="#L-906"><span class="linenos"> 906</span></a>        <span class="n">filtered_count</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">out_filtered_df</span><span class="o">.</span><span class="n">index</span><span class="p">)</span>
+</span><span id="L-907"><a href="#L-907"><span class="linenos"> 907</span></a>
+</span><span id="L-908"><a href="#L-908"><span class="linenos"> 908</span></a>        <span class="c1"># Remove the source type columns except the current type will leave the metadata and the join</span>
+</span><span id="L-909"><a href="#L-909"><span class="linenos"> 909</span></a>        <span class="n">remove_types</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="L-910"><a href="#L-910"><span class="linenos"> 910</span></a>            <span class="nb">type</span> <span class="k">for</span> <span class="nb">type</span> <span class="ow">in</span> <span class="n">source_column_names</span> <span class="k">if</span> <span class="nb">type</span> <span class="o">!=</span> <span class="n">source_concept_type</span>
+</span><span id="L-911"><a href="#L-911"><span class="linenos"> 911</span></a>        <span class="p">]</span>
+</span><span id="L-912"><a href="#L-912"><span class="linenos"> 912</span></a>        <span class="n">metadata_df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">drop</span><span class="p">(</span><span class="n">columns</span><span class="o">=</span><span class="n">remove_types</span><span class="p">)</span>
+</span><span id="L-913"><a href="#L-913"><span class="linenos"> 913</span></a>        <span class="n">metadata_df</span> <span class="o">=</span> <span class="n">metadata_df</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span>
+</span><span id="L-914"><a href="#L-914"><span class="linenos"> 914</span></a>            <span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="n">source_concept_type</span><span class="p">:</span> <span class="s2">&quot;SOURCE_CONCEPT&quot;</span><span class="p">}</span>
+</span><span id="L-915"><a href="#L-915"><span class="linenos"> 915</span></a>        <span class="p">)</span>
+</span><span id="L-916"><a href="#L-916"><span class="linenos"> 916</span></a>        <span class="n">metadata_df_count</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">metadata_df</span><span class="o">.</span><span class="n">index</span><span class="p">)</span>
+</span><span id="L-917"><a href="#L-917"><span class="linenos"> 917</span></a>
+</span><span id="L-918"><a href="#L-918"><span class="linenos"> 918</span></a>        <span class="c1"># Perform the left join with df2 on SOURCE_CONCEPT to add the metadata</span>
+</span><span id="L-919"><a href="#L-919"><span class="linenos"> 919</span></a>        <span class="n">result</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">merge</span><span class="p">(</span><span class="n">out_filtered_df</span><span class="p">,</span> <span class="n">metadata_df</span><span class="p">,</span> <span class="n">how</span><span class="o">=</span><span class="s2">&quot;left&quot;</span><span class="p">,</span> <span class="n">on</span><span class="o">=</span><span class="s2">&quot;SOURCE_CONCEPT&quot;</span><span class="p">)</span>
+</span><span id="L-920"><a href="#L-920"><span class="linenos"> 920</span></a>        <span class="n">result_count</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">result</span><span class="o">.</span><span class="n">index</span><span class="p">)</span>
+</span><span id="L-921"><a href="#L-921"><span class="linenos"> 921</span></a>
+</span><span id="L-922"><a href="#L-922"><span class="linenos"> 922</span></a>        <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span>
+</span><span id="L-923"><a href="#L-923"><span class="linenos"> 923</span></a>            <span class="sa">f</span><span class="s2">&quot;Adding metadata for </span><span class="si">{</span><span class="n">source_concept_type</span><span class="si">}</span><span class="s2">: out_count </span><span class="si">{</span><span class="n">out_count</span><span class="si">}</span><span class="s2">, filtered_count </span><span class="si">{</span><span class="n">filtered_count</span><span class="si">}</span><span class="s2">, metadata_df_count </span><span class="si">{</span><span class="n">metadata_df_count</span><span class="si">}</span><span class="s2">, result_count </span><span class="si">{</span><span class="n">result_count</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-924"><a href="#L-924"><span class="linenos"> 924</span></a>        <span class="p">)</span>
+</span><span id="L-925"><a href="#L-925"><span class="linenos"> 925</span></a>
+</span><span id="L-926"><a href="#L-926"><span class="linenos"> 926</span></a>        <span class="c1"># Append the result to the result_list</span>
+</span><span id="L-927"><a href="#L-927"><span class="linenos"> 927</span></a>        <span class="n">result_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
+</span><span id="L-928"><a href="#L-928"><span class="linenos"> 928</span></a>
+</span><span id="L-929"><a href="#L-929"><span class="linenos"> 929</span></a>    <span class="c1"># Concatenate all the results into a single DataFrame</span>
+</span><span id="L-930"><a href="#L-930"><span class="linenos"> 930</span></a>    <span class="n">final_out</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">concat</span><span class="p">(</span><span class="n">result_list</span><span class="p">,</span> <span class="n">ignore_index</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-931"><a href="#L-931"><span class="linenos"> 931</span></a>    <span class="n">final_out</span> <span class="o">=</span> <span class="n">final_out</span><span class="o">.</span><span class="n">drop_duplicates</span><span class="p">(</span><span class="n">subset</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;CONCEPT_SET&quot;</span><span class="p">,</span> <span class="s2">&quot;CONCEPT&quot;</span><span class="p">])</span>
+</span><span id="L-932"><a href="#L-932"><span class="linenos"> 932</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span>
+</span><span id="L-933"><a href="#L-933"><span class="linenos"> 933</span></a>        <span class="sa">f</span><span class="s2">&quot;Check metadata processing counts: before </span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="n">out</span><span class="o">.</span><span class="n">index</span><span class="p">)</span><span class="si">}</span><span class="s2"> : after </span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="n">final_out</span><span class="o">.</span><span class="n">index</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-934"><a href="#L-934"><span class="linenos"> 934</span></a>    <span class="p">)</span>
+</span><span id="L-935"><a href="#L-935"><span class="linenos"> 935</span></a>
+</span><span id="L-936"><a href="#L-936"><span class="linenos"> 936</span></a>    <span class="c1"># Save output to map directory</span>
+</span><span id="L-937"><a href="#L-937"><span class="linenos"> 937</span></a>    <span class="n">output_filename</span> <span class="o">=</span> <span class="n">target_code_type</span> <span class="o">+</span> <span class="s2">&quot;.csv&quot;</span>
+</span><span id="L-938"><a href="#L-938"><span class="linenos"> 938</span></a>    <span class="n">map_path</span> <span class="o">=</span> <span class="n">phen_path</span> <span class="o">/</span> <span class="n">MAP_DIR</span> <span class="o">/</span> <span class="n">output_filename</span>
+</span><span id="L-939"><a href="#L-939"><span class="linenos"> 939</span></a>    <span class="n">final_out</span><span class="o">.</span><span class="n">to_csv</span><span class="p">(</span><span class="n">map_path</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="L-940"><a href="#L-940"><span class="linenos"> 940</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Saved mapped concepts to </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">map_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-941"><a href="#L-941"><span class="linenos"> 941</span></a>
+</span><span id="L-942"><a href="#L-942"><span class="linenos"> 942</span></a>    <span class="c1"># save concept sets as separate files</span>
+</span><span id="L-943"><a href="#L-943"><span class="linenos"> 943</span></a>    <span class="n">concept_set_path</span> <span class="o">=</span> <span class="n">phen_path</span> <span class="o">/</span> <span class="n">CSV_PATH</span> <span class="o">/</span> <span class="n">target_code_type</span>
+</span><span id="L-944"><a href="#L-944"><span class="linenos"> 944</span></a>
+</span><span id="L-945"><a href="#L-945"><span class="linenos"> 945</span></a>    <span class="c1"># empty the concept-set directory except for hiddle files, e.g. .git</span>
+</span><span id="L-946"><a href="#L-946"><span class="linenos"> 946</span></a>    <span class="k">if</span> <span class="n">concept_set_path</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
+</span><span id="L-947"><a href="#L-947"><span class="linenos"> 947</span></a>        <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">concept_set_path</span><span class="o">.</span><span class="n">iterdir</span><span class="p">():</span>
+</span><span id="L-948"><a href="#L-948"><span class="linenos"> 948</span></a>            <span class="k">if</span> <span class="ow">not</span> <span class="n">item</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;.&quot;</span><span class="p">):</span>
+</span><span id="L-949"><a href="#L-949"><span class="linenos"> 949</span></a>                <span class="n">item</span><span class="o">.</span><span class="n">unlink</span><span class="p">()</span>
+</span><span id="L-950"><a href="#L-950"><span class="linenos"> 950</span></a>    <span class="k">else</span><span class="p">:</span>
+</span><span id="L-951"><a href="#L-951"><span class="linenos"> 951</span></a>        <span class="n">concept_set_path</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">parents</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-952"><a href="#L-952"><span class="linenos"> 952</span></a>
+</span><span id="L-953"><a href="#L-953"><span class="linenos"> 953</span></a>    <span class="c1"># write each concept as a separate file</span>
+</span><span id="L-954"><a href="#L-954"><span class="linenos"> 954</span></a>    <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">concept</span> <span class="ow">in</span> <span class="n">final_out</span><span class="o">.</span><span class="n">groupby</span><span class="p">(</span><span class="s2">&quot;CONCEPT_SET&quot;</span><span class="p">):</span>
+</span><span id="L-955"><a href="#L-955"><span class="linenos"> 955</span></a>        <span class="n">concept</span> <span class="o">=</span> <span class="n">concept</span><span class="o">.</span><span class="n">sort_values</span><span class="p">(</span><span class="n">by</span><span class="o">=</span><span class="s2">&quot;CONCEPT&quot;</span><span class="p">)</span>  <span class="c1"># sort rows</span>
+</span><span id="L-956"><a href="#L-956"><span class="linenos"> 956</span></a>        <span class="n">concept</span> <span class="o">=</span> <span class="n">concept</span><span class="o">.</span><span class="n">dropna</span><span class="p">(</span><span class="n">how</span><span class="o">=</span><span class="s2">&quot;all&quot;</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>  <span class="c1"># remove empty cols</span>
+</span><span id="L-957"><a href="#L-957"><span class="linenos"> 957</span></a>        <span class="n">concept</span> <span class="o">=</span> <span class="n">concept</span><span class="o">.</span><span class="n">reindex</span><span class="p">(</span>
+</span><span id="L-958"><a href="#L-958"><span class="linenos"> 958</span></a>            <span class="nb">sorted</span><span class="p">(</span><span class="n">concept</span><span class="o">.</span><span class="n">columns</span><span class="p">),</span> <span class="n">axis</span><span class="o">=</span><span class="mi">1</span>
+</span><span id="L-959"><a href="#L-959"><span class="linenos"> 959</span></a>        <span class="p">)</span>  <span class="c1"># sort cols alphabetically</span>
+</span><span id="L-960"><a href="#L-960"><span class="linenos"> 960</span></a>        <span class="n">filename</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">.csv&quot;</span>
+</span><span id="L-961"><a href="#L-961"><span class="linenos"> 961</span></a>        <span class="n">concept_path</span> <span class="o">=</span> <span class="n">concept_set_path</span> <span class="o">/</span> <span class="n">filename</span>
+</span><span id="L-962"><a href="#L-962"><span class="linenos"> 962</span></a>        <span class="n">concept</span><span class="o">.</span><span class="n">to_csv</span><span class="p">(</span><span class="n">concept_path</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="L-963"><a href="#L-963"><span class="linenos"> 963</span></a>
+</span><span id="L-964"><a href="#L-964"><span class="linenos"> 964</span></a>    <span class="n">write_vocab_version</span><span class="p">(</span><span class="n">phen_path</span><span class="p">)</span>
+</span><span id="L-965"><a href="#L-965"><span class="linenos"> 965</span></a>
+</span><span id="L-966"><a href="#L-966"><span class="linenos"> 966</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Phenotype processed target code type </span><span class="si">{</span><span class="n">target_code_type</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-967"><a href="#L-967"><span class="linenos"> 967</span></a>
 </span><span id="L-968"><a href="#L-968"><span class="linenos"> 968</span></a>
-</span><span id="L-969"><a href="#L-969"><span class="linenos"> 969</span></a>    <span class="c1"># Determine the next version</span>
-</span><span id="L-970"><a href="#L-970"><span class="linenos"> 970</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">versions</span><span class="p">:</span>
-</span><span id="L-971"><a href="#L-971"><span class="linenos"> 971</span></a>        <span class="n">new_version</span> <span class="o">=</span> <span class="n">semver</span><span class="o">.</span><span class="n">Version</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="L-972"><a href="#L-972"><span class="linenos"> 972</span></a>    <span class="k">else</span><span class="p">:</span>
-</span><span id="L-973"><a href="#L-973"><span class="linenos"> 973</span></a>        <span class="n">latest_version</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">versions</span><span class="p">)</span>
-</span><span id="L-974"><a href="#L-974"><span class="linenos"> 974</span></a>        <span class="k">if</span> <span class="n">increment</span> <span class="o">==</span> <span class="s2">&quot;major&quot;</span><span class="p">:</span>
-</span><span id="L-975"><a href="#L-975"><span class="linenos"> 975</span></a>            <span class="n">new_version</span> <span class="o">=</span> <span class="n">latest_version</span><span class="o">.</span><span class="n">bump_major</span><span class="p">()</span>
-</span><span id="L-976"><a href="#L-976"><span class="linenos"> 976</span></a>        <span class="k">elif</span> <span class="n">increment</span> <span class="o">==</span> <span class="s2">&quot;minor&quot;</span><span class="p">:</span>
-</span><span id="L-977"><a href="#L-977"><span class="linenos"> 977</span></a>            <span class="n">new_version</span> <span class="o">=</span> <span class="n">latest_version</span><span class="o">.</span><span class="n">bump_minor</span><span class="p">()</span>
-</span><span id="L-978"><a href="#L-978"><span class="linenos"> 978</span></a>        <span class="k">else</span><span class="p">:</span>
-</span><span id="L-979"><a href="#L-979"><span class="linenos"> 979</span></a>            <span class="n">new_version</span> <span class="o">=</span> <span class="n">latest_version</span><span class="o">.</span><span class="n">bump_patch</span><span class="p">()</span>
+</span><span id="L-969"><a href="#L-969"><span class="linenos"> 969</span></a><span class="k">def</span><span class="w"> </span><span class="nf">_generate_version_tag</span><span class="p">(</span>
+</span><span id="L-970"><a href="#L-970"><span class="linenos"> 970</span></a>    <span class="n">repo</span><span class="p">:</span> <span class="n">git</span><span class="o">.</span><span class="n">Repo</span><span class="p">,</span> <span class="n">increment</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="n">DEFAULT_VERSION_INC</span><span class="p">,</span> <span class="n">use_v_prefix</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-971"><a href="#L-971"><span class="linenos"> 971</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-972"><a href="#L-972"><span class="linenos"> 972</span></a>    <span class="c1"># Get all valid semantic version tags</span>
+</span><span id="L-973"><a href="#L-973"><span class="linenos"> 973</span></a>    <span class="n">versions</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-974"><a href="#L-974"><span class="linenos"> 974</span></a>    <span class="k">for</span> <span class="n">tag</span> <span class="ow">in</span> <span class="n">repo</span><span class="o">.</span><span class="n">tags</span><span class="p">:</span>
+</span><span id="L-975"><a href="#L-975"><span class="linenos"> 975</span></a>        <span class="n">tag_name</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-976"><a href="#L-976"><span class="linenos"> 976</span></a>            <span class="n">tag</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">lstrip</span><span class="p">(</span><span class="s2">&quot;v&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">use_v_prefix</span> <span class="k">else</span> <span class="n">tag</span><span class="o">.</span><span class="n">name</span>
+</span><span id="L-977"><a href="#L-977"><span class="linenos"> 977</span></a>        <span class="p">)</span>  <span class="c1"># Remove &#39;v&#39; if needed</span>
+</span><span id="L-978"><a href="#L-978"><span class="linenos"> 978</span></a>        <span class="k">if</span> <span class="n">semver</span><span class="o">.</span><span class="n">Version</span><span class="o">.</span><span class="n">is_valid</span><span class="p">(</span><span class="n">tag_name</span><span class="p">):</span>
+</span><span id="L-979"><a href="#L-979"><span class="linenos"> 979</span></a>            <span class="n">versions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">semver</span><span class="o">.</span><span class="n">Version</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">tag_name</span><span class="p">))</span>
 </span><span id="L-980"><a href="#L-980"><span class="linenos"> 980</span></a>
-</span><span id="L-981"><a href="#L-981"><span class="linenos"> 981</span></a>    <span class="c1"># Create the new tag</span>
-</span><span id="L-982"><a href="#L-982"><span class="linenos"> 982</span></a>    <span class="n">new_version_str</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;v</span><span class="si">{</span><span class="n">new_version</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">use_v_prefix</span> <span class="k">else</span> <span class="nb">str</span><span class="p">(</span><span class="n">new_version</span><span class="p">)</span>
-</span><span id="L-983"><a href="#L-983"><span class="linenos"> 983</span></a>
-</span><span id="L-984"><a href="#L-984"><span class="linenos"> 984</span></a>    <span class="k">return</span> <span class="n">new_version_str</span>
-</span><span id="L-985"><a href="#L-985"><span class="linenos"> 985</span></a>
-</span><span id="L-986"><a href="#L-986"><span class="linenos"> 986</span></a>
-</span><span id="L-987"><a href="#L-987"><span class="linenos"> 987</span></a><span class="k">def</span><span class="w"> </span><span class="nf">publish</span><span class="p">(</span>
-</span><span id="L-988"><a href="#L-988"><span class="linenos"> 988</span></a>    <span class="n">phen_dir</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">msg</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">remote_url</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">increment</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="n">DEFAULT_VERSION_INC</span>
-</span><span id="L-989"><a href="#L-989"><span class="linenos"> 989</span></a><span class="p">):</span>
-</span><span id="L-990"><a href="#L-990"><span class="linenos"> 990</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Publishes updates to the phenotype by commiting all changes to the repo directory&quot;&quot;&quot;</span>
-</span><span id="L-991"><a href="#L-991"><span class="linenos"> 991</span></a>
-</span><span id="L-992"><a href="#L-992"><span class="linenos"> 992</span></a>    <span class="c1"># Validate config</span>
-</span><span id="L-993"><a href="#L-993"><span class="linenos"> 993</span></a>    <span class="n">validate</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">)</span>
-</span><span id="L-994"><a href="#L-994"><span class="linenos"> 994</span></a>    <span class="n">phen_path</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">)</span>
+</span><span id="L-981"><a href="#L-981"><span class="linenos"> 981</span></a>    <span class="c1"># Determine the next version</span>
+</span><span id="L-982"><a href="#L-982"><span class="linenos"> 982</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">versions</span><span class="p">:</span>
+</span><span id="L-983"><a href="#L-983"><span class="linenos"> 983</span></a>        <span class="n">new_version</span> <span class="o">=</span> <span class="n">semver</span><span class="o">.</span><span class="n">Version</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
+</span><span id="L-984"><a href="#L-984"><span class="linenos"> 984</span></a>    <span class="k">else</span><span class="p">:</span>
+</span><span id="L-985"><a href="#L-985"><span class="linenos"> 985</span></a>        <span class="n">latest_version</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">versions</span><span class="p">)</span>
+</span><span id="L-986"><a href="#L-986"><span class="linenos"> 986</span></a>        <span class="k">if</span> <span class="n">increment</span> <span class="o">==</span> <span class="s2">&quot;major&quot;</span><span class="p">:</span>
+</span><span id="L-987"><a href="#L-987"><span class="linenos"> 987</span></a>            <span class="n">new_version</span> <span class="o">=</span> <span class="n">latest_version</span><span class="o">.</span><span class="n">bump_major</span><span class="p">()</span>
+</span><span id="L-988"><a href="#L-988"><span class="linenos"> 988</span></a>        <span class="k">elif</span> <span class="n">increment</span> <span class="o">==</span> <span class="s2">&quot;minor&quot;</span><span class="p">:</span>
+</span><span id="L-989"><a href="#L-989"><span class="linenos"> 989</span></a>            <span class="n">new_version</span> <span class="o">=</span> <span class="n">latest_version</span><span class="o">.</span><span class="n">bump_minor</span><span class="p">()</span>
+</span><span id="L-990"><a href="#L-990"><span class="linenos"> 990</span></a>        <span class="k">else</span><span class="p">:</span>
+</span><span id="L-991"><a href="#L-991"><span class="linenos"> 991</span></a>            <span class="n">new_version</span> <span class="o">=</span> <span class="n">latest_version</span><span class="o">.</span><span class="n">bump_patch</span><span class="p">()</span>
+</span><span id="L-992"><a href="#L-992"><span class="linenos"> 992</span></a>
+</span><span id="L-993"><a href="#L-993"><span class="linenos"> 993</span></a>    <span class="c1"># Create the new tag</span>
+</span><span id="L-994"><a href="#L-994"><span class="linenos"> 994</span></a>    <span class="n">new_version_str</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;v</span><span class="si">{</span><span class="n">new_version</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">use_v_prefix</span> <span class="k">else</span> <span class="nb">str</span><span class="p">(</span><span class="n">new_version</span><span class="p">)</span>
 </span><span id="L-995"><a href="#L-995"><span class="linenos"> 995</span></a>
-</span><span id="L-996"><a href="#L-996"><span class="linenos"> 996</span></a>    <span class="c1"># load git repo and set the branch</span>
-</span><span id="L-997"><a href="#L-997"><span class="linenos"> 997</span></a>    <span class="n">repo</span> <span class="o">=</span> <span class="n">git</span><span class="o">.</span><span class="n">Repo</span><span class="p">(</span><span class="n">phen_path</span><span class="p">)</span>
-</span><span id="L-998"><a href="#L-998"><span class="linenos"> 998</span></a>    <span class="k">if</span> <span class="n">DEFAULT_GIT_BRANCH</span> <span class="ow">in</span> <span class="n">repo</span><span class="o">.</span><span class="n">branches</span><span class="p">:</span>
-</span><span id="L-999"><a href="#L-999"><span class="linenos"> 999</span></a>        <span class="n">main_branch</span> <span class="o">=</span> <span class="n">repo</span><span class="o">.</span><span class="n">heads</span><span class="p">[</span><span class="n">DEFAULT_GIT_BRANCH</span><span class="p">]</span>
-</span><span id="L-1000"><a href="#L-1000"><span class="linenos">1000</span></a>        <span class="n">main_branch</span><span class="o">.</span><span class="n">checkout</span><span class="p">()</span>
-</span><span id="L-1001"><a href="#L-1001"><span class="linenos">1001</span></a>    <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1002"><a href="#L-1002"><span class="linenos">1002</span></a>        <span class="k">raise</span> <span class="ne">AttributeError</span><span class="p">(</span>
-</span><span id="L-1003"><a href="#L-1003"><span class="linenos">1003</span></a>            <span class="sa">f</span><span class="s2">&quot;Phen repo does not contain the default branch </span><span class="si">{</span><span class="n">DEFAULT_GIT_BRANCH</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1004"><a href="#L-1004"><span class="linenos">1004</span></a>        <span class="p">)</span>
-</span><span id="L-1005"><a href="#L-1005"><span class="linenos">1005</span></a>
-</span><span id="L-1006"><a href="#L-1006"><span class="linenos">1006</span></a>    <span class="c1"># check if any changes to publish</span>
-</span><span id="L-1007"><a href="#L-1007"><span class="linenos">1007</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">repo</span><span class="o">.</span><span class="n">is_dirty</span><span class="p">()</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">repo</span><span class="o">.</span><span class="n">untracked_files</span><span class="p">:</span>
-</span><span id="L-1008"><a href="#L-1008"><span class="linenos">1008</span></a>        <span class="k">if</span> <span class="n">remote_url</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="s2">&quot;origin&quot;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">repo</span><span class="o">.</span><span class="n">remotes</span><span class="p">:</span>
-</span><span id="L-1009"><a href="#L-1009"><span class="linenos">1009</span></a>            <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;First publish to remote url </span><span class="si">{</span><span class="n">remote_url</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-1010"><a href="#L-1010"><span class="linenos">1010</span></a>        <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1011"><a href="#L-1011"><span class="linenos">1011</span></a>            <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Nothing to publish, no changes to the repo&quot;</span><span class="p">)</span>
-</span><span id="L-1012"><a href="#L-1012"><span class="linenos">1012</span></a>            <span class="k">return</span>
-</span><span id="L-1013"><a href="#L-1013"><span class="linenos">1013</span></a>
-</span><span id="L-1014"><a href="#L-1014"><span class="linenos">1014</span></a>    <span class="c1"># get next version</span>
-</span><span id="L-1015"><a href="#L-1015"><span class="linenos">1015</span></a>    <span class="n">new_version_str</span> <span class="o">=</span> <span class="n">generate_version_tag</span><span class="p">(</span><span class="n">repo</span><span class="p">,</span> <span class="n">increment</span><span class="p">)</span>
-</span><span id="L-1016"><a href="#L-1016"><span class="linenos">1016</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;New version: </span><span class="si">{</span><span class="n">new_version_str</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-996"><a href="#L-996"><span class="linenos"> 996</span></a>    <span class="k">return</span> <span class="n">new_version_str</span>
+</span><span id="L-997"><a href="#L-997"><span class="linenos"> 997</span></a>
+</span><span id="L-998"><a href="#L-998"><span class="linenos"> 998</span></a>
+</span><span id="L-999"><a href="#L-999"><span class="linenos"> 999</span></a><span class="k">def</span><span class="w"> </span><span class="nf">publish</span><span class="p">(</span>
+</span><span id="L-1000"><a href="#L-1000"><span class="linenos">1000</span></a>    <span class="n">phen_dir</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">msg</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">remote_url</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">increment</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="n">DEFAULT_VERSION_INC</span>
+</span><span id="L-1001"><a href="#L-1001"><span class="linenos">1001</span></a><span class="p">):</span>
+</span><span id="L-1002"><a href="#L-1002"><span class="linenos">1002</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Publishes updates to the phenotype by commiting all changes to the repo directory&quot;&quot;&quot;</span>
+</span><span id="L-1003"><a href="#L-1003"><span class="linenos">1003</span></a>
+</span><span id="L-1004"><a href="#L-1004"><span class="linenos">1004</span></a>    <span class="c1"># Validate config</span>
+</span><span id="L-1005"><a href="#L-1005"><span class="linenos">1005</span></a>    <span class="n">validate</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">)</span>
+</span><span id="L-1006"><a href="#L-1006"><span class="linenos">1006</span></a>    <span class="n">phen_path</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">)</span>
+</span><span id="L-1007"><a href="#L-1007"><span class="linenos">1007</span></a>
+</span><span id="L-1008"><a href="#L-1008"><span class="linenos">1008</span></a>    <span class="c1"># load git repo and set the branch</span>
+</span><span id="L-1009"><a href="#L-1009"><span class="linenos">1009</span></a>    <span class="n">repo</span> <span class="o">=</span> <span class="n">git</span><span class="o">.</span><span class="n">Repo</span><span class="p">(</span><span class="n">phen_path</span><span class="p">)</span>
+</span><span id="L-1010"><a href="#L-1010"><span class="linenos">1010</span></a>    <span class="k">if</span> <span class="n">DEFAULT_GIT_BRANCH</span> <span class="ow">in</span> <span class="n">repo</span><span class="o">.</span><span class="n">branches</span><span class="p">:</span>
+</span><span id="L-1011"><a href="#L-1011"><span class="linenos">1011</span></a>        <span class="n">main_branch</span> <span class="o">=</span> <span class="n">repo</span><span class="o">.</span><span class="n">heads</span><span class="p">[</span><span class="n">DEFAULT_GIT_BRANCH</span><span class="p">]</span>
+</span><span id="L-1012"><a href="#L-1012"><span class="linenos">1012</span></a>        <span class="n">main_branch</span><span class="o">.</span><span class="n">checkout</span><span class="p">()</span>
+</span><span id="L-1013"><a href="#L-1013"><span class="linenos">1013</span></a>    <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1014"><a href="#L-1014"><span class="linenos">1014</span></a>        <span class="k">raise</span> <span class="ne">AttributeError</span><span class="p">(</span>
+</span><span id="L-1015"><a href="#L-1015"><span class="linenos">1015</span></a>            <span class="sa">f</span><span class="s2">&quot;Phen repo does not contain the default branch </span><span class="si">{</span><span class="n">DEFAULT_GIT_BRANCH</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1016"><a href="#L-1016"><span class="linenos">1016</span></a>        <span class="p">)</span>
 </span><span id="L-1017"><a href="#L-1017"><span class="linenos">1017</span></a>
-</span><span id="L-1018"><a href="#L-1018"><span class="linenos">1018</span></a>    <span class="c1"># Write version in configuration file</span>
-</span><span id="L-1019"><a href="#L-1019"><span class="linenos">1019</span></a>    <span class="n">config_path</span> <span class="o">=</span> <span class="n">phen_path</span> <span class="o">/</span> <span class="n">CONFIG_FILE</span>
-</span><span id="L-1020"><a href="#L-1020"><span class="linenos">1020</span></a>    <span class="k">with</span> <span class="n">config_path</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="s2">&quot;r&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
-</span><span id="L-1021"><a href="#L-1021"><span class="linenos">1021</span></a>        <span class="n">config</span> <span class="o">=</span> <span class="n">yaml</span><span class="o">.</span><span class="n">safe_load</span><span class="p">(</span><span class="n">file</span><span class="p">)</span>
-</span><span id="L-1022"><a href="#L-1022"><span class="linenos">1022</span></a>
-</span><span id="L-1023"><a href="#L-1023"><span class="linenos">1023</span></a>    <span class="n">config</span><span class="p">[</span><span class="s2">&quot;phenotype&quot;</span><span class="p">][</span><span class="s2">&quot;version&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">new_version_str</span>
-</span><span id="L-1024"><a href="#L-1024"><span class="linenos">1024</span></a>    <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">config_path</span><span class="p">,</span> <span class="s2">&quot;w&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
-</span><span id="L-1025"><a href="#L-1025"><span class="linenos">1025</span></a>        <span class="n">yaml</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span>
-</span><span id="L-1026"><a href="#L-1026"><span class="linenos">1026</span></a>            <span class="n">config</span><span class="p">,</span>
-</span><span id="L-1027"><a href="#L-1027"><span class="linenos">1027</span></a>            <span class="n">file</span><span class="p">,</span>
-</span><span id="L-1028"><a href="#L-1028"><span class="linenos">1028</span></a>            <span class="n">Dumper</span><span class="o">=</span><span class="n">util</span><span class="o">.</span><span class="n">QuotedDumper</span><span class="p">,</span>
-</span><span id="L-1029"><a href="#L-1029"><span class="linenos">1029</span></a>            <span class="n">default_flow_style</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1030"><a href="#L-1030"><span class="linenos">1030</span></a>            <span class="n">sort_keys</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-</span><span id="L-1031"><a href="#L-1031"><span class="linenos">1031</span></a>            <span class="n">default_style</span><span class="o">=</span><span class="s1">&#39;&quot;&#39;</span><span class="p">,</span>
-</span><span id="L-1032"><a href="#L-1032"><span class="linenos">1032</span></a>        <span class="p">)</span>
-</span><span id="L-1033"><a href="#L-1033"><span class="linenos">1033</span></a>
-</span><span id="L-1034"><a href="#L-1034"><span class="linenos">1034</span></a>    <span class="c1"># Add and commit changes to repo including version updates</span>
-</span><span id="L-1035"><a href="#L-1035"><span class="linenos">1035</span></a>    <span class="n">commit_message</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;Committing updates to phenotype </span><span class="si">{</span><span class="n">phen_path</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1036"><a href="#L-1036"><span class="linenos">1036</span></a>    <span class="n">repo</span><span class="o">.</span><span class="n">git</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="s2">&quot;--all&quot;</span><span class="p">)</span>
-</span><span id="L-1037"><a href="#L-1037"><span class="linenos">1037</span></a>    <span class="n">repo</span><span class="o">.</span><span class="n">index</span><span class="o">.</span><span class="n">commit</span><span class="p">(</span><span class="n">commit_message</span><span class="p">)</span>
-</span><span id="L-1038"><a href="#L-1038"><span class="linenos">1038</span></a>
-</span><span id="L-1039"><a href="#L-1039"><span class="linenos">1039</span></a>    <span class="c1"># Add tag to the repo</span>
-</span><span id="L-1040"><a href="#L-1040"><span class="linenos">1040</span></a>    <span class="n">repo</span><span class="o">.</span><span class="n">create_tag</span><span class="p">(</span><span class="n">new_version_str</span><span class="p">)</span>
-</span><span id="L-1041"><a href="#L-1041"><span class="linenos">1041</span></a>
-</span><span id="L-1042"><a href="#L-1042"><span class="linenos">1042</span></a>    <span class="c1"># push to origin if a remote repo</span>
-</span><span id="L-1043"><a href="#L-1043"><span class="linenos">1043</span></a>    <span class="k">if</span> <span class="n">remote_url</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="s2">&quot;origin&quot;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">repo</span><span class="o">.</span><span class="n">remotes</span><span class="p">:</span>
-</span><span id="L-1044"><a href="#L-1044"><span class="linenos">1044</span></a>        <span class="n">git_url</span> <span class="o">=</span> <span class="n">construct_git_url</span><span class="p">(</span><span class="n">remote_url</span><span class="p">)</span>
-</span><span id="L-1045"><a href="#L-1045"><span class="linenos">1045</span></a>        <span class="n">repo</span><span class="o">.</span><span class="n">create_remote</span><span class="p">(</span><span class="s2">&quot;origin&quot;</span><span class="p">,</span> <span class="n">git_url</span><span class="p">)</span>
-</span><span id="L-1046"><a href="#L-1046"><span class="linenos">1046</span></a>
-</span><span id="L-1047"><a href="#L-1047"><span class="linenos">1047</span></a>    <span class="k">try</span><span class="p">:</span>
-</span><span id="L-1048"><a href="#L-1048"><span class="linenos">1048</span></a>        <span class="k">if</span> <span class="s2">&quot;origin&quot;</span> <span class="ow">in</span> <span class="n">repo</span><span class="o">.</span><span class="n">remotes</span><span class="p">:</span>
-</span><span id="L-1049"><a href="#L-1049"><span class="linenos">1049</span></a>            <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Remote &#39;origin&#39; is set </span><span class="si">{</span><span class="n">repo</span><span class="o">.</span><span class="n">remotes</span><span class="o">.</span><span class="n">origin</span><span class="o">.</span><span class="n">url</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-1050"><a href="#L-1050"><span class="linenos">1050</span></a>            <span class="n">origin</span> <span class="o">=</span> <span class="n">repo</span><span class="o">.</span><span class="n">remotes</span><span class="o">.</span><span class="n">origin</span>
-</span><span id="L-1051"><a href="#L-1051"><span class="linenos">1051</span></a>            <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Pushing main branch to remote repo&quot;</span><span class="p">)</span>
-</span><span id="L-1052"><a href="#L-1052"><span class="linenos">1052</span></a>            <span class="n">repo</span><span class="o">.</span><span class="n">git</span><span class="o">.</span><span class="n">push</span><span class="p">(</span><span class="s2">&quot;--set-upstream&quot;</span><span class="p">,</span> <span class="s2">&quot;origin&quot;</span><span class="p">,</span> <span class="s2">&quot;main&quot;</span><span class="p">)</span>
-</span><span id="L-1053"><a href="#L-1053"><span class="linenos">1053</span></a>            <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Pushing version tags to remote git repo&quot;</span><span class="p">)</span>
-</span><span id="L-1054"><a href="#L-1054"><span class="linenos">1054</span></a>            <span class="n">origin</span><span class="o">.</span><span class="n">push</span><span class="p">(</span><span class="n">tags</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-1055"><a href="#L-1055"><span class="linenos">1055</span></a>            <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">&quot;Changes pushed to &#39;origin&#39;&quot;</span><span class="p">)</span>
-</span><span id="L-1056"><a href="#L-1056"><span class="linenos">1056</span></a>        <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1057"><a href="#L-1057"><span class="linenos">1057</span></a>            <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">&quot;Remote &#39;origin&#39; is not set&quot;</span><span class="p">)</span>
-</span><span id="L-1058"><a href="#L-1058"><span class="linenos">1058</span></a>    <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
-</span><span id="L-1059"><a href="#L-1059"><span class="linenos">1059</span></a>        <span class="n">tag_ref</span> <span class="o">=</span> <span class="n">repo</span><span class="o">.</span><span class="n">tags</span><span class="p">[</span><span class="n">new_version_str</span><span class="p">]</span>
-</span><span id="L-1060"><a href="#L-1060"><span class="linenos">1060</span></a>        <span class="n">repo</span><span class="o">.</span><span class="n">delete_tag</span><span class="p">(</span><span class="n">tag_ref</span><span class="p">)</span>
-</span><span id="L-1061"><a href="#L-1061"><span class="linenos">1061</span></a>        <span class="n">repo</span><span class="o">.</span><span class="n">git</span><span class="o">.</span><span class="n">reset</span><span class="p">(</span><span class="s2">&quot;--soft&quot;</span><span class="p">,</span> <span class="s2">&quot;HEAD~1&quot;</span><span class="p">)</span>
-</span><span id="L-1062"><a href="#L-1062"><span class="linenos">1062</span></a>        <span class="k">raise</span> <span class="n">e</span>
-</span><span id="L-1063"><a href="#L-1063"><span class="linenos">1063</span></a>
-</span><span id="L-1064"><a href="#L-1064"><span class="linenos">1064</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Phenotype published successfully&quot;</span><span class="p">)</span>
-</span><span id="L-1065"><a href="#L-1065"><span class="linenos">1065</span></a>
-</span><span id="L-1066"><a href="#L-1066"><span class="linenos">1066</span></a>
-</span><span id="L-1067"><a href="#L-1067"><span class="linenos">1067</span></a><span class="k">def</span><span class="w"> </span><span class="nf">export</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">version</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
-</span><span id="L-1068"><a href="#L-1068"><span class="linenos">1068</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Exports a phen repo at a specific tagged version into a target directory&quot;&quot;&quot;</span>
-</span><span id="L-1069"><a href="#L-1069"><span class="linenos">1069</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Exporting phenotype </span><span class="si">{</span><span class="n">phen_dir</span><span class="si">}</span><span class="s2"> at version </span><span class="si">{</span><span class="n">version</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-1070"><a href="#L-1070"><span class="linenos">1070</span></a>
-</span><span id="L-1071"><a href="#L-1071"><span class="linenos">1071</span></a>    <span class="c1"># validate configuration</span>
-</span><span id="L-1072"><a href="#L-1072"><span class="linenos">1072</span></a>    <span class="n">validate</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">)</span>
-</span><span id="L-1073"><a href="#L-1073"><span class="linenos">1073</span></a>    <span class="n">phen_path</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">)</span>
-</span><span id="L-1074"><a href="#L-1074"><span class="linenos">1074</span></a>
-</span><span id="L-1075"><a href="#L-1075"><span class="linenos">1075</span></a>    <span class="c1"># load configuration</span>
-</span><span id="L-1076"><a href="#L-1076"><span class="linenos">1076</span></a>    <span class="n">config_path</span> <span class="o">=</span> <span class="n">phen_path</span> <span class="o">/</span> <span class="n">CONFIG_FILE</span>
-</span><span id="L-1077"><a href="#L-1077"><span class="linenos">1077</span></a>    <span class="k">with</span> <span class="n">config_path</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="s2">&quot;r&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
-</span><span id="L-1078"><a href="#L-1078"><span class="linenos">1078</span></a>        <span class="n">config</span> <span class="o">=</span> <span class="n">yaml</span><span class="o">.</span><span class="n">safe_load</span><span class="p">(</span><span class="n">file</span><span class="p">)</span>
-</span><span id="L-1079"><a href="#L-1079"><span class="linenos">1079</span></a>
-</span><span id="L-1080"><a href="#L-1080"><span class="linenos">1080</span></a>    <span class="n">map_path</span> <span class="o">=</span> <span class="n">phen_path</span> <span class="o">/</span> <span class="n">MAP_DIR</span>
-</span><span id="L-1081"><a href="#L-1081"><span class="linenos">1081</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">map_path</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
-</span><span id="L-1082"><a href="#L-1082"><span class="linenos">1082</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Map path does not exist &#39;</span><span class="si">{</span><span class="n">map_path</span><span class="si">}</span><span class="s2">&#39;&quot;</span><span class="p">)</span>
-</span><span id="L-1083"><a href="#L-1083"><span class="linenos">1083</span></a>
-</span><span id="L-1084"><a href="#L-1084"><span class="linenos">1084</span></a>    <span class="n">export_path</span> <span class="o">=</span> <span class="n">phen_path</span> <span class="o">/</span> <span class="n">OMOP_PATH</span>
-</span><span id="L-1085"><a href="#L-1085"><span class="linenos">1085</span></a>    <span class="c1"># check export directory exists and if not create it</span>
-</span><span id="L-1086"><a href="#L-1086"><span class="linenos">1086</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">export_path</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
-</span><span id="L-1087"><a href="#L-1087"><span class="linenos">1087</span></a>        <span class="n">export_path</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">parents</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-1088"><a href="#L-1088"><span class="linenos">1088</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;OMOP export directory &#39;</span><span class="si">{</span><span class="n">export_path</span><span class="si">}</span><span class="s2">&#39; created.&quot;</span><span class="p">)</span>
-</span><span id="L-1089"><a href="#L-1089"><span class="linenos">1089</span></a>
-</span><span id="L-1090"><a href="#L-1090"><span class="linenos">1090</span></a>    <span class="c1"># omop export db</span>
-</span><span id="L-1091"><a href="#L-1091"><span class="linenos">1091</span></a>    <span class="n">export_db_path</span> <span class="o">=</span> <span class="n">omop</span><span class="o">.</span><span class="n">export</span><span class="p">(</span>
-</span><span id="L-1092"><a href="#L-1092"><span class="linenos">1092</span></a>        <span class="n">map_path</span><span class="p">,</span>
-</span><span id="L-1093"><a href="#L-1093"><span class="linenos">1093</span></a>        <span class="n">export_path</span><span class="p">,</span>
-</span><span id="L-1094"><a href="#L-1094"><span class="linenos">1094</span></a>        <span class="n">config</span><span class="p">[</span><span class="s2">&quot;phenotype&quot;</span><span class="p">][</span><span class="s2">&quot;version&quot;</span><span class="p">],</span>
-</span><span id="L-1095"><a href="#L-1095"><span class="linenos">1095</span></a>        <span class="n">config</span><span class="p">[</span><span class="s2">&quot;phenotype&quot;</span><span class="p">][</span><span class="s2">&quot;omop&quot;</span><span class="p">],</span>
-</span><span id="L-1096"><a href="#L-1096"><span class="linenos">1096</span></a>    <span class="p">)</span>
-</span><span id="L-1097"><a href="#L-1097"><span class="linenos">1097</span></a>
-</span><span id="L-1098"><a href="#L-1098"><span class="linenos">1098</span></a>    <span class="c1"># write to tables</span>
-</span><span id="L-1099"><a href="#L-1099"><span class="linenos">1099</span></a>    <span class="c1"># export as csv</span>
-</span><span id="L-1100"><a href="#L-1100"><span class="linenos">1100</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Phenotype exported successfully&quot;</span><span class="p">)</span>
+</span><span id="L-1018"><a href="#L-1018"><span class="linenos">1018</span></a>    <span class="c1"># check if any changes to publish</span>
+</span><span id="L-1019"><a href="#L-1019"><span class="linenos">1019</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">repo</span><span class="o">.</span><span class="n">is_dirty</span><span class="p">()</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">repo</span><span class="o">.</span><span class="n">untracked_files</span><span class="p">:</span>
+</span><span id="L-1020"><a href="#L-1020"><span class="linenos">1020</span></a>        <span class="k">if</span> <span class="n">remote_url</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="s2">&quot;origin&quot;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">repo</span><span class="o">.</span><span class="n">remotes</span><span class="p">:</span>
+</span><span id="L-1021"><a href="#L-1021"><span class="linenos">1021</span></a>            <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;First publish to remote url </span><span class="si">{</span><span class="n">remote_url</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-1022"><a href="#L-1022"><span class="linenos">1022</span></a>        <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1023"><a href="#L-1023"><span class="linenos">1023</span></a>            <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Nothing to publish, no changes to the repo&quot;</span><span class="p">)</span>
+</span><span id="L-1024"><a href="#L-1024"><span class="linenos">1024</span></a>            <span class="k">return</span>
+</span><span id="L-1025"><a href="#L-1025"><span class="linenos">1025</span></a>
+</span><span id="L-1026"><a href="#L-1026"><span class="linenos">1026</span></a>    <span class="c1"># get next version</span>
+</span><span id="L-1027"><a href="#L-1027"><span class="linenos">1027</span></a>    <span class="n">new_version_str</span> <span class="o">=</span> <span class="n">_generate_version_tag</span><span class="p">(</span><span class="n">repo</span><span class="p">,</span> <span class="n">increment</span><span class="p">)</span>
+</span><span id="L-1028"><a href="#L-1028"><span class="linenos">1028</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;New version: </span><span class="si">{</span><span class="n">new_version_str</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-1029"><a href="#L-1029"><span class="linenos">1029</span></a>
+</span><span id="L-1030"><a href="#L-1030"><span class="linenos">1030</span></a>    <span class="c1"># Write version in configuration file</span>
+</span><span id="L-1031"><a href="#L-1031"><span class="linenos">1031</span></a>    <span class="n">config_path</span> <span class="o">=</span> <span class="n">phen_path</span> <span class="o">/</span> <span class="n">CONFIG_FILE</span>
+</span><span id="L-1032"><a href="#L-1032"><span class="linenos">1032</span></a>    <span class="k">with</span> <span class="n">config_path</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="s2">&quot;r&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
+</span><span id="L-1033"><a href="#L-1033"><span class="linenos">1033</span></a>        <span class="n">config</span> <span class="o">=</span> <span class="n">yaml</span><span class="o">.</span><span class="n">safe_load</span><span class="p">(</span><span class="n">file</span><span class="p">)</span>
+</span><span id="L-1034"><a href="#L-1034"><span class="linenos">1034</span></a>
+</span><span id="L-1035"><a href="#L-1035"><span class="linenos">1035</span></a>    <span class="n">config</span><span class="p">[</span><span class="s2">&quot;phenotype&quot;</span><span class="p">][</span><span class="s2">&quot;version&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">new_version_str</span>
+</span><span id="L-1036"><a href="#L-1036"><span class="linenos">1036</span></a>    <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">config_path</span><span class="p">,</span> <span class="s2">&quot;w&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
+</span><span id="L-1037"><a href="#L-1037"><span class="linenos">1037</span></a>        <span class="n">yaml</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span>
+</span><span id="L-1038"><a href="#L-1038"><span class="linenos">1038</span></a>            <span class="n">config</span><span class="p">,</span>
+</span><span id="L-1039"><a href="#L-1039"><span class="linenos">1039</span></a>            <span class="n">file</span><span class="p">,</span>
+</span><span id="L-1040"><a href="#L-1040"><span class="linenos">1040</span></a>            <span class="n">Dumper</span><span class="o">=</span><span class="n">util</span><span class="o">.</span><span class="n">QuotedDumper</span><span class="p">,</span>
+</span><span id="L-1041"><a href="#L-1041"><span class="linenos">1041</span></a>            <span class="n">default_flow_style</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1042"><a href="#L-1042"><span class="linenos">1042</span></a>            <span class="n">sort_keys</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="L-1043"><a href="#L-1043"><span class="linenos">1043</span></a>            <span class="n">default_style</span><span class="o">=</span><span class="s1">&#39;&quot;&#39;</span><span class="p">,</span>
+</span><span id="L-1044"><a href="#L-1044"><span class="linenos">1044</span></a>        <span class="p">)</span>
+</span><span id="L-1045"><a href="#L-1045"><span class="linenos">1045</span></a>
+</span><span id="L-1046"><a href="#L-1046"><span class="linenos">1046</span></a>    <span class="c1"># Add and commit changes to repo including version updates</span>
+</span><span id="L-1047"><a href="#L-1047"><span class="linenos">1047</span></a>    <span class="n">commit_message</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;Committing updates to phenotype </span><span class="si">{</span><span class="n">phen_path</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1048"><a href="#L-1048"><span class="linenos">1048</span></a>    <span class="n">repo</span><span class="o">.</span><span class="n">git</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="s2">&quot;--all&quot;</span><span class="p">)</span>
+</span><span id="L-1049"><a href="#L-1049"><span class="linenos">1049</span></a>    <span class="n">repo</span><span class="o">.</span><span class="n">index</span><span class="o">.</span><span class="n">commit</span><span class="p">(</span><span class="n">commit_message</span><span class="p">)</span>
+</span><span id="L-1050"><a href="#L-1050"><span class="linenos">1050</span></a>
+</span><span id="L-1051"><a href="#L-1051"><span class="linenos">1051</span></a>    <span class="c1"># Add tag to the repo</span>
+</span><span id="L-1052"><a href="#L-1052"><span class="linenos">1052</span></a>    <span class="n">repo</span><span class="o">.</span><span class="n">create_tag</span><span class="p">(</span><span class="n">new_version_str</span><span class="p">)</span>
+</span><span id="L-1053"><a href="#L-1053"><span class="linenos">1053</span></a>
+</span><span id="L-1054"><a href="#L-1054"><span class="linenos">1054</span></a>    <span class="c1"># push to origin if a remote repo</span>
+</span><span id="L-1055"><a href="#L-1055"><span class="linenos">1055</span></a>    <span class="k">if</span> <span class="n">remote_url</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="s2">&quot;origin&quot;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">repo</span><span class="o">.</span><span class="n">remotes</span><span class="p">:</span>
+</span><span id="L-1056"><a href="#L-1056"><span class="linenos">1056</span></a>        <span class="n">git_url</span> <span class="o">=</span> <span class="n">_construct_git_url</span><span class="p">(</span><span class="n">remote_url</span><span class="p">)</span>
+</span><span id="L-1057"><a href="#L-1057"><span class="linenos">1057</span></a>        <span class="n">repo</span><span class="o">.</span><span class="n">create_remote</span><span class="p">(</span><span class="s2">&quot;origin&quot;</span><span class="p">,</span> <span class="n">git_url</span><span class="p">)</span>
+</span><span id="L-1058"><a href="#L-1058"><span class="linenos">1058</span></a>
+</span><span id="L-1059"><a href="#L-1059"><span class="linenos">1059</span></a>    <span class="k">try</span><span class="p">:</span>
+</span><span id="L-1060"><a href="#L-1060"><span class="linenos">1060</span></a>        <span class="k">if</span> <span class="s2">&quot;origin&quot;</span> <span class="ow">in</span> <span class="n">repo</span><span class="o">.</span><span class="n">remotes</span><span class="p">:</span>
+</span><span id="L-1061"><a href="#L-1061"><span class="linenos">1061</span></a>            <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Remote &#39;origin&#39; is set </span><span class="si">{</span><span class="n">repo</span><span class="o">.</span><span class="n">remotes</span><span class="o">.</span><span class="n">origin</span><span class="o">.</span><span class="n">url</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-1062"><a href="#L-1062"><span class="linenos">1062</span></a>            <span class="n">origin</span> <span class="o">=</span> <span class="n">repo</span><span class="o">.</span><span class="n">remotes</span><span class="o">.</span><span class="n">origin</span>
+</span><span id="L-1063"><a href="#L-1063"><span class="linenos">1063</span></a>            <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Pushing main branch to remote repo&quot;</span><span class="p">)</span>
+</span><span id="L-1064"><a href="#L-1064"><span class="linenos">1064</span></a>            <span class="n">repo</span><span class="o">.</span><span class="n">git</span><span class="o">.</span><span class="n">push</span><span class="p">(</span><span class="s2">&quot;--set-upstream&quot;</span><span class="p">,</span> <span class="s2">&quot;origin&quot;</span><span class="p">,</span> <span class="s2">&quot;main&quot;</span><span class="p">)</span>
+</span><span id="L-1065"><a href="#L-1065"><span class="linenos">1065</span></a>            <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Pushing version tags to remote git repo&quot;</span><span class="p">)</span>
+</span><span id="L-1066"><a href="#L-1066"><span class="linenos">1066</span></a>            <span class="n">origin</span><span class="o">.</span><span class="n">push</span><span class="p">(</span><span class="n">tags</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-1067"><a href="#L-1067"><span class="linenos">1067</span></a>            <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">&quot;Changes pushed to &#39;origin&#39;&quot;</span><span class="p">)</span>
+</span><span id="L-1068"><a href="#L-1068"><span class="linenos">1068</span></a>        <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1069"><a href="#L-1069"><span class="linenos">1069</span></a>            <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">&quot;Remote &#39;origin&#39; is not set&quot;</span><span class="p">)</span>
+</span><span id="L-1070"><a href="#L-1070"><span class="linenos">1070</span></a>    <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
+</span><span id="L-1071"><a href="#L-1071"><span class="linenos">1071</span></a>        <span class="n">tag_ref</span> <span class="o">=</span> <span class="n">repo</span><span class="o">.</span><span class="n">tags</span><span class="p">[</span><span class="n">new_version_str</span><span class="p">]</span>
+</span><span id="L-1072"><a href="#L-1072"><span class="linenos">1072</span></a>        <span class="n">repo</span><span class="o">.</span><span class="n">delete_tag</span><span class="p">(</span><span class="n">tag_ref</span><span class="p">)</span>
+</span><span id="L-1073"><a href="#L-1073"><span class="linenos">1073</span></a>        <span class="n">repo</span><span class="o">.</span><span class="n">git</span><span class="o">.</span><span class="n">reset</span><span class="p">(</span><span class="s2">&quot;--soft&quot;</span><span class="p">,</span> <span class="s2">&quot;HEAD~1&quot;</span><span class="p">)</span>
+</span><span id="L-1074"><a href="#L-1074"><span class="linenos">1074</span></a>        <span class="k">raise</span> <span class="n">e</span>
+</span><span id="L-1075"><a href="#L-1075"><span class="linenos">1075</span></a>
+</span><span id="L-1076"><a href="#L-1076"><span class="linenos">1076</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Phenotype published successfully&quot;</span><span class="p">)</span>
+</span><span id="L-1077"><a href="#L-1077"><span class="linenos">1077</span></a>
+</span><span id="L-1078"><a href="#L-1078"><span class="linenos">1078</span></a>
+</span><span id="L-1079"><a href="#L-1079"><span class="linenos">1079</span></a><span class="k">def</span><span class="w"> </span><span class="nf">export</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">version</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
+</span><span id="L-1080"><a href="#L-1080"><span class="linenos">1080</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Exports a phen repo at a specific tagged version into a target directory&quot;&quot;&quot;</span>
+</span><span id="L-1081"><a href="#L-1081"><span class="linenos">1081</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Exporting phenotype </span><span class="si">{</span><span class="n">phen_dir</span><span class="si">}</span><span class="s2"> at version </span><span class="si">{</span><span class="n">version</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-1082"><a href="#L-1082"><span class="linenos">1082</span></a>
+</span><span id="L-1083"><a href="#L-1083"><span class="linenos">1083</span></a>    <span class="c1"># validate configuration</span>
+</span><span id="L-1084"><a href="#L-1084"><span class="linenos">1084</span></a>    <span class="n">validate</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">)</span>
+</span><span id="L-1085"><a href="#L-1085"><span class="linenos">1085</span></a>    <span class="n">phen_path</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">)</span>
+</span><span id="L-1086"><a href="#L-1086"><span class="linenos">1086</span></a>
+</span><span id="L-1087"><a href="#L-1087"><span class="linenos">1087</span></a>    <span class="c1"># load configuration</span>
+</span><span id="L-1088"><a href="#L-1088"><span class="linenos">1088</span></a>    <span class="n">config_path</span> <span class="o">=</span> <span class="n">phen_path</span> <span class="o">/</span> <span class="n">CONFIG_FILE</span>
+</span><span id="L-1089"><a href="#L-1089"><span class="linenos">1089</span></a>    <span class="k">with</span> <span class="n">config_path</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="s2">&quot;r&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
+</span><span id="L-1090"><a href="#L-1090"><span class="linenos">1090</span></a>        <span class="n">config</span> <span class="o">=</span> <span class="n">yaml</span><span class="o">.</span><span class="n">safe_load</span><span class="p">(</span><span class="n">file</span><span class="p">)</span>
+</span><span id="L-1091"><a href="#L-1091"><span class="linenos">1091</span></a>
+</span><span id="L-1092"><a href="#L-1092"><span class="linenos">1092</span></a>    <span class="n">map_path</span> <span class="o">=</span> <span class="n">phen_path</span> <span class="o">/</span> <span class="n">MAP_DIR</span>
+</span><span id="L-1093"><a href="#L-1093"><span class="linenos">1093</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">map_path</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
+</span><span id="L-1094"><a href="#L-1094"><span class="linenos">1094</span></a>        <span class="n">_logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Map path does not exist &#39;</span><span class="si">{</span><span class="n">map_path</span><span class="si">}</span><span class="s2">&#39;&quot;</span><span class="p">)</span>
+</span><span id="L-1095"><a href="#L-1095"><span class="linenos">1095</span></a>
+</span><span id="L-1096"><a href="#L-1096"><span class="linenos">1096</span></a>    <span class="n">export_path</span> <span class="o">=</span> <span class="n">phen_path</span> <span class="o">/</span> <span class="n">OMOP_PATH</span>
+</span><span id="L-1097"><a href="#L-1097"><span class="linenos">1097</span></a>    <span class="c1"># check export directory exists and if not create it</span>
+</span><span id="L-1098"><a href="#L-1098"><span class="linenos">1098</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">export_path</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
+</span><span id="L-1099"><a href="#L-1099"><span class="linenos">1099</span></a>        <span class="n">export_path</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">parents</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-1100"><a href="#L-1100"><span class="linenos">1100</span></a>        <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;OMOP export directory &#39;</span><span class="si">{</span><span class="n">export_path</span><span class="si">}</span><span class="s2">&#39; created.&quot;</span><span class="p">)</span>
 </span><span id="L-1101"><a href="#L-1101"><span class="linenos">1101</span></a>
-</span><span id="L-1102"><a href="#L-1102"><span class="linenos">1102</span></a>
-</span><span id="L-1103"><a href="#L-1103"><span class="linenos">1103</span></a><span class="k">def</span><span class="w"> </span><span class="nf">copy</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">target_dir</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">version</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
-</span><span id="L-1104"><a href="#L-1104"><span class="linenos">1104</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Copys a phen repo at a specific tagged version into a target directory&quot;&quot;&quot;</span>
-</span><span id="L-1105"><a href="#L-1105"><span class="linenos">1105</span></a>
-</span><span id="L-1106"><a href="#L-1106"><span class="linenos">1106</span></a>    <span class="c1"># Validate</span>
-</span><span id="L-1107"><a href="#L-1107"><span class="linenos">1107</span></a>    <span class="n">validate</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">)</span>
-</span><span id="L-1108"><a href="#L-1108"><span class="linenos">1108</span></a>    <span class="n">phen_path</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">)</span>
+</span><span id="L-1102"><a href="#L-1102"><span class="linenos">1102</span></a>    <span class="c1"># omop export db</span>
+</span><span id="L-1103"><a href="#L-1103"><span class="linenos">1103</span></a>    <span class="n">export_db_path</span> <span class="o">=</span> <span class="n">omop</span><span class="o">.</span><span class="n">export</span><span class="p">(</span>
+</span><span id="L-1104"><a href="#L-1104"><span class="linenos">1104</span></a>        <span class="n">map_path</span><span class="p">,</span>
+</span><span id="L-1105"><a href="#L-1105"><span class="linenos">1105</span></a>        <span class="n">export_path</span><span class="p">,</span>
+</span><span id="L-1106"><a href="#L-1106"><span class="linenos">1106</span></a>        <span class="n">config</span><span class="p">[</span><span class="s2">&quot;phenotype&quot;</span><span class="p">][</span><span class="s2">&quot;version&quot;</span><span class="p">],</span>
+</span><span id="L-1107"><a href="#L-1107"><span class="linenos">1107</span></a>        <span class="n">config</span><span class="p">[</span><span class="s2">&quot;phenotype&quot;</span><span class="p">][</span><span class="s2">&quot;omop&quot;</span><span class="p">],</span>
+</span><span id="L-1108"><a href="#L-1108"><span class="linenos">1108</span></a>    <span class="p">)</span>
 </span><span id="L-1109"><a href="#L-1109"><span class="linenos">1109</span></a>
-</span><span id="L-1110"><a href="#L-1110"><span class="linenos">1110</span></a>    <span class="c1"># Check target directory exists</span>
-</span><span id="L-1111"><a href="#L-1111"><span class="linenos">1111</span></a>    <span class="n">target_path</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="n">target_dir</span><span class="p">)</span>
-</span><span id="L-1112"><a href="#L-1112"><span class="linenos">1112</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">target_path</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
-</span><span id="L-1113"><a href="#L-1113"><span class="linenos">1113</span></a>        <span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;The target directory </span><span class="si">{</span><span class="n">target_path</span><span class="si">}</span><span class="s2"> does not exist&quot;</span><span class="p">)</span>
+</span><span id="L-1110"><a href="#L-1110"><span class="linenos">1110</span></a>    <span class="c1"># write to tables</span>
+</span><span id="L-1111"><a href="#L-1111"><span class="linenos">1111</span></a>    <span class="c1"># export as csv</span>
+</span><span id="L-1112"><a href="#L-1112"><span class="linenos">1112</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Phenotype exported successfully&quot;</span><span class="p">)</span>
+</span><span id="L-1113"><a href="#L-1113"><span class="linenos">1113</span></a>
 </span><span id="L-1114"><a href="#L-1114"><span class="linenos">1114</span></a>
-</span><span id="L-1115"><a href="#L-1115"><span class="linenos">1115</span></a>    <span class="c1"># Set copy directory</span>
-</span><span id="L-1116"><a href="#L-1116"><span class="linenos">1116</span></a>    <span class="n">copy_path</span> <span class="o">=</span> <span class="n">target_path</span> <span class="o">/</span> <span class="n">version</span>
-</span><span id="L-1117"><a href="#L-1117"><span class="linenos">1117</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Copying repo </span><span class="si">{</span><span class="n">phen_path</span><span class="si">}</span><span class="s2"> to </span><span class="si">{</span><span class="n">copy_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-1118"><a href="#L-1118"><span class="linenos">1118</span></a>
-</span><span id="L-1119"><a href="#L-1119"><span class="linenos">1119</span></a>    <span class="k">if</span> <span class="p">(</span>
-</span><span id="L-1120"><a href="#L-1120"><span class="linenos">1120</span></a>        <span class="n">copy_path</span><span class="o">.</span><span class="n">exists</span><span class="p">()</span> <span class="ow">and</span> <span class="n">copy_path</span><span class="o">.</span><span class="n">is_dir</span><span class="p">()</span>
-</span><span id="L-1121"><a href="#L-1121"><span class="linenos">1121</span></a>    <span class="p">):</span>  <span class="c1"># Check if it exists and is a directory</span>
-</span><span id="L-1122"><a href="#L-1122"><span class="linenos">1122</span></a>        <span class="n">copy</span> <span class="o">=</span> <span class="n">check_delete_dir</span><span class="p">(</span>
-</span><span id="L-1123"><a href="#L-1123"><span class="linenos">1123</span></a>            <span class="n">copy_path</span><span class="p">,</span>
-</span><span id="L-1124"><a href="#L-1124"><span class="linenos">1124</span></a>            <span class="sa">f</span><span class="s2">&quot;The directory </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">copy_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="s2"> already exists. Do you want to overwrite? (yes/no): &quot;</span><span class="p">,</span>
-</span><span id="L-1125"><a href="#L-1125"><span class="linenos">1125</span></a>        <span class="p">)</span>
-</span><span id="L-1126"><a href="#L-1126"><span class="linenos">1126</span></a>    <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1127"><a href="#L-1127"><span class="linenos">1127</span></a>        <span class="n">copy</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-1128"><a href="#L-1128"><span class="linenos">1128</span></a>
-</span><span id="L-1129"><a href="#L-1129"><span class="linenos">1129</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">copy</span><span class="p">:</span>
-</span><span id="L-1130"><a href="#L-1130"><span class="linenos">1130</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Not copying the version </span><span class="si">{</span><span class="n">version</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-1131"><a href="#L-1131"><span class="linenos">1131</span></a>        <span class="k">return</span>
-</span><span id="L-1132"><a href="#L-1132"><span class="linenos">1132</span></a>
-</span><span id="L-1133"><a href="#L-1133"><span class="linenos">1133</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Cloning repo from </span><span class="si">{</span><span class="n">phen_path</span><span class="si">}</span><span class="s2"> into </span><span class="si">{</span><span class="n">copy_path</span><span class="si">}</span><span class="s2">...&quot;</span><span class="p">)</span>
-</span><span id="L-1134"><a href="#L-1134"><span class="linenos">1134</span></a>    <span class="n">repo</span> <span class="o">=</span> <span class="n">git</span><span class="o">.</span><span class="n">Repo</span><span class="o">.</span><span class="n">clone_from</span><span class="p">(</span><span class="n">phen_path</span><span class="p">,</span> <span class="n">copy_path</span><span class="p">)</span>
-</span><span id="L-1135"><a href="#L-1135"><span class="linenos">1135</span></a>
-</span><span id="L-1136"><a href="#L-1136"><span class="linenos">1136</span></a>    <span class="c1"># Check out the latest commit or specified version</span>
-</span><span id="L-1137"><a href="#L-1137"><span class="linenos">1137</span></a>    <span class="k">if</span> <span class="n">version</span><span class="p">:</span>
-</span><span id="L-1138"><a href="#L-1138"><span class="linenos">1138</span></a>        <span class="c1"># Checkout a specific version (e.g., branch, tag, or commit hash)</span>
-</span><span id="L-1139"><a href="#L-1139"><span class="linenos">1139</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Checking out version </span><span class="si">{</span><span class="n">version</span><span class="si">}</span><span class="s2">...&quot;</span><span class="p">)</span>
-</span><span id="L-1140"><a href="#L-1140"><span class="linenos">1140</span></a>        <span class="n">repo</span><span class="o">.</span><span class="n">git</span><span class="o">.</span><span class="n">checkout</span><span class="p">(</span><span class="n">version</span><span class="p">)</span>
-</span><span id="L-1141"><a href="#L-1141"><span class="linenos">1141</span></a>    <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1142"><a href="#L-1142"><span class="linenos">1142</span></a>        <span class="c1"># Checkout the latest commit (HEAD)</span>
-</span><span id="L-1143"><a href="#L-1143"><span class="linenos">1143</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Checking out the latest commit...&quot;</span><span class="p">)</span>
-</span><span id="L-1144"><a href="#L-1144"><span class="linenos">1144</span></a>        <span class="n">repo</span><span class="o">.</span><span class="n">git</span><span class="o">.</span><span class="n">checkout</span><span class="p">(</span><span class="s2">&quot;HEAD&quot;</span><span class="p">)</span>
-</span><span id="L-1145"><a href="#L-1145"><span class="linenos">1145</span></a>
-</span><span id="L-1146"><a href="#L-1146"><span class="linenos">1146</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Copied </span><span class="si">{</span><span class="n">phen_path</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">repo</span><span class="o">.</span><span class="n">head</span><span class="o">.</span><span class="n">commit</span><span class="o">.</span><span class="n">hexsha</span><span class="p">[:</span><span class="mi">7</span><span class="p">]</span><span class="si">}</span><span class="s2"> in </span><span class="si">{</span><span class="n">copy_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-1115"><a href="#L-1115"><span class="linenos">1115</span></a><span class="k">def</span><span class="w"> </span><span class="nf">copy</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">target_dir</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">version</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
+</span><span id="L-1116"><a href="#L-1116"><span class="linenos">1116</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Copys a phen repo at a specific tagged version into a target directory&quot;&quot;&quot;</span>
+</span><span id="L-1117"><a href="#L-1117"><span class="linenos">1117</span></a>
+</span><span id="L-1118"><a href="#L-1118"><span class="linenos">1118</span></a>    <span class="c1"># Validate</span>
+</span><span id="L-1119"><a href="#L-1119"><span class="linenos">1119</span></a>    <span class="n">validate</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">)</span>
+</span><span id="L-1120"><a href="#L-1120"><span class="linenos">1120</span></a>    <span class="n">phen_path</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">)</span>
+</span><span id="L-1121"><a href="#L-1121"><span class="linenos">1121</span></a>
+</span><span id="L-1122"><a href="#L-1122"><span class="linenos">1122</span></a>    <span class="c1"># Check target directory exists</span>
+</span><span id="L-1123"><a href="#L-1123"><span class="linenos">1123</span></a>    <span class="n">target_path</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="n">target_dir</span><span class="p">)</span>
+</span><span id="L-1124"><a href="#L-1124"><span class="linenos">1124</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">target_path</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
+</span><span id="L-1125"><a href="#L-1125"><span class="linenos">1125</span></a>        <span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;The target directory </span><span class="si">{</span><span class="n">target_path</span><span class="si">}</span><span class="s2"> does not exist&quot;</span><span class="p">)</span>
+</span><span id="L-1126"><a href="#L-1126"><span class="linenos">1126</span></a>
+</span><span id="L-1127"><a href="#L-1127"><span class="linenos">1127</span></a>    <span class="c1"># Set copy directory</span>
+</span><span id="L-1128"><a href="#L-1128"><span class="linenos">1128</span></a>    <span class="n">copy_path</span> <span class="o">=</span> <span class="n">target_path</span> <span class="o">/</span> <span class="n">version</span>
+</span><span id="L-1129"><a href="#L-1129"><span class="linenos">1129</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Copying repo </span><span class="si">{</span><span class="n">phen_path</span><span class="si">}</span><span class="s2"> to </span><span class="si">{</span><span class="n">copy_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-1130"><a href="#L-1130"><span class="linenos">1130</span></a>
+</span><span id="L-1131"><a href="#L-1131"><span class="linenos">1131</span></a>    <span class="k">if</span> <span class="p">(</span>
+</span><span id="L-1132"><a href="#L-1132"><span class="linenos">1132</span></a>        <span class="n">copy_path</span><span class="o">.</span><span class="n">exists</span><span class="p">()</span> <span class="ow">and</span> <span class="n">copy_path</span><span class="o">.</span><span class="n">is_dir</span><span class="p">()</span>
+</span><span id="L-1133"><a href="#L-1133"><span class="linenos">1133</span></a>    <span class="p">):</span>  <span class="c1"># Check if it exists and is a directory</span>
+</span><span id="L-1134"><a href="#L-1134"><span class="linenos">1134</span></a>        <span class="n">copy</span> <span class="o">=</span> <span class="n">_check_delete_dir</span><span class="p">(</span>
+</span><span id="L-1135"><a href="#L-1135"><span class="linenos">1135</span></a>            <span class="n">copy_path</span><span class="p">,</span>
+</span><span id="L-1136"><a href="#L-1136"><span class="linenos">1136</span></a>            <span class="sa">f</span><span class="s2">&quot;The directory </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">copy_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="s2"> already exists. Do you want to overwrite? (yes/no): &quot;</span><span class="p">,</span>
+</span><span id="L-1137"><a href="#L-1137"><span class="linenos">1137</span></a>        <span class="p">)</span>
+</span><span id="L-1138"><a href="#L-1138"><span class="linenos">1138</span></a>    <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1139"><a href="#L-1139"><span class="linenos">1139</span></a>        <span class="n">copy</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-1140"><a href="#L-1140"><span class="linenos">1140</span></a>
+</span><span id="L-1141"><a href="#L-1141"><span class="linenos">1141</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">copy</span><span class="p">:</span>
+</span><span id="L-1142"><a href="#L-1142"><span class="linenos">1142</span></a>        <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Not copying the version </span><span class="si">{</span><span class="n">version</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-1143"><a href="#L-1143"><span class="linenos">1143</span></a>        <span class="k">return</span>
+</span><span id="L-1144"><a href="#L-1144"><span class="linenos">1144</span></a>
+</span><span id="L-1145"><a href="#L-1145"><span class="linenos">1145</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Cloning repo from </span><span class="si">{</span><span class="n">phen_path</span><span class="si">}</span><span class="s2"> into </span><span class="si">{</span><span class="n">copy_path</span><span class="si">}</span><span class="s2">...&quot;</span><span class="p">)</span>
+</span><span id="L-1146"><a href="#L-1146"><span class="linenos">1146</span></a>    <span class="n">repo</span> <span class="o">=</span> <span class="n">git</span><span class="o">.</span><span class="n">Repo</span><span class="o">.</span><span class="n">clone_from</span><span class="p">(</span><span class="n">phen_path</span><span class="p">,</span> <span class="n">copy_path</span><span class="p">)</span>
 </span><span id="L-1147"><a href="#L-1147"><span class="linenos">1147</span></a>
-</span><span id="L-1148"><a href="#L-1148"><span class="linenos">1148</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Phenotype copied successfully&quot;</span><span class="p">)</span>
-</span><span id="L-1149"><a href="#L-1149"><span class="linenos">1149</span></a>
-</span><span id="L-1150"><a href="#L-1150"><span class="linenos">1150</span></a>
-</span><span id="L-1151"><a href="#L-1151"><span class="linenos">1151</span></a><span class="c1"># Convert concept_sets list into dictionaries</span>
-</span><span id="L-1152"><a href="#L-1152"><span class="linenos">1152</span></a><span class="k">def</span><span class="w"> </span><span class="nf">extract_concepts</span><span class="p">(</span><span class="n">config_data</span><span class="p">:</span> <span class="nb">dict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Tuple</span><span class="p">[</span><span class="nb">dict</span><span class="p">,</span> <span class="n">Set</span><span class="p">[</span><span class="nb">str</span><span class="p">]]:</span>
-</span><span id="L-1153"><a href="#L-1153"><span class="linenos">1153</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Extracts concepts as {name: file_path} dictionary and a name set.&quot;&quot;&quot;</span>
-</span><span id="L-1154"><a href="#L-1154"><span class="linenos">1154</span></a>    <span class="n">concepts_dict</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-1155"><a href="#L-1155"><span class="linenos">1155</span></a>        <span class="n">item</span><span class="p">[</span><span class="s2">&quot;name&quot;</span><span class="p">]:</span> <span class="n">item</span><span class="p">[</span><span class="s2">&quot;file&quot;</span><span class="p">][</span><span class="s2">&quot;path&quot;</span><span class="p">]</span>
-</span><span id="L-1156"><a href="#L-1156"><span class="linenos">1156</span></a>        <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">config_data</span><span class="p">[</span><span class="s2">&quot;phenotype&quot;</span><span class="p">][</span><span class="s2">&quot;concept_sets&quot;</span><span class="p">]</span>
-</span><span id="L-1157"><a href="#L-1157"><span class="linenos">1157</span></a>    <span class="p">}</span>
-</span><span id="L-1158"><a href="#L-1158"><span class="linenos">1158</span></a>    <span class="n">name_set</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">concepts_dict</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span>
-</span><span id="L-1159"><a href="#L-1159"><span class="linenos">1159</span></a>    <span class="k">return</span> <span class="n">concepts_dict</span><span class="p">,</span> <span class="n">name_set</span>
-</span><span id="L-1160"><a href="#L-1160"><span class="linenos">1160</span></a>
+</span><span id="L-1148"><a href="#L-1148"><span class="linenos">1148</span></a>    <span class="c1"># Check out the latest commit or specified version</span>
+</span><span id="L-1149"><a href="#L-1149"><span class="linenos">1149</span></a>    <span class="k">if</span> <span class="n">version</span><span class="p">:</span>
+</span><span id="L-1150"><a href="#L-1150"><span class="linenos">1150</span></a>        <span class="c1"># Checkout a specific version (e.g., branch, tag, or commit hash)</span>
+</span><span id="L-1151"><a href="#L-1151"><span class="linenos">1151</span></a>        <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Checking out version </span><span class="si">{</span><span class="n">version</span><span class="si">}</span><span class="s2">...&quot;</span><span class="p">)</span>
+</span><span id="L-1152"><a href="#L-1152"><span class="linenos">1152</span></a>        <span class="n">repo</span><span class="o">.</span><span class="n">git</span><span class="o">.</span><span class="n">checkout</span><span class="p">(</span><span class="n">version</span><span class="p">)</span>
+</span><span id="L-1153"><a href="#L-1153"><span class="linenos">1153</span></a>    <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1154"><a href="#L-1154"><span class="linenos">1154</span></a>        <span class="c1"># Checkout the latest commit (HEAD)</span>
+</span><span id="L-1155"><a href="#L-1155"><span class="linenos">1155</span></a>        <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Checking out the latest commit...&quot;</span><span class="p">)</span>
+</span><span id="L-1156"><a href="#L-1156"><span class="linenos">1156</span></a>        <span class="n">repo</span><span class="o">.</span><span class="n">git</span><span class="o">.</span><span class="n">checkout</span><span class="p">(</span><span class="s2">&quot;HEAD&quot;</span><span class="p">)</span>
+</span><span id="L-1157"><a href="#L-1157"><span class="linenos">1157</span></a>
+</span><span id="L-1158"><a href="#L-1158"><span class="linenos">1158</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Copied </span><span class="si">{</span><span class="n">phen_path</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">repo</span><span class="o">.</span><span class="n">head</span><span class="o">.</span><span class="n">commit</span><span class="o">.</span><span class="n">hexsha</span><span class="p">[:</span><span class="mi">7</span><span class="p">]</span><span class="si">}</span><span class="s2"> in </span><span class="si">{</span><span class="n">copy_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-1159"><a href="#L-1159"><span class="linenos">1159</span></a>
+</span><span id="L-1160"><a href="#L-1160"><span class="linenos">1160</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Phenotype copied successfully&quot;</span><span class="p">)</span>
 </span><span id="L-1161"><a href="#L-1161"><span class="linenos">1161</span></a>
-</span><span id="L-1162"><a href="#L-1162"><span class="linenos">1162</span></a><span class="k">def</span><span class="w"> </span><span class="nf">extract_clean_deepdiff_keys</span><span class="p">(</span><span class="n">diff</span><span class="p">:</span> <span class="nb">dict</span><span class="p">,</span> <span class="n">key_type</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Set</span><span class="p">[</span><span class="n">Any</span><span class="p">]:</span>
-</span><span id="L-1163"><a href="#L-1163"><span class="linenos">1163</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-1164"><a href="#L-1164"><span class="linenos">1164</span></a><span class="sd">    Extracts clean keys from a DeepDiff dictionary.</span>
-</span><span id="L-1165"><a href="#L-1165"><span class="linenos">1165</span></a>
-</span><span id="L-1166"><a href="#L-1166"><span class="linenos">1166</span></a><span class="sd">    :param diff: DeepDiff result dictionary</span>
-</span><span id="L-1167"><a href="#L-1167"><span class="linenos">1167</span></a><span class="sd">    :param key_type: The type of change to extract (e.g., &quot;dictionary_item_added&quot;, &quot;dictionary_item_removed&quot;)</span>
-</span><span id="L-1168"><a href="#L-1168"><span class="linenos">1168</span></a><span class="sd">    :return: A set of clean key names</span>
-</span><span id="L-1169"><a href="#L-1169"><span class="linenos">1169</span></a><span class="sd">    &quot;&quot;&quot;</span>
-</span><span id="L-1170"><a href="#L-1170"><span class="linenos">1170</span></a>    <span class="k">return</span> <span class="p">{</span><span class="n">key</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;root[&#39;&quot;</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;&#39;]&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">diff</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">key_type</span><span class="p">,</span> <span class="p">[])}</span>
-</span><span id="L-1171"><a href="#L-1171"><span class="linenos">1171</span></a>
+</span><span id="L-1162"><a href="#L-1162"><span class="linenos">1162</span></a>
+</span><span id="L-1163"><a href="#L-1163"><span class="linenos">1163</span></a><span class="c1"># Convert concept_sets list into dictionaries</span>
+</span><span id="L-1164"><a href="#L-1164"><span class="linenos">1164</span></a><span class="k">def</span><span class="w"> </span><span class="nf">extract_concepts</span><span class="p">(</span><span class="n">config_data</span><span class="p">:</span> <span class="nb">dict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Tuple</span><span class="p">[</span><span class="nb">dict</span><span class="p">,</span> <span class="n">Set</span><span class="p">[</span><span class="nb">str</span><span class="p">]]:</span>
+</span><span id="L-1165"><a href="#L-1165"><span class="linenos">1165</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Extracts concepts as {name: file_path} dictionary and a name set.&quot;&quot;&quot;</span>
+</span><span id="L-1166"><a href="#L-1166"><span class="linenos">1166</span></a>    <span class="n">concepts_dict</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="L-1167"><a href="#L-1167"><span class="linenos">1167</span></a>        <span class="n">item</span><span class="p">[</span><span class="s2">&quot;name&quot;</span><span class="p">]:</span> <span class="n">item</span><span class="p">[</span><span class="s2">&quot;file&quot;</span><span class="p">][</span><span class="s2">&quot;path&quot;</span><span class="p">]</span>
+</span><span id="L-1168"><a href="#L-1168"><span class="linenos">1168</span></a>        <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">config_data</span><span class="p">[</span><span class="s2">&quot;phenotype&quot;</span><span class="p">][</span><span class="s2">&quot;concept_sets&quot;</span><span class="p">]</span>
+</span><span id="L-1169"><a href="#L-1169"><span class="linenos">1169</span></a>    <span class="p">}</span>
+</span><span id="L-1170"><a href="#L-1170"><span class="linenos">1170</span></a>    <span class="n">name_set</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">concepts_dict</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span>
+</span><span id="L-1171"><a href="#L-1171"><span class="linenos">1171</span></a>    <span class="k">return</span> <span class="n">concepts_dict</span><span class="p">,</span> <span class="n">name_set</span>
 </span><span id="L-1172"><a href="#L-1172"><span class="linenos">1172</span></a>
-</span><span id="L-1173"><a href="#L-1173"><span class="linenos">1173</span></a><span class="k">def</span><span class="w"> </span><span class="nf">diff_config</span><span class="p">(</span><span class="n">old_config</span><span class="p">:</span> <span class="nb">dict</span><span class="p">,</span> <span class="n">new_config</span><span class="p">:</span> <span class="nb">dict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1174"><a href="#L-1174"><span class="linenos">1174</span></a>    <span class="n">report</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2"># Changes to phenotype configuration</span><span class="se">\n</span><span class="s2">&quot;</span>
-</span><span id="L-1175"><a href="#L-1175"><span class="linenos">1175</span></a>    <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;This compares changes in the phenotype configuration including added, removed and renamed concept sets and changes to concept set source concept code file paths</span><span class="se">\n\n</span><span class="s2">&quot;</span>
-</span><span id="L-1176"><a href="#L-1176"><span class="linenos">1176</span></a>
-</span><span id="L-1177"><a href="#L-1177"><span class="linenos">1177</span></a>    <span class="n">old_concepts</span><span class="p">,</span> <span class="n">old_names</span> <span class="o">=</span> <span class="n">extract_concepts</span><span class="p">(</span><span class="n">old_config</span><span class="p">)</span>
-</span><span id="L-1178"><a href="#L-1178"><span class="linenos">1178</span></a>    <span class="n">new_concepts</span><span class="p">,</span> <span class="n">new_names</span> <span class="o">=</span> <span class="n">extract_concepts</span><span class="p">(</span><span class="n">new_config</span><span class="p">)</span>
-</span><span id="L-1179"><a href="#L-1179"><span class="linenos">1179</span></a>
-</span><span id="L-1180"><a href="#L-1180"><span class="linenos">1180</span></a>    <span class="c1"># Check added and removed names</span>
-</span><span id="L-1181"><a href="#L-1181"><span class="linenos">1181</span></a>    <span class="n">added_names</span> <span class="o">=</span> <span class="n">new_names</span> <span class="o">-</span> <span class="n">old_names</span>  <span class="c1"># Names that appear in new but not in old</span>
-</span><span id="L-1182"><a href="#L-1182"><span class="linenos">1182</span></a>    <span class="n">removed_names</span> <span class="o">=</span> <span class="n">old_names</span> <span class="o">-</span> <span class="n">new_names</span>  <span class="c1"># Names that were in old but not in new</span>
+</span><span id="L-1173"><a href="#L-1173"><span class="linenos">1173</span></a>
+</span><span id="L-1174"><a href="#L-1174"><span class="linenos">1174</span></a><span class="k">def</span><span class="w"> </span><span class="nf">_extract_clean_deepdiff_keys</span><span class="p">(</span><span class="n">diff</span><span class="p">:</span> <span class="nb">dict</span><span class="p">,</span> <span class="n">key_type</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Set</span><span class="p">[</span><span class="n">Any</span><span class="p">]:</span>
+</span><span id="L-1175"><a href="#L-1175"><span class="linenos">1175</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-1176"><a href="#L-1176"><span class="linenos">1176</span></a><span class="sd">    Extracts clean keys from a DeepDiff dictionary.</span>
+</span><span id="L-1177"><a href="#L-1177"><span class="linenos">1177</span></a>
+</span><span id="L-1178"><a href="#L-1178"><span class="linenos">1178</span></a><span class="sd">    :param diff: DeepDiff result dictionary</span>
+</span><span id="L-1179"><a href="#L-1179"><span class="linenos">1179</span></a><span class="sd">    :param key_type: The type of change to extract (e.g., &quot;dictionary_item_added&quot;, &quot;dictionary_item_removed&quot;)</span>
+</span><span id="L-1180"><a href="#L-1180"><span class="linenos">1180</span></a><span class="sd">    :return: A set of clean key names</span>
+</span><span id="L-1181"><a href="#L-1181"><span class="linenos">1181</span></a><span class="sd">    &quot;&quot;&quot;</span>
+</span><span id="L-1182"><a href="#L-1182"><span class="linenos">1182</span></a>    <span class="k">return</span> <span class="p">{</span><span class="n">key</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;root[&#39;&quot;</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;&#39;]&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">diff</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">key_type</span><span class="p">,</span> <span class="p">[])}</span>
 </span><span id="L-1183"><a href="#L-1183"><span class="linenos">1183</span></a>
-</span><span id="L-1184"><a href="#L-1184"><span class="linenos">1184</span></a>    <span class="c1"># find file path changes for unchanged names</span>
-</span><span id="L-1185"><a href="#L-1185"><span class="linenos">1185</span></a>    <span class="n">unchanged_names</span> <span class="o">=</span> <span class="n">old_names</span> <span class="o">&amp;</span> <span class="n">new_names</span>  <span class="c1"># Names that exist in both</span>
-</span><span id="L-1186"><a href="#L-1186"><span class="linenos">1186</span></a>    <span class="n">file_diff</span> <span class="o">=</span> <span class="n">DeepDiff</span><span class="p">(</span>
-</span><span id="L-1187"><a href="#L-1187"><span class="linenos">1187</span></a>        <span class="p">{</span><span class="n">name</span><span class="p">:</span> <span class="n">old_concepts</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">unchanged_names</span><span class="p">},</span>
-</span><span id="L-1188"><a href="#L-1188"><span class="linenos">1188</span></a>        <span class="p">{</span><span class="n">name</span><span class="p">:</span> <span class="n">new_concepts</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">unchanged_names</span><span class="p">},</span>
-</span><span id="L-1189"><a href="#L-1189"><span class="linenos">1189</span></a>    <span class="p">)</span>
-</span><span id="L-1190"><a href="#L-1190"><span class="linenos">1190</span></a>
-</span><span id="L-1191"><a href="#L-1191"><span class="linenos">1191</span></a>    <span class="c1"># Find renamed concepts (same file, different name)</span>
-</span><span id="L-1192"><a href="#L-1192"><span class="linenos">1192</span></a>    <span class="n">renamed_concepts</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-1193"><a href="#L-1193"><span class="linenos">1193</span></a>    <span class="k">for</span> <span class="n">removed</span> <span class="ow">in</span> <span class="n">removed_names</span><span class="p">:</span>
-</span><span id="L-1194"><a href="#L-1194"><span class="linenos">1194</span></a>        <span class="n">old_path</span> <span class="o">=</span> <span class="n">old_concepts</span><span class="p">[</span><span class="n">removed</span><span class="p">]</span>
-</span><span id="L-1195"><a href="#L-1195"><span class="linenos">1195</span></a>        <span class="k">for</span> <span class="n">added</span> <span class="ow">in</span> <span class="n">added_names</span><span class="p">:</span>
-</span><span id="L-1196"><a href="#L-1196"><span class="linenos">1196</span></a>            <span class="n">new_path</span> <span class="o">=</span> <span class="n">new_concepts</span><span class="p">[</span><span class="n">added</span><span class="p">]</span>
-</span><span id="L-1197"><a href="#L-1197"><span class="linenos">1197</span></a>            <span class="k">if</span> <span class="n">old_path</span> <span class="o">==</span> <span class="n">new_path</span><span class="p">:</span>
-</span><span id="L-1198"><a href="#L-1198"><span class="linenos">1198</span></a>                <span class="n">renamed_concepts</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">removed</span><span class="p">,</span> <span class="n">added</span><span class="p">))</span>
-</span><span id="L-1199"><a href="#L-1199"><span class="linenos">1199</span></a>
-</span><span id="L-1200"><a href="#L-1200"><span class="linenos">1200</span></a>    <span class="c1"># Remove renamed concepts from added and removed sets</span>
-</span><span id="L-1201"><a href="#L-1201"><span class="linenos">1201</span></a>    <span class="k">for</span> <span class="n">old_name</span><span class="p">,</span> <span class="n">new_name</span> <span class="ow">in</span> <span class="n">renamed_concepts</span><span class="p">:</span>
-</span><span id="L-1202"><a href="#L-1202"><span class="linenos">1202</span></a>        <span class="n">added_names</span><span class="o">.</span><span class="n">discard</span><span class="p">(</span><span class="n">new_name</span><span class="p">)</span>
-</span><span id="L-1203"><a href="#L-1203"><span class="linenos">1203</span></a>        <span class="n">removed_names</span><span class="o">.</span><span class="n">discard</span><span class="p">(</span><span class="n">old_name</span><span class="p">)</span>
-</span><span id="L-1204"><a href="#L-1204"><span class="linenos">1204</span></a>
-</span><span id="L-1205"><a href="#L-1205"><span class="linenos">1205</span></a>    <span class="c1"># generate config report</span>
-</span><span id="L-1206"><a href="#L-1206"><span class="linenos">1206</span></a>    <span class="k">if</span> <span class="n">added_names</span><span class="p">:</span>
-</span><span id="L-1207"><a href="#L-1207"><span class="linenos">1207</span></a>        <span class="n">report</span> <span class="o">+=</span> <span class="s2">&quot;## Added Concepts</span><span class="se">\n</span><span class="s2">&quot;</span>
-</span><span id="L-1208"><a href="#L-1208"><span class="linenos">1208</span></a>        <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">added_names</span><span class="p">:</span>
-</span><span id="L-1209"><a href="#L-1209"><span class="linenos">1209</span></a>            <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;- `</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">` (File: `</span><span class="si">{</span><span class="n">new_concepts</span><span class="p">[</span><span class="n">name</span><span class="p">]</span><span class="si">}</span><span class="s2">`)</span><span class="se">\n</span><span class="s2">&quot;</span>
-</span><span id="L-1210"><a href="#L-1210"><span class="linenos">1210</span></a>        <span class="n">report</span> <span class="o">+=</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span>
+</span><span id="L-1184"><a href="#L-1184"><span class="linenos">1184</span></a>
+</span><span id="L-1185"><a href="#L-1185"><span class="linenos">1185</span></a><span class="k">def</span><span class="w"> </span><span class="nf">diff_config</span><span class="p">(</span><span class="n">old_config</span><span class="p">:</span> <span class="nb">dict</span><span class="p">,</span> <span class="n">new_config</span><span class="p">:</span> <span class="nb">dict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1186"><a href="#L-1186"><span class="linenos">1186</span></a>    <span class="n">report</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2"># Changes to phenotype configuration</span><span class="se">\n</span><span class="s2">&quot;</span>
+</span><span id="L-1187"><a href="#L-1187"><span class="linenos">1187</span></a>    <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;This compares changes in the phenotype configuration including added, removed and renamed concept sets and changes to concept set source concept code file paths</span><span class="se">\n\n</span><span class="s2">&quot;</span>
+</span><span id="L-1188"><a href="#L-1188"><span class="linenos">1188</span></a>
+</span><span id="L-1189"><a href="#L-1189"><span class="linenos">1189</span></a>    <span class="n">old_concepts</span><span class="p">,</span> <span class="n">old_names</span> <span class="o">=</span> <span class="n">extract_concepts</span><span class="p">(</span><span class="n">old_config</span><span class="p">)</span>
+</span><span id="L-1190"><a href="#L-1190"><span class="linenos">1190</span></a>    <span class="n">new_concepts</span><span class="p">,</span> <span class="n">new_names</span> <span class="o">=</span> <span class="n">extract_concepts</span><span class="p">(</span><span class="n">new_config</span><span class="p">)</span>
+</span><span id="L-1191"><a href="#L-1191"><span class="linenos">1191</span></a>
+</span><span id="L-1192"><a href="#L-1192"><span class="linenos">1192</span></a>    <span class="c1"># Check added and removed names</span>
+</span><span id="L-1193"><a href="#L-1193"><span class="linenos">1193</span></a>    <span class="n">added_names</span> <span class="o">=</span> <span class="n">new_names</span> <span class="o">-</span> <span class="n">old_names</span>  <span class="c1"># Names that appear in new but not in old</span>
+</span><span id="L-1194"><a href="#L-1194"><span class="linenos">1194</span></a>    <span class="n">removed_names</span> <span class="o">=</span> <span class="n">old_names</span> <span class="o">-</span> <span class="n">new_names</span>  <span class="c1"># Names that were in old but not in new</span>
+</span><span id="L-1195"><a href="#L-1195"><span class="linenos">1195</span></a>
+</span><span id="L-1196"><a href="#L-1196"><span class="linenos">1196</span></a>    <span class="c1"># find file path changes for unchanged names</span>
+</span><span id="L-1197"><a href="#L-1197"><span class="linenos">1197</span></a>    <span class="n">unchanged_names</span> <span class="o">=</span> <span class="n">old_names</span> <span class="o">&amp;</span> <span class="n">new_names</span>  <span class="c1"># Names that exist in both</span>
+</span><span id="L-1198"><a href="#L-1198"><span class="linenos">1198</span></a>    <span class="n">file_diff</span> <span class="o">=</span> <span class="n">DeepDiff</span><span class="p">(</span>
+</span><span id="L-1199"><a href="#L-1199"><span class="linenos">1199</span></a>        <span class="p">{</span><span class="n">name</span><span class="p">:</span> <span class="n">old_concepts</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">unchanged_names</span><span class="p">},</span>
+</span><span id="L-1200"><a href="#L-1200"><span class="linenos">1200</span></a>        <span class="p">{</span><span class="n">name</span><span class="p">:</span> <span class="n">new_concepts</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">unchanged_names</span><span class="p">},</span>
+</span><span id="L-1201"><a href="#L-1201"><span class="linenos">1201</span></a>    <span class="p">)</span>
+</span><span id="L-1202"><a href="#L-1202"><span class="linenos">1202</span></a>
+</span><span id="L-1203"><a href="#L-1203"><span class="linenos">1203</span></a>    <span class="c1"># Find renamed concepts (same file, different name)</span>
+</span><span id="L-1204"><a href="#L-1204"><span class="linenos">1204</span></a>    <span class="n">renamed_concepts</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="L-1205"><a href="#L-1205"><span class="linenos">1205</span></a>    <span class="k">for</span> <span class="n">removed</span> <span class="ow">in</span> <span class="n">removed_names</span><span class="p">:</span>
+</span><span id="L-1206"><a href="#L-1206"><span class="linenos">1206</span></a>        <span class="n">old_path</span> <span class="o">=</span> <span class="n">old_concepts</span><span class="p">[</span><span class="n">removed</span><span class="p">]</span>
+</span><span id="L-1207"><a href="#L-1207"><span class="linenos">1207</span></a>        <span class="k">for</span> <span class="n">added</span> <span class="ow">in</span> <span class="n">added_names</span><span class="p">:</span>
+</span><span id="L-1208"><a href="#L-1208"><span class="linenos">1208</span></a>            <span class="n">new_path</span> <span class="o">=</span> <span class="n">new_concepts</span><span class="p">[</span><span class="n">added</span><span class="p">]</span>
+</span><span id="L-1209"><a href="#L-1209"><span class="linenos">1209</span></a>            <span class="k">if</span> <span class="n">old_path</span> <span class="o">==</span> <span class="n">new_path</span><span class="p">:</span>
+</span><span id="L-1210"><a href="#L-1210"><span class="linenos">1210</span></a>                <span class="n">renamed_concepts</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">removed</span><span class="p">,</span> <span class="n">added</span><span class="p">))</span>
 </span><span id="L-1211"><a href="#L-1211"><span class="linenos">1211</span></a>
-</span><span id="L-1212"><a href="#L-1212"><span class="linenos">1212</span></a>    <span class="k">if</span> <span class="n">removed_names</span><span class="p">:</span>
-</span><span id="L-1213"><a href="#L-1213"><span class="linenos">1213</span></a>        <span class="n">report</span> <span class="o">+=</span> <span class="s2">&quot;## Removed Concepts</span><span class="se">\n</span><span class="s2">&quot;</span>
-</span><span id="L-1214"><a href="#L-1214"><span class="linenos">1214</span></a>        <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">removed_names</span><span class="p">:</span>
-</span><span id="L-1215"><a href="#L-1215"><span class="linenos">1215</span></a>            <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;- `</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">` (File: `</span><span class="si">{</span><span class="n">old_concepts</span><span class="p">[</span><span class="n">name</span><span class="p">]</span><span class="si">}</span><span class="s2">`)</span><span class="se">\n</span><span class="s2">&quot;</span>
-</span><span id="L-1216"><a href="#L-1216"><span class="linenos">1216</span></a>        <span class="n">report</span> <span class="o">+=</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span>
-</span><span id="L-1217"><a href="#L-1217"><span class="linenos">1217</span></a>
-</span><span id="L-1218"><a href="#L-1218"><span class="linenos">1218</span></a>    <span class="k">if</span> <span class="n">renamed_concepts</span><span class="p">:</span>
-</span><span id="L-1219"><a href="#L-1219"><span class="linenos">1219</span></a>        <span class="n">report</span> <span class="o">+=</span> <span class="s2">&quot;## Renamed Concepts</span><span class="se">\n</span><span class="s2">&quot;</span>
-</span><span id="L-1220"><a href="#L-1220"><span class="linenos">1220</span></a>        <span class="k">for</span> <span class="n">old_name</span><span class="p">,</span> <span class="n">new_name</span> <span class="ow">in</span> <span class="n">renamed_concepts</span><span class="p">:</span>
-</span><span id="L-1221"><a href="#L-1221"><span class="linenos">1221</span></a>            <span class="n">report</span> <span class="o">+=</span> <span class="p">(</span>
-</span><span id="L-1222"><a href="#L-1222"><span class="linenos">1222</span></a>                <span class="sa">f</span><span class="s2">&quot;- `</span><span class="si">{</span><span class="n">old_name</span><span class="si">}</span><span class="s2">` ➝ `</span><span class="si">{</span><span class="n">new_name</span><span class="si">}</span><span class="s2">` (File: `</span><span class="si">{</span><span class="n">old_concepts</span><span class="p">[</span><span class="n">old_name</span><span class="p">]</span><span class="si">}</span><span class="s2">`)</span><span class="se">\n</span><span class="s2">&quot;</span>
-</span><span id="L-1223"><a href="#L-1223"><span class="linenos">1223</span></a>            <span class="p">)</span>
-</span><span id="L-1224"><a href="#L-1224"><span class="linenos">1224</span></a>        <span class="n">report</span> <span class="o">+=</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span>
-</span><span id="L-1225"><a href="#L-1225"><span class="linenos">1225</span></a>
-</span><span id="L-1226"><a href="#L-1226"><span class="linenos">1226</span></a>    <span class="k">if</span> <span class="s2">&quot;values_changed&quot;</span> <span class="ow">in</span> <span class="n">file_diff</span><span class="p">:</span>
-</span><span id="L-1227"><a href="#L-1227"><span class="linenos">1227</span></a>        <span class="n">report</span> <span class="o">+=</span> <span class="s2">&quot;## Updated File Paths</span><span class="se">\n</span><span class="s2">&quot;</span>
-</span><span id="L-1228"><a href="#L-1228"><span class="linenos">1228</span></a>        <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">change</span> <span class="ow">in</span> <span class="n">file_diff</span><span class="p">[</span><span class="s2">&quot;values_changed&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
-</span><span id="L-1229"><a href="#L-1229"><span class="linenos">1229</span></a>            <span class="n">old_file</span> <span class="o">=</span> <span class="n">change</span><span class="p">[</span><span class="s2">&quot;old_value&quot;</span><span class="p">]</span>
-</span><span id="L-1230"><a href="#L-1230"><span class="linenos">1230</span></a>            <span class="n">new_file</span> <span class="o">=</span> <span class="n">change</span><span class="p">[</span><span class="s2">&quot;new_value&quot;</span><span class="p">]</span>
-</span><span id="L-1231"><a href="#L-1231"><span class="linenos">1231</span></a>            <span class="n">clean_name</span> <span class="o">=</span> <span class="n">name</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;root[&#39;&quot;</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;&#39;]&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
-</span><span id="L-1232"><a href="#L-1232"><span class="linenos">1232</span></a>            <span class="n">report</span> <span class="o">+=</span> <span class="p">(</span>
-</span><span id="L-1233"><a href="#L-1233"><span class="linenos">1233</span></a>                <span class="sa">f</span><span class="s2">&quot;- `</span><span class="si">{</span><span class="n">clean_name</span><span class="si">}</span><span class="s2">` changed file from `</span><span class="si">{</span><span class="n">old_file</span><span class="si">}</span><span class="s2">` ➝ `</span><span class="si">{</span><span class="n">new_file</span><span class="si">}</span><span class="s2">`</span><span class="se">\n</span><span class="s2">&quot;</span>
-</span><span id="L-1234"><a href="#L-1234"><span class="linenos">1234</span></a>            <span class="p">)</span>
-</span><span id="L-1235"><a href="#L-1235"><span class="linenos">1235</span></a>        <span class="n">report</span> <span class="o">+=</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span>
-</span><span id="L-1236"><a href="#L-1236"><span class="linenos">1236</span></a>
-</span><span id="L-1237"><a href="#L-1237"><span class="linenos">1237</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span>
-</span><span id="L-1238"><a href="#L-1238"><span class="linenos">1238</span></a>        <span class="n">added_names</span>
-</span><span id="L-1239"><a href="#L-1239"><span class="linenos">1239</span></a>        <span class="ow">or</span> <span class="n">removed_names</span>
-</span><span id="L-1240"><a href="#L-1240"><span class="linenos">1240</span></a>        <span class="ow">or</span> <span class="n">renamed_concepts</span>
-</span><span id="L-1241"><a href="#L-1241"><span class="linenos">1241</span></a>        <span class="ow">or</span> <span class="n">file_diff</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;values_changed&quot;</span><span class="p">)</span>
-</span><span id="L-1242"><a href="#L-1242"><span class="linenos">1242</span></a>    <span class="p">):</span>
-</span><span id="L-1243"><a href="#L-1243"><span class="linenos">1243</span></a>        <span class="n">report</span> <span class="o">+=</span> <span class="s2">&quot;No changes in concept sets.</span><span class="se">\n</span><span class="s2">&quot;</span>
-</span><span id="L-1244"><a href="#L-1244"><span class="linenos">1244</span></a>
-</span><span id="L-1245"><a href="#L-1245"><span class="linenos">1245</span></a>    <span class="k">return</span> <span class="n">report</span>
-</span><span id="L-1246"><a href="#L-1246"><span class="linenos">1246</span></a>
-</span><span id="L-1247"><a href="#L-1247"><span class="linenos">1247</span></a>
-</span><span id="L-1248"><a href="#L-1248"><span class="linenos">1248</span></a><span class="k">def</span><span class="w"> </span><span class="nf">diff_map_files</span><span class="p">(</span><span class="n">old_map_path</span><span class="p">:</span> <span class="n">Path</span><span class="p">,</span> <span class="n">new_map_path</span><span class="p">:</span> <span class="n">Path</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-1249"><a href="#L-1249"><span class="linenos">1249</span></a>    <span class="n">old_output_files</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="L-1250"><a href="#L-1250"><span class="linenos">1250</span></a>        <span class="n">file</span><span class="o">.</span><span class="n">name</span>
-</span><span id="L-1251"><a href="#L-1251"><span class="linenos">1251</span></a>        <span class="k">for</span> <span class="n">file</span> <span class="ow">in</span> <span class="n">old_map_path</span><span class="o">.</span><span class="n">iterdir</span><span class="p">()</span>
-</span><span id="L-1252"><a href="#L-1252"><span class="linenos">1252</span></a>        <span class="k">if</span> <span class="n">file</span><span class="o">.</span><span class="n">is_file</span><span class="p">()</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">file</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;.&quot;</span><span class="p">)</span>
-</span><span id="L-1253"><a href="#L-1253"><span class="linenos">1253</span></a>    <span class="p">]</span>
-</span><span id="L-1254"><a href="#L-1254"><span class="linenos">1254</span></a>    <span class="n">new_output_files</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="L-1255"><a href="#L-1255"><span class="linenos">1255</span></a>        <span class="n">file</span><span class="o">.</span><span class="n">name</span>
-</span><span id="L-1256"><a href="#L-1256"><span class="linenos">1256</span></a>        <span class="k">for</span> <span class="n">file</span> <span class="ow">in</span> <span class="n">new_map_path</span><span class="o">.</span><span class="n">iterdir</span><span class="p">()</span>
-</span><span id="L-1257"><a href="#L-1257"><span class="linenos">1257</span></a>        <span class="k">if</span> <span class="n">file</span><span class="o">.</span><span class="n">is_file</span><span class="p">()</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">file</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;.&quot;</span><span class="p">)</span>
-</span><span id="L-1258"><a href="#L-1258"><span class="linenos">1258</span></a>    <span class="p">]</span>
+</span><span id="L-1212"><a href="#L-1212"><span class="linenos">1212</span></a>    <span class="c1"># Remove renamed concepts from added and removed sets</span>
+</span><span id="L-1213"><a href="#L-1213"><span class="linenos">1213</span></a>    <span class="k">for</span> <span class="n">old_name</span><span class="p">,</span> <span class="n">new_name</span> <span class="ow">in</span> <span class="n">renamed_concepts</span><span class="p">:</span>
+</span><span id="L-1214"><a href="#L-1214"><span class="linenos">1214</span></a>        <span class="n">added_names</span><span class="o">.</span><span class="n">discard</span><span class="p">(</span><span class="n">new_name</span><span class="p">)</span>
+</span><span id="L-1215"><a href="#L-1215"><span class="linenos">1215</span></a>        <span class="n">removed_names</span><span class="o">.</span><span class="n">discard</span><span class="p">(</span><span class="n">old_name</span><span class="p">)</span>
+</span><span id="L-1216"><a href="#L-1216"><span class="linenos">1216</span></a>
+</span><span id="L-1217"><a href="#L-1217"><span class="linenos">1217</span></a>    <span class="c1"># generate config report</span>
+</span><span id="L-1218"><a href="#L-1218"><span class="linenos">1218</span></a>    <span class="k">if</span> <span class="n">added_names</span><span class="p">:</span>
+</span><span id="L-1219"><a href="#L-1219"><span class="linenos">1219</span></a>        <span class="n">report</span> <span class="o">+=</span> <span class="s2">&quot;## Added Concepts</span><span class="se">\n</span><span class="s2">&quot;</span>
+</span><span id="L-1220"><a href="#L-1220"><span class="linenos">1220</span></a>        <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">added_names</span><span class="p">:</span>
+</span><span id="L-1221"><a href="#L-1221"><span class="linenos">1221</span></a>            <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;- `</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">` (File: `</span><span class="si">{</span><span class="n">new_concepts</span><span class="p">[</span><span class="n">name</span><span class="p">]</span><span class="si">}</span><span class="s2">`)</span><span class="se">\n</span><span class="s2">&quot;</span>
+</span><span id="L-1222"><a href="#L-1222"><span class="linenos">1222</span></a>        <span class="n">report</span> <span class="o">+=</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span>
+</span><span id="L-1223"><a href="#L-1223"><span class="linenos">1223</span></a>
+</span><span id="L-1224"><a href="#L-1224"><span class="linenos">1224</span></a>    <span class="k">if</span> <span class="n">removed_names</span><span class="p">:</span>
+</span><span id="L-1225"><a href="#L-1225"><span class="linenos">1225</span></a>        <span class="n">report</span> <span class="o">+=</span> <span class="s2">&quot;## Removed Concepts</span><span class="se">\n</span><span class="s2">&quot;</span>
+</span><span id="L-1226"><a href="#L-1226"><span class="linenos">1226</span></a>        <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">removed_names</span><span class="p">:</span>
+</span><span id="L-1227"><a href="#L-1227"><span class="linenos">1227</span></a>            <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;- `</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">` (File: `</span><span class="si">{</span><span class="n">old_concepts</span><span class="p">[</span><span class="n">name</span><span class="p">]</span><span class="si">}</span><span class="s2">`)</span><span class="se">\n</span><span class="s2">&quot;</span>
+</span><span id="L-1228"><a href="#L-1228"><span class="linenos">1228</span></a>        <span class="n">report</span> <span class="o">+=</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span>
+</span><span id="L-1229"><a href="#L-1229"><span class="linenos">1229</span></a>
+</span><span id="L-1230"><a href="#L-1230"><span class="linenos">1230</span></a>    <span class="k">if</span> <span class="n">renamed_concepts</span><span class="p">:</span>
+</span><span id="L-1231"><a href="#L-1231"><span class="linenos">1231</span></a>        <span class="n">report</span> <span class="o">+=</span> <span class="s2">&quot;## Renamed Concepts</span><span class="se">\n</span><span class="s2">&quot;</span>
+</span><span id="L-1232"><a href="#L-1232"><span class="linenos">1232</span></a>        <span class="k">for</span> <span class="n">old_name</span><span class="p">,</span> <span class="n">new_name</span> <span class="ow">in</span> <span class="n">renamed_concepts</span><span class="p">:</span>
+</span><span id="L-1233"><a href="#L-1233"><span class="linenos">1233</span></a>            <span class="n">report</span> <span class="o">+=</span> <span class="p">(</span>
+</span><span id="L-1234"><a href="#L-1234"><span class="linenos">1234</span></a>                <span class="sa">f</span><span class="s2">&quot;- `</span><span class="si">{</span><span class="n">old_name</span><span class="si">}</span><span class="s2">` ➝ `</span><span class="si">{</span><span class="n">new_name</span><span class="si">}</span><span class="s2">` (File: `</span><span class="si">{</span><span class="n">old_concepts</span><span class="p">[</span><span class="n">old_name</span><span class="p">]</span><span class="si">}</span><span class="s2">`)</span><span class="se">\n</span><span class="s2">&quot;</span>
+</span><span id="L-1235"><a href="#L-1235"><span class="linenos">1235</span></a>            <span class="p">)</span>
+</span><span id="L-1236"><a href="#L-1236"><span class="linenos">1236</span></a>        <span class="n">report</span> <span class="o">+=</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span>
+</span><span id="L-1237"><a href="#L-1237"><span class="linenos">1237</span></a>
+</span><span id="L-1238"><a href="#L-1238"><span class="linenos">1238</span></a>    <span class="k">if</span> <span class="s2">&quot;values_changed&quot;</span> <span class="ow">in</span> <span class="n">file_diff</span><span class="p">:</span>
+</span><span id="L-1239"><a href="#L-1239"><span class="linenos">1239</span></a>        <span class="n">report</span> <span class="o">+=</span> <span class="s2">&quot;## Updated File Paths</span><span class="se">\n</span><span class="s2">&quot;</span>
+</span><span id="L-1240"><a href="#L-1240"><span class="linenos">1240</span></a>        <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">change</span> <span class="ow">in</span> <span class="n">file_diff</span><span class="p">[</span><span class="s2">&quot;values_changed&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
+</span><span id="L-1241"><a href="#L-1241"><span class="linenos">1241</span></a>            <span class="n">old_file</span> <span class="o">=</span> <span class="n">change</span><span class="p">[</span><span class="s2">&quot;old_value&quot;</span><span class="p">]</span>
+</span><span id="L-1242"><a href="#L-1242"><span class="linenos">1242</span></a>            <span class="n">new_file</span> <span class="o">=</span> <span class="n">change</span><span class="p">[</span><span class="s2">&quot;new_value&quot;</span><span class="p">]</span>
+</span><span id="L-1243"><a href="#L-1243"><span class="linenos">1243</span></a>            <span class="n">clean_name</span> <span class="o">=</span> <span class="n">name</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;root[&#39;&quot;</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;&#39;]&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
+</span><span id="L-1244"><a href="#L-1244"><span class="linenos">1244</span></a>            <span class="n">report</span> <span class="o">+=</span> <span class="p">(</span>
+</span><span id="L-1245"><a href="#L-1245"><span class="linenos">1245</span></a>                <span class="sa">f</span><span class="s2">&quot;- `</span><span class="si">{</span><span class="n">clean_name</span><span class="si">}</span><span class="s2">` changed file from `</span><span class="si">{</span><span class="n">old_file</span><span class="si">}</span><span class="s2">` ➝ `</span><span class="si">{</span><span class="n">new_file</span><span class="si">}</span><span class="s2">`</span><span class="se">\n</span><span class="s2">&quot;</span>
+</span><span id="L-1246"><a href="#L-1246"><span class="linenos">1246</span></a>            <span class="p">)</span>
+</span><span id="L-1247"><a href="#L-1247"><span class="linenos">1247</span></a>        <span class="n">report</span> <span class="o">+=</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span>
+</span><span id="L-1248"><a href="#L-1248"><span class="linenos">1248</span></a>
+</span><span id="L-1249"><a href="#L-1249"><span class="linenos">1249</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span>
+</span><span id="L-1250"><a href="#L-1250"><span class="linenos">1250</span></a>        <span class="n">added_names</span>
+</span><span id="L-1251"><a href="#L-1251"><span class="linenos">1251</span></a>        <span class="ow">or</span> <span class="n">removed_names</span>
+</span><span id="L-1252"><a href="#L-1252"><span class="linenos">1252</span></a>        <span class="ow">or</span> <span class="n">renamed_concepts</span>
+</span><span id="L-1253"><a href="#L-1253"><span class="linenos">1253</span></a>        <span class="ow">or</span> <span class="n">file_diff</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;values_changed&quot;</span><span class="p">)</span>
+</span><span id="L-1254"><a href="#L-1254"><span class="linenos">1254</span></a>    <span class="p">):</span>
+</span><span id="L-1255"><a href="#L-1255"><span class="linenos">1255</span></a>        <span class="n">report</span> <span class="o">+=</span> <span class="s2">&quot;No changes in concept sets.</span><span class="se">\n</span><span class="s2">&quot;</span>
+</span><span id="L-1256"><a href="#L-1256"><span class="linenos">1256</span></a>
+</span><span id="L-1257"><a href="#L-1257"><span class="linenos">1257</span></a>    <span class="k">return</span> <span class="n">report</span>
+</span><span id="L-1258"><a href="#L-1258"><span class="linenos">1258</span></a>
 </span><span id="L-1259"><a href="#L-1259"><span class="linenos">1259</span></a>
-</span><span id="L-1260"><a href="#L-1260"><span class="linenos">1260</span></a>    <span class="c1"># Convert the lists to sets for easy comparison</span>
-</span><span id="L-1261"><a href="#L-1261"><span class="linenos">1261</span></a>    <span class="n">old_output_set</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">old_output_files</span><span class="p">)</span>
-</span><span id="L-1262"><a href="#L-1262"><span class="linenos">1262</span></a>    <span class="n">new_output_set</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">new_output_files</span><span class="p">)</span>
-</span><span id="L-1263"><a href="#L-1263"><span class="linenos">1263</span></a>
-</span><span id="L-1264"><a href="#L-1264"><span class="linenos">1264</span></a>    <span class="c1"># Outputs that are in old_output_set but not in new_output_set (removed files)</span>
-</span><span id="L-1265"><a href="#L-1265"><span class="linenos">1265</span></a>    <span class="n">removed_outputs</span> <span class="o">=</span> <span class="n">old_output_set</span> <span class="o">-</span> <span class="n">new_output_set</span>
-</span><span id="L-1266"><a href="#L-1266"><span class="linenos">1266</span></a>    <span class="c1"># Outputs that are in new_output_set but not in old_output_set (added files)</span>
-</span><span id="L-1267"><a href="#L-1267"><span class="linenos">1267</span></a>    <span class="n">added_outputs</span> <span class="o">=</span> <span class="n">new_output_set</span> <span class="o">-</span> <span class="n">old_output_set</span>
-</span><span id="L-1268"><a href="#L-1268"><span class="linenos">1268</span></a>    <span class="c1"># Outputs that are the intersection of old_output_set and new_output_set</span>
-</span><span id="L-1269"><a href="#L-1269"><span class="linenos">1269</span></a>    <span class="n">common_outputs</span> <span class="o">=</span> <span class="n">old_output_set</span> <span class="o">&amp;</span> <span class="n">new_output_set</span>
-</span><span id="L-1270"><a href="#L-1270"><span class="linenos">1270</span></a>
-</span><span id="L-1271"><a href="#L-1271"><span class="linenos">1271</span></a>    <span class="n">report</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2"># Changes to available translations</span><span class="se">\n</span><span class="s2">&quot;</span>
-</span><span id="L-1272"><a href="#L-1272"><span class="linenos">1272</span></a>    <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;This compares the coding translations files available.</span><span class="se">\n\n</span><span class="s2">&quot;</span>
-</span><span id="L-1273"><a href="#L-1273"><span class="linenos">1273</span></a>    <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;- Removed outputs: </span><span class="si">{</span><span class="nb">sorted</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">removed_outputs</span><span class="p">))</span><span class="si">}</span><span class="se">\n</span><span class="s2">&quot;</span>
-</span><span id="L-1274"><a href="#L-1274"><span class="linenos">1274</span></a>    <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;- Added outputs: </span><span class="si">{</span><span class="nb">sorted</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">added_outputs</span><span class="p">))</span><span class="si">}</span><span class="se">\n</span><span class="s2">&quot;</span>
-</span><span id="L-1275"><a href="#L-1275"><span class="linenos">1275</span></a>    <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;- Common outputs: </span><span class="si">{</span><span class="nb">sorted</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">common_outputs</span><span class="p">))</span><span class="si">}</span><span class="se">\n\n</span><span class="s2">&quot;</span>
-</span><span id="L-1276"><a href="#L-1276"><span class="linenos">1276</span></a>
-</span><span id="L-1277"><a href="#L-1277"><span class="linenos">1277</span></a>    <span class="c1"># Step N: Compare common outputs between versions</span>
-</span><span id="L-1278"><a href="#L-1278"><span class="linenos">1278</span></a>    <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;# Changes to concepts in translation files</span><span class="se">\n\n</span><span class="s2">&quot;</span>
-</span><span id="L-1279"><a href="#L-1279"><span class="linenos">1279</span></a>    <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;This compares the added and removed concepts in each of the coding translation files. Note that this might be different to the config.yaml if the translations have not been run for the current config.</span><span class="se">\n\n</span><span class="s2">&quot;</span>
-</span><span id="L-1280"><a href="#L-1280"><span class="linenos">1280</span></a>    <span class="k">for</span> <span class="n">file</span> <span class="ow">in</span> <span class="n">common_outputs</span><span class="p">:</span>
-</span><span id="L-1281"><a href="#L-1281"><span class="linenos">1281</span></a>        <span class="n">old_output</span> <span class="o">=</span> <span class="n">old_map_path</span> <span class="o">/</span> <span class="n">file</span>
-</span><span id="L-1282"><a href="#L-1282"><span class="linenos">1282</span></a>        <span class="n">new_output</span> <span class="o">=</span> <span class="n">new_map_path</span> <span class="o">/</span> <span class="n">file</span>
-</span><span id="L-1283"><a href="#L-1283"><span class="linenos">1283</span></a>
-</span><span id="L-1284"><a href="#L-1284"><span class="linenos">1284</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Old ouptput: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">old_output</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-1285"><a href="#L-1285"><span class="linenos">1285</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;New ouptput: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">new_output</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-1286"><a href="#L-1286"><span class="linenos">1286</span></a>
-</span><span id="L-1287"><a href="#L-1287"><span class="linenos">1287</span></a>        <span class="n">df1</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_csv</span><span class="p">(</span><span class="n">old_output</span><span class="p">)</span>
-</span><span id="L-1288"><a href="#L-1288"><span class="linenos">1288</span></a>        <span class="n">df1</span> <span class="o">=</span> <span class="n">df1</span><span class="p">[[</span><span class="s2">&quot;CONCEPT&quot;</span><span class="p">,</span> <span class="s2">&quot;CONCEPT_SET&quot;</span><span class="p">]]</span><span class="o">.</span><span class="n">groupby</span><span class="p">(</span><span class="s2">&quot;CONCEPT_SET&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">count</span><span class="p">()</span>
-</span><span id="L-1289"><a href="#L-1289"><span class="linenos">1289</span></a>        <span class="n">df2</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_csv</span><span class="p">(</span><span class="n">new_output</span><span class="p">)</span>
-</span><span id="L-1290"><a href="#L-1290"><span class="linenos">1290</span></a>        <span class="n">df2</span> <span class="o">=</span> <span class="n">df2</span><span class="p">[[</span><span class="s2">&quot;CONCEPT&quot;</span><span class="p">,</span> <span class="s2">&quot;CONCEPT_SET&quot;</span><span class="p">]]</span><span class="o">.</span><span class="n">groupby</span><span class="p">(</span><span class="s2">&quot;CONCEPT_SET&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">count</span><span class="p">()</span>
-</span><span id="L-1291"><a href="#L-1291"><span class="linenos">1291</span></a>
-</span><span id="L-1292"><a href="#L-1292"><span class="linenos">1292</span></a>        <span class="c1"># Check for added and removed concepts</span>
-</span><span id="L-1293"><a href="#L-1293"><span class="linenos">1293</span></a>        <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;- File </span><span class="si">{</span><span class="n">file</span><span class="si">}</span><span class="se">\n</span><span class="s2">&quot;</span>
-</span><span id="L-1294"><a href="#L-1294"><span class="linenos">1294</span></a>        <span class="n">sorted_list</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">df1</span><span class="o">.</span><span class="n">index</span><span class="p">)</span> <span class="o">-</span> <span class="nb">set</span><span class="p">(</span><span class="n">df2</span><span class="o">.</span><span class="n">index</span><span class="p">)))</span>
-</span><span id="L-1295"><a href="#L-1295"><span class="linenos">1295</span></a>        <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;- Removed concepts </span><span class="si">{</span><span class="n">sorted_list</span><span class="si">}</span><span class="se">\n</span><span class="s2">&quot;</span>
-</span><span id="L-1296"><a href="#L-1296"><span class="linenos">1296</span></a>        <span class="n">sorted_list</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">df2</span><span class="o">.</span><span class="n">index</span><span class="p">)</span> <span class="o">-</span> <span class="nb">set</span><span class="p">(</span><span class="n">df1</span><span class="o">.</span><span class="n">index</span><span class="p">)))</span>
-</span><span id="L-1297"><a href="#L-1297"><span class="linenos">1297</span></a>        <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;- Added concepts </span><span class="si">{</span><span class="n">sorted_list</span><span class="si">}</span><span class="se">\n</span><span class="s2">&quot;</span>
+</span><span id="L-1260"><a href="#L-1260"><span class="linenos">1260</span></a><span class="k">def</span><span class="w"> </span><span class="nf">diff_map_files</span><span class="p">(</span><span class="n">old_map_path</span><span class="p">:</span> <span class="n">Path</span><span class="p">,</span> <span class="n">new_map_path</span><span class="p">:</span> <span class="n">Path</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="L-1261"><a href="#L-1261"><span class="linenos">1261</span></a>    <span class="n">old_output_files</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="L-1262"><a href="#L-1262"><span class="linenos">1262</span></a>        <span class="n">file</span><span class="o">.</span><span class="n">name</span>
+</span><span id="L-1263"><a href="#L-1263"><span class="linenos">1263</span></a>        <span class="k">for</span> <span class="n">file</span> <span class="ow">in</span> <span class="n">old_map_path</span><span class="o">.</span><span class="n">iterdir</span><span class="p">()</span>
+</span><span id="L-1264"><a href="#L-1264"><span class="linenos">1264</span></a>        <span class="k">if</span> <span class="n">file</span><span class="o">.</span><span class="n">is_file</span><span class="p">()</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">file</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;.&quot;</span><span class="p">)</span>
+</span><span id="L-1265"><a href="#L-1265"><span class="linenos">1265</span></a>    <span class="p">]</span>
+</span><span id="L-1266"><a href="#L-1266"><span class="linenos">1266</span></a>    <span class="n">new_output_files</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="L-1267"><a href="#L-1267"><span class="linenos">1267</span></a>        <span class="n">file</span><span class="o">.</span><span class="n">name</span>
+</span><span id="L-1268"><a href="#L-1268"><span class="linenos">1268</span></a>        <span class="k">for</span> <span class="n">file</span> <span class="ow">in</span> <span class="n">new_map_path</span><span class="o">.</span><span class="n">iterdir</span><span class="p">()</span>
+</span><span id="L-1269"><a href="#L-1269"><span class="linenos">1269</span></a>        <span class="k">if</span> <span class="n">file</span><span class="o">.</span><span class="n">is_file</span><span class="p">()</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">file</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;.&quot;</span><span class="p">)</span>
+</span><span id="L-1270"><a href="#L-1270"><span class="linenos">1270</span></a>    <span class="p">]</span>
+</span><span id="L-1271"><a href="#L-1271"><span class="linenos">1271</span></a>
+</span><span id="L-1272"><a href="#L-1272"><span class="linenos">1272</span></a>    <span class="c1"># Convert the lists to sets for easy comparison</span>
+</span><span id="L-1273"><a href="#L-1273"><span class="linenos">1273</span></a>    <span class="n">old_output_set</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">old_output_files</span><span class="p">)</span>
+</span><span id="L-1274"><a href="#L-1274"><span class="linenos">1274</span></a>    <span class="n">new_output_set</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">new_output_files</span><span class="p">)</span>
+</span><span id="L-1275"><a href="#L-1275"><span class="linenos">1275</span></a>
+</span><span id="L-1276"><a href="#L-1276"><span class="linenos">1276</span></a>    <span class="c1"># Outputs that are in old_output_set but not in new_output_set (removed files)</span>
+</span><span id="L-1277"><a href="#L-1277"><span class="linenos">1277</span></a>    <span class="n">removed_outputs</span> <span class="o">=</span> <span class="n">old_output_set</span> <span class="o">-</span> <span class="n">new_output_set</span>
+</span><span id="L-1278"><a href="#L-1278"><span class="linenos">1278</span></a>    <span class="c1"># Outputs that are in new_output_set but not in old_output_set (added files)</span>
+</span><span id="L-1279"><a href="#L-1279"><span class="linenos">1279</span></a>    <span class="n">added_outputs</span> <span class="o">=</span> <span class="n">new_output_set</span> <span class="o">-</span> <span class="n">old_output_set</span>
+</span><span id="L-1280"><a href="#L-1280"><span class="linenos">1280</span></a>    <span class="c1"># Outputs that are the intersection of old_output_set and new_output_set</span>
+</span><span id="L-1281"><a href="#L-1281"><span class="linenos">1281</span></a>    <span class="n">common_outputs</span> <span class="o">=</span> <span class="n">old_output_set</span> <span class="o">&amp;</span> <span class="n">new_output_set</span>
+</span><span id="L-1282"><a href="#L-1282"><span class="linenos">1282</span></a>
+</span><span id="L-1283"><a href="#L-1283"><span class="linenos">1283</span></a>    <span class="n">report</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2"># Changes to available translations</span><span class="se">\n</span><span class="s2">&quot;</span>
+</span><span id="L-1284"><a href="#L-1284"><span class="linenos">1284</span></a>    <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;This compares the coding translations files available.</span><span class="se">\n\n</span><span class="s2">&quot;</span>
+</span><span id="L-1285"><a href="#L-1285"><span class="linenos">1285</span></a>    <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;- Removed outputs: </span><span class="si">{</span><span class="nb">sorted</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">removed_outputs</span><span class="p">))</span><span class="si">}</span><span class="se">\n</span><span class="s2">&quot;</span>
+</span><span id="L-1286"><a href="#L-1286"><span class="linenos">1286</span></a>    <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;- Added outputs: </span><span class="si">{</span><span class="nb">sorted</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">added_outputs</span><span class="p">))</span><span class="si">}</span><span class="se">\n</span><span class="s2">&quot;</span>
+</span><span id="L-1287"><a href="#L-1287"><span class="linenos">1287</span></a>    <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;- Common outputs: </span><span class="si">{</span><span class="nb">sorted</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">common_outputs</span><span class="p">))</span><span class="si">}</span><span class="se">\n\n</span><span class="s2">&quot;</span>
+</span><span id="L-1288"><a href="#L-1288"><span class="linenos">1288</span></a>
+</span><span id="L-1289"><a href="#L-1289"><span class="linenos">1289</span></a>    <span class="c1"># Step N: Compare common outputs between versions</span>
+</span><span id="L-1290"><a href="#L-1290"><span class="linenos">1290</span></a>    <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;# Changes to concepts in translation files</span><span class="se">\n\n</span><span class="s2">&quot;</span>
+</span><span id="L-1291"><a href="#L-1291"><span class="linenos">1291</span></a>    <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;This compares the added and removed concepts in each of the coding translation files. Note that this might be different to the config.yaml if the translations have not been run for the current config.</span><span class="se">\n\n</span><span class="s2">&quot;</span>
+</span><span id="L-1292"><a href="#L-1292"><span class="linenos">1292</span></a>    <span class="k">for</span> <span class="n">file</span> <span class="ow">in</span> <span class="n">common_outputs</span><span class="p">:</span>
+</span><span id="L-1293"><a href="#L-1293"><span class="linenos">1293</span></a>        <span class="n">old_output</span> <span class="o">=</span> <span class="n">old_map_path</span> <span class="o">/</span> <span class="n">file</span>
+</span><span id="L-1294"><a href="#L-1294"><span class="linenos">1294</span></a>        <span class="n">new_output</span> <span class="o">=</span> <span class="n">new_map_path</span> <span class="o">/</span> <span class="n">file</span>
+</span><span id="L-1295"><a href="#L-1295"><span class="linenos">1295</span></a>
+</span><span id="L-1296"><a href="#L-1296"><span class="linenos">1296</span></a>        <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Old ouptput: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">old_output</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-1297"><a href="#L-1297"><span class="linenos">1297</span></a>        <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;New ouptput: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">new_output</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
 </span><span id="L-1298"><a href="#L-1298"><span class="linenos">1298</span></a>
-</span><span id="L-1299"><a href="#L-1299"><span class="linenos">1299</span></a>        <span class="c1"># Check for changed concepts</span>
-</span><span id="L-1300"><a href="#L-1300"><span class="linenos">1300</span></a>        <span class="n">diff</span> <span class="o">=</span> <span class="n">df2</span> <span class="o">-</span> <span class="n">df1</span>  <span class="c1"># diff in counts</span>
-</span><span id="L-1301"><a href="#L-1301"><span class="linenos">1301</span></a>        <span class="n">diff</span> <span class="o">=</span> <span class="n">diff</span><span class="p">[</span>
-</span><span id="L-1302"><a href="#L-1302"><span class="linenos">1302</span></a>            <span class="p">(</span><span class="o">~</span><span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">&quot;CONCEPT&quot;</span><span class="p">]</span> <span class="o">==</span> <span class="mf">0.0</span><span class="p">))</span> <span class="o">&amp;</span> <span class="n">diff</span><span class="p">[</span><span class="s2">&quot;CONCEPT&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">notna</span><span class="p">()</span>
-</span><span id="L-1303"><a href="#L-1303"><span class="linenos">1303</span></a>        <span class="p">]</span>  <span class="c1"># get non-zero counts</span>
-</span><span id="L-1304"><a href="#L-1304"><span class="linenos">1304</span></a>        <span class="n">s</span> <span class="o">=</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span>
-</span><span id="L-1305"><a href="#L-1305"><span class="linenos">1305</span></a>        <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">diff</span><span class="o">.</span><span class="n">index</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
-</span><span id="L-1306"><a href="#L-1306"><span class="linenos">1306</span></a>            <span class="k">for</span> <span class="n">concept</span><span class="p">,</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">diff</span><span class="o">.</span><span class="n">iterrows</span><span class="p">():</span>
-</span><span id="L-1307"><a href="#L-1307"><span class="linenos">1307</span></a>                <span class="n">s</span> <span class="o">+=</span> <span class="s2">&quot;</span><span class="se">\t</span><span class="s2"> - </span><span class="si">{}</span><span class="s2"> </span><span class="si">{}</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">concept</span><span class="p">,</span> <span class="n">row</span><span class="p">[</span><span class="s2">&quot;CONCEPT&quot;</span><span class="p">])</span>
-</span><span id="L-1308"><a href="#L-1308"><span class="linenos">1308</span></a>            <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;- Changed concepts </span><span class="si">{</span><span class="n">s</span><span class="si">}</span><span class="se">\n\n</span><span class="s2">&quot;</span>
-</span><span id="L-1309"><a href="#L-1309"><span class="linenos">1309</span></a>        <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1310"><a href="#L-1310"><span class="linenos">1310</span></a>            <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;- Changed concepts []</span><span class="se">\n\n</span><span class="s2">&quot;</span>
-</span><span id="L-1311"><a href="#L-1311"><span class="linenos">1311</span></a>
-</span><span id="L-1312"><a href="#L-1312"><span class="linenos">1312</span></a>    <span class="k">return</span> <span class="n">report</span>
-</span><span id="L-1313"><a href="#L-1313"><span class="linenos">1313</span></a>
-</span><span id="L-1314"><a href="#L-1314"><span class="linenos">1314</span></a>
-</span><span id="L-1315"><a href="#L-1315"><span class="linenos">1315</span></a><span class="k">def</span><span class="w"> </span><span class="nf">diff_phen</span><span class="p">(</span>
-</span><span id="L-1316"><a href="#L-1316"><span class="linenos">1316</span></a>    <span class="n">new_phen_path</span><span class="p">:</span> <span class="n">Path</span><span class="p">,</span>
-</span><span id="L-1317"><a href="#L-1317"><span class="linenos">1317</span></a>    <span class="n">new_version</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
-</span><span id="L-1318"><a href="#L-1318"><span class="linenos">1318</span></a>    <span class="n">old_phen_path</span><span class="p">:</span> <span class="n">Path</span><span class="p">,</span>
-</span><span id="L-1319"><a href="#L-1319"><span class="linenos">1319</span></a>    <span class="n">old_version</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
-</span><span id="L-1320"><a href="#L-1320"><span class="linenos">1320</span></a>    <span class="n">report_path</span><span class="p">:</span> <span class="n">Path</span><span class="p">,</span>
-</span><span id="L-1321"><a href="#L-1321"><span class="linenos">1321</span></a><span class="p">):</span>
-</span><span id="L-1322"><a href="#L-1322"><span class="linenos">1322</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Compare the differences between two versions of a phenotype&quot;&quot;&quot;</span>
+</span><span id="L-1299"><a href="#L-1299"><span class="linenos">1299</span></a>        <span class="n">df1</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_csv</span><span class="p">(</span><span class="n">old_output</span><span class="p">)</span>
+</span><span id="L-1300"><a href="#L-1300"><span class="linenos">1300</span></a>        <span class="n">df1</span> <span class="o">=</span> <span class="n">df1</span><span class="p">[[</span><span class="s2">&quot;CONCEPT&quot;</span><span class="p">,</span> <span class="s2">&quot;CONCEPT_SET&quot;</span><span class="p">]]</span><span class="o">.</span><span class="n">groupby</span><span class="p">(</span><span class="s2">&quot;CONCEPT_SET&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">count</span><span class="p">()</span>
+</span><span id="L-1301"><a href="#L-1301"><span class="linenos">1301</span></a>        <span class="n">df2</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_csv</span><span class="p">(</span><span class="n">new_output</span><span class="p">)</span>
+</span><span id="L-1302"><a href="#L-1302"><span class="linenos">1302</span></a>        <span class="n">df2</span> <span class="o">=</span> <span class="n">df2</span><span class="p">[[</span><span class="s2">&quot;CONCEPT&quot;</span><span class="p">,</span> <span class="s2">&quot;CONCEPT_SET&quot;</span><span class="p">]]</span><span class="o">.</span><span class="n">groupby</span><span class="p">(</span><span class="s2">&quot;CONCEPT_SET&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">count</span><span class="p">()</span>
+</span><span id="L-1303"><a href="#L-1303"><span class="linenos">1303</span></a>
+</span><span id="L-1304"><a href="#L-1304"><span class="linenos">1304</span></a>        <span class="c1"># Check for added and removed concepts</span>
+</span><span id="L-1305"><a href="#L-1305"><span class="linenos">1305</span></a>        <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;- File </span><span class="si">{</span><span class="n">file</span><span class="si">}</span><span class="se">\n</span><span class="s2">&quot;</span>
+</span><span id="L-1306"><a href="#L-1306"><span class="linenos">1306</span></a>        <span class="n">sorted_list</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">df1</span><span class="o">.</span><span class="n">index</span><span class="p">)</span> <span class="o">-</span> <span class="nb">set</span><span class="p">(</span><span class="n">df2</span><span class="o">.</span><span class="n">index</span><span class="p">)))</span>
+</span><span id="L-1307"><a href="#L-1307"><span class="linenos">1307</span></a>        <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;- Removed concepts </span><span class="si">{</span><span class="n">sorted_list</span><span class="si">}</span><span class="se">\n</span><span class="s2">&quot;</span>
+</span><span id="L-1308"><a href="#L-1308"><span class="linenos">1308</span></a>        <span class="n">sorted_list</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">df2</span><span class="o">.</span><span class="n">index</span><span class="p">)</span> <span class="o">-</span> <span class="nb">set</span><span class="p">(</span><span class="n">df1</span><span class="o">.</span><span class="n">index</span><span class="p">)))</span>
+</span><span id="L-1309"><a href="#L-1309"><span class="linenos">1309</span></a>        <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;- Added concepts </span><span class="si">{</span><span class="n">sorted_list</span><span class="si">}</span><span class="se">\n</span><span class="s2">&quot;</span>
+</span><span id="L-1310"><a href="#L-1310"><span class="linenos">1310</span></a>
+</span><span id="L-1311"><a href="#L-1311"><span class="linenos">1311</span></a>        <span class="c1"># Check for changed concepts</span>
+</span><span id="L-1312"><a href="#L-1312"><span class="linenos">1312</span></a>        <span class="n">diff</span> <span class="o">=</span> <span class="n">df2</span> <span class="o">-</span> <span class="n">df1</span>  <span class="c1"># diff in counts</span>
+</span><span id="L-1313"><a href="#L-1313"><span class="linenos">1313</span></a>        <span class="n">diff</span> <span class="o">=</span> <span class="n">diff</span><span class="p">[</span>
+</span><span id="L-1314"><a href="#L-1314"><span class="linenos">1314</span></a>            <span class="p">(</span><span class="o">~</span><span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">&quot;CONCEPT&quot;</span><span class="p">]</span> <span class="o">==</span> <span class="mf">0.0</span><span class="p">))</span> <span class="o">&amp;</span> <span class="n">diff</span><span class="p">[</span><span class="s2">&quot;CONCEPT&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">notna</span><span class="p">()</span>
+</span><span id="L-1315"><a href="#L-1315"><span class="linenos">1315</span></a>        <span class="p">]</span>  <span class="c1"># get non-zero counts</span>
+</span><span id="L-1316"><a href="#L-1316"><span class="linenos">1316</span></a>        <span class="n">s</span> <span class="o">=</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span>
+</span><span id="L-1317"><a href="#L-1317"><span class="linenos">1317</span></a>        <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">diff</span><span class="o">.</span><span class="n">index</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
+</span><span id="L-1318"><a href="#L-1318"><span class="linenos">1318</span></a>            <span class="k">for</span> <span class="n">concept</span><span class="p">,</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">diff</span><span class="o">.</span><span class="n">iterrows</span><span class="p">():</span>
+</span><span id="L-1319"><a href="#L-1319"><span class="linenos">1319</span></a>                <span class="n">s</span> <span class="o">+=</span> <span class="s2">&quot;</span><span class="se">\t</span><span class="s2"> - </span><span class="si">{}</span><span class="s2"> </span><span class="si">{}</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">concept</span><span class="p">,</span> <span class="n">row</span><span class="p">[</span><span class="s2">&quot;CONCEPT&quot;</span><span class="p">])</span>
+</span><span id="L-1320"><a href="#L-1320"><span class="linenos">1320</span></a>            <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;- Changed concepts </span><span class="si">{</span><span class="n">s</span><span class="si">}</span><span class="se">\n\n</span><span class="s2">&quot;</span>
+</span><span id="L-1321"><a href="#L-1321"><span class="linenos">1321</span></a>        <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1322"><a href="#L-1322"><span class="linenos">1322</span></a>            <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;- Changed concepts []</span><span class="se">\n\n</span><span class="s2">&quot;</span>
 </span><span id="L-1323"><a href="#L-1323"><span class="linenos">1323</span></a>
-</span><span id="L-1324"><a href="#L-1324"><span class="linenos">1324</span></a>    <span class="c1"># validate phenotypes</span>
-</span><span id="L-1325"><a href="#L-1325"><span class="linenos">1325</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Validating for diff old path: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">old_phen_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-1326"><a href="#L-1326"><span class="linenos">1326</span></a>    <span class="n">validate</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">old_phen_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">()))</span>
-</span><span id="L-1327"><a href="#L-1327"><span class="linenos">1327</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Validating for diff new path: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">new_phen_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-1328"><a href="#L-1328"><span class="linenos">1328</span></a>    <span class="n">validate</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">new_phen_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">()))</span>
-</span><span id="L-1329"><a href="#L-1329"><span class="linenos">1329</span></a>
-</span><span id="L-1330"><a href="#L-1330"><span class="linenos">1330</span></a>    <span class="c1"># get old and new config</span>
-</span><span id="L-1331"><a href="#L-1331"><span class="linenos">1331</span></a>    <span class="n">old_config_path</span> <span class="o">=</span> <span class="n">old_phen_path</span> <span class="o">/</span> <span class="n">CONFIG_FILE</span>
-</span><span id="L-1332"><a href="#L-1332"><span class="linenos">1332</span></a>    <span class="k">with</span> <span class="n">old_config_path</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="s2">&quot;r&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
-</span><span id="L-1333"><a href="#L-1333"><span class="linenos">1333</span></a>        <span class="n">old_config</span> <span class="o">=</span> <span class="n">yaml</span><span class="o">.</span><span class="n">safe_load</span><span class="p">(</span><span class="n">file</span><span class="p">)</span>
-</span><span id="L-1334"><a href="#L-1334"><span class="linenos">1334</span></a>    <span class="n">new_config_path</span> <span class="o">=</span> <span class="n">new_phen_path</span> <span class="o">/</span> <span class="n">CONFIG_FILE</span>
-</span><span id="L-1335"><a href="#L-1335"><span class="linenos">1335</span></a>    <span class="k">with</span> <span class="n">new_config_path</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="s2">&quot;r&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
-</span><span id="L-1336"><a href="#L-1336"><span class="linenos">1336</span></a>        <span class="n">new_config</span> <span class="o">=</span> <span class="n">yaml</span><span class="o">.</span><span class="n">safe_load</span><span class="p">(</span><span class="n">file</span><span class="p">)</span>
-</span><span id="L-1337"><a href="#L-1337"><span class="linenos">1337</span></a>
-</span><span id="L-1338"><a href="#L-1338"><span class="linenos">1338</span></a>    <span class="c1"># write report heading</span>
-</span><span id="L-1339"><a href="#L-1339"><span class="linenos">1339</span></a>    <span class="n">report</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;# Phenotype Comparison Report</span><span class="se">\n</span><span class="s2">&quot;</span>
-</span><span id="L-1340"><a href="#L-1340"><span class="linenos">1340</span></a>    <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;## Original phenotype</span><span class="se">\n</span><span class="s2">&quot;</span>
-</span><span id="L-1341"><a href="#L-1341"><span class="linenos">1341</span></a>    <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;  - </span><span class="si">{</span><span class="n">old_config</span><span class="p">[</span><span class="s1">&#39;phenotype&#39;</span><span class="p">][</span><span class="s1">&#39;omop&#39;</span><span class="p">][</span><span class="s1">&#39;vocabulary_id&#39;</span><span class="p">]</span><span class="si">}</span><span class="se">\n</span><span class="s2">&quot;</span>
-</span><span id="L-1342"><a href="#L-1342"><span class="linenos">1342</span></a>    <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;  - </span><span class="si">{</span><span class="n">old_version</span><span class="si">}</span><span class="se">\n</span><span class="s2">&quot;</span>
-</span><span id="L-1343"><a href="#L-1343"><span class="linenos">1343</span></a>    <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;  - </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">old_phen_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="se">\n</span><span class="s2">&quot;</span>
-</span><span id="L-1344"><a href="#L-1344"><span class="linenos">1344</span></a>    <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;## Changed phenotype:</span><span class="se">\n</span><span class="s2">&quot;</span>
-</span><span id="L-1345"><a href="#L-1345"><span class="linenos">1345</span></a>    <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;  - </span><span class="si">{</span><span class="n">new_config</span><span class="p">[</span><span class="s1">&#39;phenotype&#39;</span><span class="p">][</span><span class="s1">&#39;omop&#39;</span><span class="p">][</span><span class="s1">&#39;vocabulary_id&#39;</span><span class="p">]</span><span class="si">}</span><span class="se">\n</span><span class="s2">&quot;</span>
-</span><span id="L-1346"><a href="#L-1346"><span class="linenos">1346</span></a>    <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;  - </span><span class="si">{</span><span class="n">new_version</span><span class="si">}</span><span class="se">\n</span><span class="s2">&quot;</span>
-</span><span id="L-1347"><a href="#L-1347"><span class="linenos">1347</span></a>    <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;  - </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">new_phen_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="se">\n</span><span class="s2">&quot;</span>
-</span><span id="L-1348"><a href="#L-1348"><span class="linenos">1348</span></a>
-</span><span id="L-1349"><a href="#L-1349"><span class="linenos">1349</span></a>    <span class="c1"># Step 1: check differences configuration files</span>
-</span><span id="L-1350"><a href="#L-1350"><span class="linenos">1350</span></a>    <span class="c1"># Convert list of dicts into a dict: {name: file}</span>
-</span><span id="L-1351"><a href="#L-1351"><span class="linenos">1351</span></a>    <span class="n">report</span> <span class="o">+=</span> <span class="n">diff_config</span><span class="p">(</span><span class="n">old_config</span><span class="p">,</span> <span class="n">new_config</span><span class="p">)</span>
-</span><span id="L-1352"><a href="#L-1352"><span class="linenos">1352</span></a>
-</span><span id="L-1353"><a href="#L-1353"><span class="linenos">1353</span></a>    <span class="c1"># Step 2: check differences between map files</span>
-</span><span id="L-1354"><a href="#L-1354"><span class="linenos">1354</span></a>    <span class="c1"># List files from output directories</span>
-</span><span id="L-1355"><a href="#L-1355"><span class="linenos">1355</span></a>    <span class="n">old_map_path</span> <span class="o">=</span> <span class="n">old_phen_path</span> <span class="o">/</span> <span class="n">MAP_DIR</span>
-</span><span id="L-1356"><a href="#L-1356"><span class="linenos">1356</span></a>    <span class="n">new_map_path</span> <span class="o">=</span> <span class="n">new_phen_path</span> <span class="o">/</span> <span class="n">MAP_DIR</span>
-</span><span id="L-1357"><a href="#L-1357"><span class="linenos">1357</span></a>    <span class="n">report</span> <span class="o">+=</span> <span class="n">diff_map_files</span><span class="p">(</span><span class="n">old_map_path</span><span class="p">,</span> <span class="n">new_map_path</span><span class="p">)</span>
-</span><span id="L-1358"><a href="#L-1358"><span class="linenos">1358</span></a>
-</span><span id="L-1359"><a href="#L-1359"><span class="linenos">1359</span></a>    <span class="c1"># initialise report file</span>
-</span><span id="L-1360"><a href="#L-1360"><span class="linenos">1360</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Writing to report file </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">report_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-1361"><a href="#L-1361"><span class="linenos">1361</span></a>    <span class="n">report_file</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">report_path</span><span class="p">,</span> <span class="s2">&quot;w&quot;</span><span class="p">)</span>
-</span><span id="L-1362"><a href="#L-1362"><span class="linenos">1362</span></a>    <span class="n">report_file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">report</span><span class="p">)</span>
-</span><span id="L-1363"><a href="#L-1363"><span class="linenos">1363</span></a>    <span class="n">report_file</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+</span><span id="L-1324"><a href="#L-1324"><span class="linenos">1324</span></a>    <span class="k">return</span> <span class="n">report</span>
+</span><span id="L-1325"><a href="#L-1325"><span class="linenos">1325</span></a>
+</span><span id="L-1326"><a href="#L-1326"><span class="linenos">1326</span></a>
+</span><span id="L-1327"><a href="#L-1327"><span class="linenos">1327</span></a><span class="k">def</span><span class="w"> </span><span class="nf">diff_phen</span><span class="p">(</span>
+</span><span id="L-1328"><a href="#L-1328"><span class="linenos">1328</span></a>    <span class="n">new_phen_path</span><span class="p">:</span> <span class="n">Path</span><span class="p">,</span>
+</span><span id="L-1329"><a href="#L-1329"><span class="linenos">1329</span></a>    <span class="n">new_version</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
+</span><span id="L-1330"><a href="#L-1330"><span class="linenos">1330</span></a>    <span class="n">old_phen_path</span><span class="p">:</span> <span class="n">Path</span><span class="p">,</span>
+</span><span id="L-1331"><a href="#L-1331"><span class="linenos">1331</span></a>    <span class="n">old_version</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
+</span><span id="L-1332"><a href="#L-1332"><span class="linenos">1332</span></a>    <span class="n">report_path</span><span class="p">:</span> <span class="n">Path</span><span class="p">,</span>
+</span><span id="L-1333"><a href="#L-1333"><span class="linenos">1333</span></a><span class="p">):</span>
+</span><span id="L-1334"><a href="#L-1334"><span class="linenos">1334</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Compare the differences between two versions of a phenotype&quot;&quot;&quot;</span>
+</span><span id="L-1335"><a href="#L-1335"><span class="linenos">1335</span></a>
+</span><span id="L-1336"><a href="#L-1336"><span class="linenos">1336</span></a>    <span class="c1"># validate phenotypes</span>
+</span><span id="L-1337"><a href="#L-1337"><span class="linenos">1337</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Validating for diff old path: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">old_phen_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-1338"><a href="#L-1338"><span class="linenos">1338</span></a>    <span class="n">validate</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">old_phen_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">()))</span>
+</span><span id="L-1339"><a href="#L-1339"><span class="linenos">1339</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Validating for diff new path: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">new_phen_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-1340"><a href="#L-1340"><span class="linenos">1340</span></a>    <span class="n">validate</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">new_phen_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">()))</span>
+</span><span id="L-1341"><a href="#L-1341"><span class="linenos">1341</span></a>
+</span><span id="L-1342"><a href="#L-1342"><span class="linenos">1342</span></a>    <span class="c1"># get old and new config</span>
+</span><span id="L-1343"><a href="#L-1343"><span class="linenos">1343</span></a>    <span class="n">old_config_path</span> <span class="o">=</span> <span class="n">old_phen_path</span> <span class="o">/</span> <span class="n">CONFIG_FILE</span>
+</span><span id="L-1344"><a href="#L-1344"><span class="linenos">1344</span></a>    <span class="k">with</span> <span class="n">old_config_path</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="s2">&quot;r&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
+</span><span id="L-1345"><a href="#L-1345"><span class="linenos">1345</span></a>        <span class="n">old_config</span> <span class="o">=</span> <span class="n">yaml</span><span class="o">.</span><span class="n">safe_load</span><span class="p">(</span><span class="n">file</span><span class="p">)</span>
+</span><span id="L-1346"><a href="#L-1346"><span class="linenos">1346</span></a>    <span class="n">new_config_path</span> <span class="o">=</span> <span class="n">new_phen_path</span> <span class="o">/</span> <span class="n">CONFIG_FILE</span>
+</span><span id="L-1347"><a href="#L-1347"><span class="linenos">1347</span></a>    <span class="k">with</span> <span class="n">new_config_path</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="s2">&quot;r&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
+</span><span id="L-1348"><a href="#L-1348"><span class="linenos">1348</span></a>        <span class="n">new_config</span> <span class="o">=</span> <span class="n">yaml</span><span class="o">.</span><span class="n">safe_load</span><span class="p">(</span><span class="n">file</span><span class="p">)</span>
+</span><span id="L-1349"><a href="#L-1349"><span class="linenos">1349</span></a>
+</span><span id="L-1350"><a href="#L-1350"><span class="linenos">1350</span></a>    <span class="c1"># write report heading</span>
+</span><span id="L-1351"><a href="#L-1351"><span class="linenos">1351</span></a>    <span class="n">report</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;# Phenotype Comparison Report</span><span class="se">\n</span><span class="s2">&quot;</span>
+</span><span id="L-1352"><a href="#L-1352"><span class="linenos">1352</span></a>    <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;## Original phenotype</span><span class="se">\n</span><span class="s2">&quot;</span>
+</span><span id="L-1353"><a href="#L-1353"><span class="linenos">1353</span></a>    <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;  - </span><span class="si">{</span><span class="n">old_config</span><span class="p">[</span><span class="s1">&#39;phenotype&#39;</span><span class="p">][</span><span class="s1">&#39;omop&#39;</span><span class="p">][</span><span class="s1">&#39;vocabulary_id&#39;</span><span class="p">]</span><span class="si">}</span><span class="se">\n</span><span class="s2">&quot;</span>
+</span><span id="L-1354"><a href="#L-1354"><span class="linenos">1354</span></a>    <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;  - </span><span class="si">{</span><span class="n">old_version</span><span class="si">}</span><span class="se">\n</span><span class="s2">&quot;</span>
+</span><span id="L-1355"><a href="#L-1355"><span class="linenos">1355</span></a>    <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;  - </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">old_phen_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="se">\n</span><span class="s2">&quot;</span>
+</span><span id="L-1356"><a href="#L-1356"><span class="linenos">1356</span></a>    <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;## Changed phenotype:</span><span class="se">\n</span><span class="s2">&quot;</span>
+</span><span id="L-1357"><a href="#L-1357"><span class="linenos">1357</span></a>    <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;  - </span><span class="si">{</span><span class="n">new_config</span><span class="p">[</span><span class="s1">&#39;phenotype&#39;</span><span class="p">][</span><span class="s1">&#39;omop&#39;</span><span class="p">][</span><span class="s1">&#39;vocabulary_id&#39;</span><span class="p">]</span><span class="si">}</span><span class="se">\n</span><span class="s2">&quot;</span>
+</span><span id="L-1358"><a href="#L-1358"><span class="linenos">1358</span></a>    <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;  - </span><span class="si">{</span><span class="n">new_version</span><span class="si">}</span><span class="se">\n</span><span class="s2">&quot;</span>
+</span><span id="L-1359"><a href="#L-1359"><span class="linenos">1359</span></a>    <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;  - </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">new_phen_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="se">\n</span><span class="s2">&quot;</span>
+</span><span id="L-1360"><a href="#L-1360"><span class="linenos">1360</span></a>
+</span><span id="L-1361"><a href="#L-1361"><span class="linenos">1361</span></a>    <span class="c1"># Step 1: check differences configuration files</span>
+</span><span id="L-1362"><a href="#L-1362"><span class="linenos">1362</span></a>    <span class="c1"># Convert list of dicts into a dict: {name: file}</span>
+</span><span id="L-1363"><a href="#L-1363"><span class="linenos">1363</span></a>    <span class="n">report</span> <span class="o">+=</span> <span class="n">diff_config</span><span class="p">(</span><span class="n">old_config</span><span class="p">,</span> <span class="n">new_config</span><span class="p">)</span>
 </span><span id="L-1364"><a href="#L-1364"><span class="linenos">1364</span></a>
-</span><span id="L-1365"><a href="#L-1365"><span class="linenos">1365</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Phenotypes diff&#39;d successfully&quot;</span><span class="p">)</span>
-</span><span id="L-1366"><a href="#L-1366"><span class="linenos">1366</span></a>
-</span><span id="L-1367"><a href="#L-1367"><span class="linenos">1367</span></a>
-</span><span id="L-1368"><a href="#L-1368"><span class="linenos">1368</span></a><span class="k">def</span><span class="w"> </span><span class="nf">diff</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">version</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">old_phen_dir</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">old_version</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
-</span><span id="L-1369"><a href="#L-1369"><span class="linenos">1369</span></a>    <span class="c1"># make tmp directory .acmc</span>
-</span><span id="L-1370"><a href="#L-1370"><span class="linenos">1370</span></a>    <span class="n">timestamp</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s2">&quot;%Y%m</span><span class="si">%d</span><span class="s2">_%H%M%S&quot;</span><span class="p">)</span>
-</span><span id="L-1371"><a href="#L-1371"><span class="linenos">1371</span></a>    <span class="n">temp_dir</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;.acmc/diff_</span><span class="si">{</span><span class="n">timestamp</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-1372"><a href="#L-1372"><span class="linenos">1372</span></a>
-</span><span id="L-1373"><a href="#L-1373"><span class="linenos">1373</span></a>    <span class="n">changed_phen_path</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">)</span>
-</span><span id="L-1374"><a href="#L-1374"><span class="linenos">1374</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">changed_phen_path</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
-</span><span id="L-1375"><a href="#L-1375"><span class="linenos">1375</span></a>        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
-</span><span id="L-1376"><a href="#L-1376"><span class="linenos">1376</span></a>            <span class="sa">f</span><span class="s2">&quot;Changed phenotype directory does not exist: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">changed_phen_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1377"><a href="#L-1377"><span class="linenos">1377</span></a>        <span class="p">)</span>
+</span><span id="L-1365"><a href="#L-1365"><span class="linenos">1365</span></a>    <span class="c1"># Step 2: check differences between map files</span>
+</span><span id="L-1366"><a href="#L-1366"><span class="linenos">1366</span></a>    <span class="c1"># List files from output directories</span>
+</span><span id="L-1367"><a href="#L-1367"><span class="linenos">1367</span></a>    <span class="n">old_map_path</span> <span class="o">=</span> <span class="n">old_phen_path</span> <span class="o">/</span> <span class="n">MAP_DIR</span>
+</span><span id="L-1368"><a href="#L-1368"><span class="linenos">1368</span></a>    <span class="n">new_map_path</span> <span class="o">=</span> <span class="n">new_phen_path</span> <span class="o">/</span> <span class="n">MAP_DIR</span>
+</span><span id="L-1369"><a href="#L-1369"><span class="linenos">1369</span></a>    <span class="n">report</span> <span class="o">+=</span> <span class="n">diff_map_files</span><span class="p">(</span><span class="n">old_map_path</span><span class="p">,</span> <span class="n">new_map_path</span><span class="p">)</span>
+</span><span id="L-1370"><a href="#L-1370"><span class="linenos">1370</span></a>
+</span><span id="L-1371"><a href="#L-1371"><span class="linenos">1371</span></a>    <span class="c1"># initialise report file</span>
+</span><span id="L-1372"><a href="#L-1372"><span class="linenos">1372</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Writing to report file </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">report_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-1373"><a href="#L-1373"><span class="linenos">1373</span></a>    <span class="n">report_file</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">report_path</span><span class="p">,</span> <span class="s2">&quot;w&quot;</span><span class="p">)</span>
+</span><span id="L-1374"><a href="#L-1374"><span class="linenos">1374</span></a>    <span class="n">report_file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">report</span><span class="p">)</span>
+</span><span id="L-1375"><a href="#L-1375"><span class="linenos">1375</span></a>    <span class="n">report_file</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+</span><span id="L-1376"><a href="#L-1376"><span class="linenos">1376</span></a>
+</span><span id="L-1377"><a href="#L-1377"><span class="linenos">1377</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Phenotypes diff&#39;d successfully&quot;</span><span class="p">)</span>
 </span><span id="L-1378"><a href="#L-1378"><span class="linenos">1378</span></a>
-</span><span id="L-1379"><a href="#L-1379"><span class="linenos">1379</span></a>    <span class="n">old_phen_path</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="n">old_phen_dir</span><span class="p">)</span>
-</span><span id="L-1380"><a href="#L-1380"><span class="linenos">1380</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">old_phen_path</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
-</span><span id="L-1381"><a href="#L-1381"><span class="linenos">1381</span></a>        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
-</span><span id="L-1382"><a href="#L-1382"><span class="linenos">1382</span></a>            <span class="sa">f</span><span class="s2">&quot;Old phenotype directory does not exist: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">old_phen_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-1383"><a href="#L-1383"><span class="linenos">1383</span></a>        <span class="p">)</span>
+</span><span id="L-1379"><a href="#L-1379"><span class="linenos">1379</span></a>
+</span><span id="L-1380"><a href="#L-1380"><span class="linenos">1380</span></a><span class="k">def</span><span class="w"> </span><span class="nf">diff</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">version</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">old_phen_dir</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">old_version</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
+</span><span id="L-1381"><a href="#L-1381"><span class="linenos">1381</span></a>    <span class="c1"># make tmp directory .acmc</span>
+</span><span id="L-1382"><a href="#L-1382"><span class="linenos">1382</span></a>    <span class="n">timestamp</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s2">&quot;%Y%m</span><span class="si">%d</span><span class="s2">_%H%M%S&quot;</span><span class="p">)</span>
+</span><span id="L-1383"><a href="#L-1383"><span class="linenos">1383</span></a>    <span class="n">temp_dir</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;.acmc/diff_</span><span class="si">{</span><span class="n">timestamp</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
 </span><span id="L-1384"><a href="#L-1384"><span class="linenos">1384</span></a>
-</span><span id="L-1385"><a href="#L-1385"><span class="linenos">1385</span></a>    <span class="k">try</span><span class="p">:</span>
-</span><span id="L-1386"><a href="#L-1386"><span class="linenos">1386</span></a>        <span class="c1"># Create the directory</span>
-</span><span id="L-1387"><a href="#L-1387"><span class="linenos">1387</span></a>        <span class="n">temp_dir</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">parents</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-1388"><a href="#L-1388"><span class="linenos">1388</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Temporary directory created: </span><span class="si">{</span><span class="n">temp_dir</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-1389"><a href="#L-1389"><span class="linenos">1389</span></a>
-</span><span id="L-1390"><a href="#L-1390"><span class="linenos">1390</span></a>        <span class="c1"># Create temporary directories</span>
-</span><span id="L-1391"><a href="#L-1391"><span class="linenos">1391</span></a>        <span class="n">changed_path</span> <span class="o">=</span> <span class="n">temp_dir</span> <span class="o">/</span> <span class="s2">&quot;changed&quot;</span>
-</span><span id="L-1392"><a href="#L-1392"><span class="linenos">1392</span></a>        <span class="n">changed_path</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">parents</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-1393"><a href="#L-1393"><span class="linenos">1393</span></a>        <span class="n">old_path</span> <span class="o">=</span> <span class="n">temp_dir</span> <span class="o">/</span> <span class="s2">&quot;old&quot;</span>
-</span><span id="L-1394"><a href="#L-1394"><span class="linenos">1394</span></a>        <span class="n">old_path</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">parents</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-1395"><a href="#L-1395"><span class="linenos">1395</span></a>
-</span><span id="L-1396"><a href="#L-1396"><span class="linenos">1396</span></a>        <span class="c1"># checkout changed</span>
-</span><span id="L-1397"><a href="#L-1397"><span class="linenos">1397</span></a>        <span class="k">if</span> <span class="n">version</span> <span class="o">==</span> <span class="s2">&quot;latest&quot;</span><span class="p">:</span>
-</span><span id="L-1398"><a href="#L-1398"><span class="linenos">1398</span></a>            <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span>
-</span><span id="L-1399"><a href="#L-1399"><span class="linenos">1399</span></a>                <span class="sa">f</span><span class="s2">&quot;Copying changed repo from </span><span class="si">{</span><span class="n">phen_dir</span><span class="si">}</span><span class="s2"> into </span><span class="si">{</span><span class="n">changed_path</span><span class="si">}</span><span class="s2"> at version </span><span class="si">{</span><span class="n">version</span><span class="si">}</span><span class="s2">...&quot;</span>
-</span><span id="L-1400"><a href="#L-1400"><span class="linenos">1400</span></a>            <span class="p">)</span>
-</span><span id="L-1401"><a href="#L-1401"><span class="linenos">1401</span></a>            <span class="n">shutil</span><span class="o">.</span><span class="n">copytree</span><span class="p">(</span><span class="n">changed_phen_path</span><span class="p">,</span> <span class="n">changed_path</span><span class="p">,</span> <span class="n">dirs_exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-1402"><a href="#L-1402"><span class="linenos">1402</span></a>        <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1403"><a href="#L-1403"><span class="linenos">1403</span></a>            <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span>
-</span><span id="L-1404"><a href="#L-1404"><span class="linenos">1404</span></a>                <span class="sa">f</span><span class="s2">&quot;Cloning changed repo from </span><span class="si">{</span><span class="n">phen_dir</span><span class="si">}</span><span class="s2"> into </span><span class="si">{</span><span class="n">changed_path</span><span class="si">}</span><span class="s2"> at version </span><span class="si">{</span><span class="n">version</span><span class="si">}</span><span class="s2">...&quot;</span>
-</span><span id="L-1405"><a href="#L-1405"><span class="linenos">1405</span></a>            <span class="p">)</span>
-</span><span id="L-1406"><a href="#L-1406"><span class="linenos">1406</span></a>            <span class="n">changed_repo</span> <span class="o">=</span> <span class="n">git</span><span class="o">.</span><span class="n">Repo</span><span class="o">.</span><span class="n">clone_from</span><span class="p">(</span><span class="n">changed_phen_path</span><span class="p">,</span> <span class="n">changed_path</span><span class="p">)</span>
-</span><span id="L-1407"><a href="#L-1407"><span class="linenos">1407</span></a>            <span class="n">changed_repo</span><span class="o">.</span><span class="n">git</span><span class="o">.</span><span class="n">checkout</span><span class="p">(</span><span class="n">version</span><span class="p">)</span>
-</span><span id="L-1408"><a href="#L-1408"><span class="linenos">1408</span></a>
-</span><span id="L-1409"><a href="#L-1409"><span class="linenos">1409</span></a>        <span class="c1"># checkout old</span>
-</span><span id="L-1410"><a href="#L-1410"><span class="linenos">1410</span></a>        <span class="k">if</span> <span class="n">old_version</span> <span class="o">==</span> <span class="s2">&quot;latest&quot;</span><span class="p">:</span>
-</span><span id="L-1411"><a href="#L-1411"><span class="linenos">1411</span></a>            <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span>
-</span><span id="L-1412"><a href="#L-1412"><span class="linenos">1412</span></a>                <span class="sa">f</span><span class="s2">&quot;Copying old repo from </span><span class="si">{</span><span class="n">old_phen_dir</span><span class="si">}</span><span class="s2"> into </span><span class="si">{</span><span class="n">old_path</span><span class="si">}</span><span class="s2"> at version </span><span class="si">{</span><span class="n">old_version</span><span class="si">}</span><span class="s2">...&quot;</span>
-</span><span id="L-1413"><a href="#L-1413"><span class="linenos">1413</span></a>            <span class="p">)</span>
-</span><span id="L-1414"><a href="#L-1414"><span class="linenos">1414</span></a>            <span class="n">shutil</span><span class="o">.</span><span class="n">copytree</span><span class="p">(</span><span class="n">old_phen_path</span><span class="p">,</span> <span class="n">old_path</span><span class="p">,</span> <span class="n">dirs_exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-1415"><a href="#L-1415"><span class="linenos">1415</span></a>        <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1416"><a href="#L-1416"><span class="linenos">1416</span></a>            <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span>
-</span><span id="L-1417"><a href="#L-1417"><span class="linenos">1417</span></a>                <span class="sa">f</span><span class="s2">&quot;Cloning old repo from </span><span class="si">{</span><span class="n">old_phen_dir</span><span class="si">}</span><span class="s2"> into </span><span class="si">{</span><span class="n">old_path</span><span class="si">}</span><span class="s2"> at version </span><span class="si">{</span><span class="n">old_version</span><span class="si">}</span><span class="s2">...&quot;</span>
-</span><span id="L-1418"><a href="#L-1418"><span class="linenos">1418</span></a>            <span class="p">)</span>
-</span><span id="L-1419"><a href="#L-1419"><span class="linenos">1419</span></a>            <span class="n">old_repo</span> <span class="o">=</span> <span class="n">git</span><span class="o">.</span><span class="n">Repo</span><span class="o">.</span><span class="n">clone_from</span><span class="p">(</span><span class="n">old_phen_dir</span><span class="p">,</span> <span class="n">old_path</span><span class="p">)</span>
-</span><span id="L-1420"><a href="#L-1420"><span class="linenos">1420</span></a>            <span class="n">old_repo</span><span class="o">.</span><span class="n">git</span><span class="o">.</span><span class="n">checkout</span><span class="p">(</span><span class="n">old_version</span><span class="p">)</span>
-</span><span id="L-1421"><a href="#L-1421"><span class="linenos">1421</span></a>
-</span><span id="L-1422"><a href="#L-1422"><span class="linenos">1422</span></a>        <span class="n">report_filename</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">version</span><span class="si">}</span><span class="s2">_</span><span class="si">{</span><span class="n">old_version</span><span class="si">}</span><span class="s2">_diff.md&quot;</span>
-</span><span id="L-1423"><a href="#L-1423"><span class="linenos">1423</span></a>        <span class="n">report_path</span> <span class="o">=</span> <span class="n">changed_phen_path</span> <span class="o">/</span> <span class="n">report_filename</span>
-</span><span id="L-1424"><a href="#L-1424"><span class="linenos">1424</span></a>        <span class="c1"># diff old with new</span>
-</span><span id="L-1425"><a href="#L-1425"><span class="linenos">1425</span></a>        <span class="n">diff_phen</span><span class="p">(</span><span class="n">changed_path</span><span class="p">,</span> <span class="n">version</span><span class="p">,</span> <span class="n">old_path</span><span class="p">,</span> <span class="n">old_version</span><span class="p">,</span> <span class="n">report_path</span><span class="p">)</span>
-</span><span id="L-1426"><a href="#L-1426"><span class="linenos">1426</span></a>
-</span><span id="L-1427"><a href="#L-1427"><span class="linenos">1427</span></a>    <span class="k">finally</span><span class="p">:</span>
-</span><span id="L-1428"><a href="#L-1428"><span class="linenos">1428</span></a>        <span class="c1"># clean up tmp directory</span>
-</span><span id="L-1429"><a href="#L-1429"><span class="linenos">1429</span></a>        <span class="k">if</span> <span class="n">temp_dir</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
-</span><span id="L-1430"><a href="#L-1430"><span class="linenos">1430</span></a>            <span class="n">shutil</span><span class="o">.</span><span class="n">rmtree</span><span class="p">(</span><span class="n">temp_dir</span><span class="p">)</span>
-</span><span id="L-1431"><a href="#L-1431"><span class="linenos">1431</span></a>            <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Temporary directory removed: </span><span class="si">{</span><span class="n">temp_dir</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-1385"><a href="#L-1385"><span class="linenos">1385</span></a>    <span class="n">changed_phen_path</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">)</span>
+</span><span id="L-1386"><a href="#L-1386"><span class="linenos">1386</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">changed_phen_path</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
+</span><span id="L-1387"><a href="#L-1387"><span class="linenos">1387</span></a>        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
+</span><span id="L-1388"><a href="#L-1388"><span class="linenos">1388</span></a>            <span class="sa">f</span><span class="s2">&quot;Changed phenotype directory does not exist: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">changed_phen_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1389"><a href="#L-1389"><span class="linenos">1389</span></a>        <span class="p">)</span>
+</span><span id="L-1390"><a href="#L-1390"><span class="linenos">1390</span></a>
+</span><span id="L-1391"><a href="#L-1391"><span class="linenos">1391</span></a>    <span class="n">old_phen_path</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="n">old_phen_dir</span><span class="p">)</span>
+</span><span id="L-1392"><a href="#L-1392"><span class="linenos">1392</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">old_phen_path</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
+</span><span id="L-1393"><a href="#L-1393"><span class="linenos">1393</span></a>        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
+</span><span id="L-1394"><a href="#L-1394"><span class="linenos">1394</span></a>            <span class="sa">f</span><span class="s2">&quot;Old phenotype directory does not exist: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">old_phen_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-1395"><a href="#L-1395"><span class="linenos">1395</span></a>        <span class="p">)</span>
+</span><span id="L-1396"><a href="#L-1396"><span class="linenos">1396</span></a>
+</span><span id="L-1397"><a href="#L-1397"><span class="linenos">1397</span></a>    <span class="k">try</span><span class="p">:</span>
+</span><span id="L-1398"><a href="#L-1398"><span class="linenos">1398</span></a>        <span class="c1"># Create the directory</span>
+</span><span id="L-1399"><a href="#L-1399"><span class="linenos">1399</span></a>        <span class="n">temp_dir</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">parents</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-1400"><a href="#L-1400"><span class="linenos">1400</span></a>        <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Temporary directory created: </span><span class="si">{</span><span class="n">temp_dir</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-1401"><a href="#L-1401"><span class="linenos">1401</span></a>
+</span><span id="L-1402"><a href="#L-1402"><span class="linenos">1402</span></a>        <span class="c1"># Create temporary directories</span>
+</span><span id="L-1403"><a href="#L-1403"><span class="linenos">1403</span></a>        <span class="n">changed_path</span> <span class="o">=</span> <span class="n">temp_dir</span> <span class="o">/</span> <span class="s2">&quot;changed&quot;</span>
+</span><span id="L-1404"><a href="#L-1404"><span class="linenos">1404</span></a>        <span class="n">changed_path</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">parents</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-1405"><a href="#L-1405"><span class="linenos">1405</span></a>        <span class="n">old_path</span> <span class="o">=</span> <span class="n">temp_dir</span> <span class="o">/</span> <span class="s2">&quot;old&quot;</span>
+</span><span id="L-1406"><a href="#L-1406"><span class="linenos">1406</span></a>        <span class="n">old_path</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">parents</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-1407"><a href="#L-1407"><span class="linenos">1407</span></a>
+</span><span id="L-1408"><a href="#L-1408"><span class="linenos">1408</span></a>        <span class="c1"># checkout changed</span>
+</span><span id="L-1409"><a href="#L-1409"><span class="linenos">1409</span></a>        <span class="k">if</span> <span class="n">version</span> <span class="o">==</span> <span class="s2">&quot;latest&quot;</span><span class="p">:</span>
+</span><span id="L-1410"><a href="#L-1410"><span class="linenos">1410</span></a>            <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span>
+</span><span id="L-1411"><a href="#L-1411"><span class="linenos">1411</span></a>                <span class="sa">f</span><span class="s2">&quot;Copying changed repo from </span><span class="si">{</span><span class="n">phen_dir</span><span class="si">}</span><span class="s2"> into </span><span class="si">{</span><span class="n">changed_path</span><span class="si">}</span><span class="s2"> at version </span><span class="si">{</span><span class="n">version</span><span class="si">}</span><span class="s2">...&quot;</span>
+</span><span id="L-1412"><a href="#L-1412"><span class="linenos">1412</span></a>            <span class="p">)</span>
+</span><span id="L-1413"><a href="#L-1413"><span class="linenos">1413</span></a>            <span class="n">shutil</span><span class="o">.</span><span class="n">copytree</span><span class="p">(</span><span class="n">changed_phen_path</span><span class="p">,</span> <span class="n">changed_path</span><span class="p">,</span> <span class="n">dirs_exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-1414"><a href="#L-1414"><span class="linenos">1414</span></a>        <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1415"><a href="#L-1415"><span class="linenos">1415</span></a>            <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span>
+</span><span id="L-1416"><a href="#L-1416"><span class="linenos">1416</span></a>                <span class="sa">f</span><span class="s2">&quot;Cloning changed repo from </span><span class="si">{</span><span class="n">phen_dir</span><span class="si">}</span><span class="s2"> into </span><span class="si">{</span><span class="n">changed_path</span><span class="si">}</span><span class="s2"> at version </span><span class="si">{</span><span class="n">version</span><span class="si">}</span><span class="s2">...&quot;</span>
+</span><span id="L-1417"><a href="#L-1417"><span class="linenos">1417</span></a>            <span class="p">)</span>
+</span><span id="L-1418"><a href="#L-1418"><span class="linenos">1418</span></a>            <span class="n">changed_repo</span> <span class="o">=</span> <span class="n">git</span><span class="o">.</span><span class="n">Repo</span><span class="o">.</span><span class="n">clone_from</span><span class="p">(</span><span class="n">changed_phen_path</span><span class="p">,</span> <span class="n">changed_path</span><span class="p">)</span>
+</span><span id="L-1419"><a href="#L-1419"><span class="linenos">1419</span></a>            <span class="n">changed_repo</span><span class="o">.</span><span class="n">git</span><span class="o">.</span><span class="n">checkout</span><span class="p">(</span><span class="n">version</span><span class="p">)</span>
+</span><span id="L-1420"><a href="#L-1420"><span class="linenos">1420</span></a>
+</span><span id="L-1421"><a href="#L-1421"><span class="linenos">1421</span></a>        <span class="c1"># checkout old</span>
+</span><span id="L-1422"><a href="#L-1422"><span class="linenos">1422</span></a>        <span class="k">if</span> <span class="n">old_version</span> <span class="o">==</span> <span class="s2">&quot;latest&quot;</span><span class="p">:</span>
+</span><span id="L-1423"><a href="#L-1423"><span class="linenos">1423</span></a>            <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span>
+</span><span id="L-1424"><a href="#L-1424"><span class="linenos">1424</span></a>                <span class="sa">f</span><span class="s2">&quot;Copying old repo from </span><span class="si">{</span><span class="n">old_phen_dir</span><span class="si">}</span><span class="s2"> into </span><span class="si">{</span><span class="n">old_path</span><span class="si">}</span><span class="s2"> at version </span><span class="si">{</span><span class="n">old_version</span><span class="si">}</span><span class="s2">...&quot;</span>
+</span><span id="L-1425"><a href="#L-1425"><span class="linenos">1425</span></a>            <span class="p">)</span>
+</span><span id="L-1426"><a href="#L-1426"><span class="linenos">1426</span></a>            <span class="n">shutil</span><span class="o">.</span><span class="n">copytree</span><span class="p">(</span><span class="n">old_phen_path</span><span class="p">,</span> <span class="n">old_path</span><span class="p">,</span> <span class="n">dirs_exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-1427"><a href="#L-1427"><span class="linenos">1427</span></a>        <span class="k">else</span><span class="p">:</span>
+</span><span id="L-1428"><a href="#L-1428"><span class="linenos">1428</span></a>            <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span>
+</span><span id="L-1429"><a href="#L-1429"><span class="linenos">1429</span></a>                <span class="sa">f</span><span class="s2">&quot;Cloning old repo from </span><span class="si">{</span><span class="n">old_phen_dir</span><span class="si">}</span><span class="s2"> into </span><span class="si">{</span><span class="n">old_path</span><span class="si">}</span><span class="s2"> at version </span><span class="si">{</span><span class="n">old_version</span><span class="si">}</span><span class="s2">...&quot;</span>
+</span><span id="L-1430"><a href="#L-1430"><span class="linenos">1430</span></a>            <span class="p">)</span>
+</span><span id="L-1431"><a href="#L-1431"><span class="linenos">1431</span></a>            <span class="n">old_repo</span> <span class="o">=</span> <span class="n">git</span><span class="o">.</span><span class="n">Repo</span><span class="o">.</span><span class="n">clone_from</span><span class="p">(</span><span class="n">old_phen_dir</span><span class="p">,</span> <span class="n">old_path</span><span class="p">)</span>
+</span><span id="L-1432"><a href="#L-1432"><span class="linenos">1432</span></a>            <span class="n">old_repo</span><span class="o">.</span><span class="n">git</span><span class="o">.</span><span class="n">checkout</span><span class="p">(</span><span class="n">old_version</span><span class="p">)</span>
+</span><span id="L-1433"><a href="#L-1433"><span class="linenos">1433</span></a>
+</span><span id="L-1434"><a href="#L-1434"><span class="linenos">1434</span></a>        <span class="n">report_filename</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">version</span><span class="si">}</span><span class="s2">_</span><span class="si">{</span><span class="n">old_version</span><span class="si">}</span><span class="s2">_diff.md&quot;</span>
+</span><span id="L-1435"><a href="#L-1435"><span class="linenos">1435</span></a>        <span class="n">report_path</span> <span class="o">=</span> <span class="n">changed_phen_path</span> <span class="o">/</span> <span class="n">report_filename</span>
+</span><span id="L-1436"><a href="#L-1436"><span class="linenos">1436</span></a>        <span class="c1"># diff old with new</span>
+</span><span id="L-1437"><a href="#L-1437"><span class="linenos">1437</span></a>        <span class="n">diff_phen</span><span class="p">(</span><span class="n">changed_path</span><span class="p">,</span> <span class="n">version</span><span class="p">,</span> <span class="n">old_path</span><span class="p">,</span> <span class="n">old_version</span><span class="p">,</span> <span class="n">report_path</span><span class="p">)</span>
+</span><span id="L-1438"><a href="#L-1438"><span class="linenos">1438</span></a>
+</span><span id="L-1439"><a href="#L-1439"><span class="linenos">1439</span></a>    <span class="k">finally</span><span class="p">:</span>
+</span><span id="L-1440"><a href="#L-1440"><span class="linenos">1440</span></a>        <span class="c1"># clean up tmp directory</span>
+</span><span id="L-1441"><a href="#L-1441"><span class="linenos">1441</span></a>        <span class="k">if</span> <span class="n">temp_dir</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
+</span><span id="L-1442"><a href="#L-1442"><span class="linenos">1442</span></a>            <span class="n">shutil</span><span class="o">.</span><span class="n">rmtree</span><span class="p">(</span><span class="n">temp_dir</span><span class="p">)</span>
+</span><span id="L-1443"><a href="#L-1443"><span class="linenos">1443</span></a>            <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Temporary directory removed: </span><span class="si">{</span><span class="n">temp_dir</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
 </span></pre></div>
 
 
             </section>
-                <section id="logger">
-                    <div class="attr variable">
-            <span class="name">logger</span>        =
-<span class="default_value">&lt;Logger acmc_logger (INFO)&gt;</span>
-
-        
-    </div>
-    <a class="headerlink" href="#logger"></a>
-    
-    
-
-                </section>
                 <section id="PHEN_DIR">
                     <div class="attr variable">
             <span class="name">PHEN_DIR</span>        =
@@ -1672,7 +1622,9 @@
     </div>
     <a class="headerlink" href="#PHEN_DIR"></a>
     
-    
+            <div class="docstring"><p>Default phenotype directory name</p>
+</div>
+
 
                 </section>
                 <section id="DEFAULT_PHEN_PATH">
@@ -1684,7 +1636,9 @@
     </div>
     <a class="headerlink" href="#DEFAULT_PHEN_PATH"></a>
     
-    
+            <div class="docstring"><p>Default phenotype directory path</p>
+</div>
+
 
                 </section>
                 <section id="CONCEPTS_DIR">
@@ -1696,7 +1650,9 @@
     </div>
     <a class="headerlink" href="#CONCEPTS_DIR"></a>
     
-    
+            <div class="docstring"><p>Default concepts directory name</p>
+</div>
+
 
                 </section>
                 <section id="MAP_DIR">
@@ -1708,7 +1664,9 @@
     </div>
     <a class="headerlink" href="#MAP_DIR"></a>
     
-    
+            <div class="docstring"><p>Default map directory name</p>
+</div>
+
 
                 </section>
                 <section id="CONCEPT_SET_DIR">
@@ -1720,7 +1678,9 @@
     </div>
     <a class="headerlink" href="#CONCEPT_SET_DIR"></a>
     
-    
+            <div class="docstring"><p>Default concept set directory name</p>
+</div>
+
 
                 </section>
                 <section id="CSV_PATH">
@@ -1732,7 +1692,9 @@
     </div>
     <a class="headerlink" href="#CSV_PATH"></a>
     
-    
+            <div class="docstring"><p>Default CSV concept set directory path</p>
+</div>
+
 
                 </section>
                 <section id="OMOP_PATH">
@@ -1744,7 +1706,9 @@
     </div>
     <a class="headerlink" href="#OMOP_PATH"></a>
     
-    
+            <div class="docstring"><p>Default OMOP concept set directory path</p>
+</div>
+
 
                 </section>
                 <section id="DEFAULT_PHEN_DIR_LIST">
@@ -1756,7 +1720,9 @@
     </div>
     <a class="headerlink" href="#DEFAULT_PHEN_DIR_LIST"></a>
     
-    
+            <div class="docstring"><p>List of default phenotype directories</p>
+</div>
+
 
                 </section>
                 <section id="CONFIG_FILE">
@@ -1768,7 +1734,9 @@
     </div>
     <a class="headerlink" href="#CONFIG_FILE"></a>
     
-    
+            <div class="docstring"><p>Default configuration filename</p>
+</div>
+
 
                 </section>
                 <section id="VOCAB_VERSION_FILE">
@@ -1780,7 +1748,9 @@
     </div>
     <a class="headerlink" href="#VOCAB_VERSION_FILE"></a>
     
-    
+            <div class="docstring"><p>Default vocabulary version filename</p>
+</div>
+
 
                 </section>
                 <section id="SEMANTIC_VERSION_TYPES">
@@ -1792,7 +1762,9 @@
     </div>
     <a class="headerlink" href="#SEMANTIC_VERSION_TYPES"></a>
     
-    
+            <div class="docstring"><p>List of semantic version increment types</p>
+</div>
+
 
                 </section>
                 <section id="DEFAULT_VERSION_INC">
@@ -1804,7 +1776,9 @@
     </div>
     <a class="headerlink" href="#DEFAULT_VERSION_INC"></a>
     
-    
+            <div class="docstring"><p>Default semantic version increment type</p>
+</div>
+
 
                 </section>
                 <section id="DEFAULT_GIT_BRANCH">
@@ -1816,7 +1790,9 @@
     </div>
     <a class="headerlink" href="#DEFAULT_GIT_BRANCH"></a>
     
-    
+            <div class="docstring"><p>Default phenotype repo branch name</p>
+</div>
+
 
                 </section>
                 <section id="SPLIT_COL_ACTION">
@@ -1828,7 +1804,9 @@
     </div>
     <a class="headerlink" href="#SPLIT_COL_ACTION"></a>
     
-    
+            <div class="docstring"><p>Split column preprocessing action type</p>
+</div>
+
 
                 </section>
                 <section id="CODES_COL_ACTION">
@@ -1840,7 +1818,9 @@
     </div>
     <a class="headerlink" href="#CODES_COL_ACTION"></a>
     
-    
+            <div class="docstring"><p>Codes column preprocessing action type</p>
+</div>
+
 
                 </section>
                 <section id="DIVIDE_COL_ACTION">
@@ -1852,7 +1832,9 @@
     </div>
     <a class="headerlink" href="#DIVIDE_COL_ACTION"></a>
     
-    
+            <div class="docstring"><p>Divide column preprocessing action type</p>
+</div>
+
 
                 </section>
                 <section id="COL_ACTIONS">
@@ -1864,7 +1846,9 @@
     </div>
     <a class="headerlink" href="#COL_ACTIONS"></a>
     
-    
+            <div class="docstring"><p>List of column preprocessing action types</p>
+</div>
+
 
                 </section>
                 <section id="CODE_FILE_TYPES">
@@ -1876,44 +1860,24 @@
     </div>
     <a class="headerlink" href="#CODE_FILE_TYPES"></a>
     
-    
-
-                </section>
-                <section id="SOURCE_COL_SUFFIX">
-                    <div class="attr variable">
-            <span class="name">SOURCE_COL_SUFFIX</span>        =
-<span class="default_value">&#39;_acmc_source&#39;</span>
-
-        
-    </div>
-    <a class="headerlink" href="#SOURCE_COL_SUFFIX"></a>
-    
-    
-
-                </section>
-                <section id="TARGET_COL_SUFFIX">
-                    <div class="attr variable">
-            <span class="name">TARGET_COL_SUFFIX</span>        =
-<span class="default_value">&#39;_acmc_target&#39;</span>
+            <div class="docstring"><p>List of supported source concept coding list file types</p>
+</div>
 
-        
-    </div>
-    <a class="headerlink" href="#TARGET_COL_SUFFIX"></a>
-    
-    
 
                 </section>
                 <section id="CONFIG_SCHEMA">
                     <div class="attr variable">
             <span class="name">CONFIG_SCHEMA</span>        =
 <input id="CONFIG_SCHEMA-view-value" class="view-value-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
-            <label class="view-value-button pdoc-button" for="CONFIG_SCHEMA-view-value"></label><span class="default_value">{&#39;phenotype&#39;: {&#39;type&#39;: &#39;dict&#39;, &#39;required&#39;: True, &#39;schema&#39;: {&#39;version&#39;: {&#39;type&#39;: &#39;string&#39;, &#39;required&#39;: True, &#39;regex&#39;: &#39;^\\d+\\.\\d+\\.\\d+$&#39;}, &#39;omop&#39;: {&#39;type&#39;: &#39;dict&#39;, &#39;required&#39;: True, &#39;schema&#39;: {&#39;vocabulary_id&#39;: {&#39;type&#39;: &#39;string&#39;, &#39;required&#39;: True}, &#39;vocabulary_name&#39;: {&#39;type&#39;: &#39;string&#39;, &#39;required&#39;: True}, &#39;vocabulary_reference&#39;: {&#39;type&#39;: &#39;string&#39;, &#39;required&#39;: True, &#39;regex&#39;: &#39;^https?://.*&#39;}}}, &#39;map&#39;: {&#39;type&#39;: &#39;list&#39;, &#39;schema&#39;: {&#39;type&#39;: &#39;string&#39;, &#39;allowed&#39;: [&#39;read2&#39;, &#39;icd10&#39;, &#39;atc&#39;, &#39;read3&#39;, &#39;snomed&#39;, &#39;opcs4&#39;]}}, &#39;concept_sets&#39;: {&#39;type&#39;: &#39;list&#39;, &#39;required&#39;: True, &#39;schema&#39;: {&#39;type&#39;: &#39;dict&#39;, &#39;schema&#39;: {&#39;name&#39;: {&#39;type&#39;: &#39;string&#39;, &#39;required&#39;: True}, &#39;file&#39;: {&#39;type&#39;: &#39;dict&#39;, &#39;required&#39;: False, &#39;schema&#39;: {&#39;path&#39;: {&#39;type&#39;: &#39;string&#39;, &#39;required&#39;: True}, &#39;columns&#39;: {&#39;type&#39;: &#39;dict&#39;, &#39;required&#39;: True}, &#39;category&#39;: {&#39;type&#39;: &#39;string&#39;}, &#39;actions&#39;: {&#39;type&#39;: &#39;dict&#39;, &#39;schema&#39;: {&#39;divide_col&#39;: {&#39;type&#39;: &#39;string&#39;}}}}}, &#39;metadata&#39;: {&#39;type&#39;: &#39;dict&#39;, &#39;required&#39;: True}}}}}}}</span>
+            <label class="view-value-button pdoc-button" for="CONFIG_SCHEMA-view-value"></label><span class="default_value">{&#39;phenotype&#39;: {&#39;type&#39;: &#39;dict&#39;, &#39;required&#39;: True, &#39;schema&#39;: {&#39;version&#39;: {&#39;type&#39;: &#39;string&#39;, &#39;required&#39;: True, &#39;regex&#39;: &#39;^\\d+\\.\\d+\\.\\d+$&#39;}, &#39;omop&#39;: {&#39;type&#39;: &#39;dict&#39;, &#39;required&#39;: True, &#39;schema&#39;: {&#39;vocabulary_id&#39;: {&#39;type&#39;: &#39;string&#39;, &#39;required&#39;: True}, &#39;vocabulary_name&#39;: {&#39;type&#39;: &#39;string&#39;, &#39;required&#39;: True}, &#39;vocabulary_reference&#39;: {&#39;type&#39;: &#39;string&#39;, &#39;required&#39;: True, &#39;regex&#39;: &#39;^https?://.*&#39;}}}, &#39;map&#39;: {&#39;type&#39;: &#39;list&#39;, &#39;schema&#39;: {&#39;type&#39;: &#39;string&#39;, &#39;allowed&#39;: [&#39;atc&#39;, &#39;read3&#39;, &#39;snomed&#39;, &#39;opcs4&#39;, &#39;read2&#39;, &#39;icd10&#39;]}}, &#39;concept_sets&#39;: {&#39;type&#39;: &#39;list&#39;, &#39;required&#39;: True, &#39;schema&#39;: {&#39;type&#39;: &#39;dict&#39;, &#39;schema&#39;: {&#39;name&#39;: {&#39;type&#39;: &#39;string&#39;, &#39;required&#39;: True}, &#39;file&#39;: {&#39;type&#39;: &#39;dict&#39;, &#39;required&#39;: False, &#39;schema&#39;: {&#39;path&#39;: {&#39;type&#39;: &#39;string&#39;, &#39;required&#39;: True}, &#39;columns&#39;: {&#39;type&#39;: &#39;dict&#39;, &#39;required&#39;: True}, &#39;category&#39;: {&#39;type&#39;: &#39;string&#39;}, &#39;actions&#39;: {&#39;type&#39;: &#39;dict&#39;, &#39;schema&#39;: {&#39;divide_col&#39;: {&#39;type&#39;: &#39;string&#39;}}}}}, &#39;metadata&#39;: {&#39;type&#39;: &#39;dict&#39;, &#39;required&#39;: True}}}}}}}</span>
 
         
     </div>
     <a class="headerlink" href="#CONFIG_SCHEMA"></a>
     
-    
+            <div class="docstring"><p>Phenotype config.yml schema definition</p>
+</div>
+
 
                 </section>
                 <section id="PhenValidationException">
@@ -1927,12 +1891,12 @@
 
     </div>
     <a class="headerlink" href="#PhenValidationException"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="PhenValidationException-129"><a href="#PhenValidationException-129"><span class="linenos">129</span></a><span class="k">class</span><span class="w"> </span><span class="nc">PhenValidationException</span><span class="p">(</span><span class="ne">Exception</span><span class="p">):</span>
-</span><span id="PhenValidationException-130"><a href="#PhenValidationException-130"><span class="linenos">130</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Custom exception class raised when validation errors in phenotype configuration file&quot;&quot;&quot;</span>
-</span><span id="PhenValidationException-131"><a href="#PhenValidationException-131"><span class="linenos">131</span></a>
-</span><span id="PhenValidationException-132"><a href="#PhenValidationException-132"><span class="linenos">132</span></a>    <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">,</span> <span class="n">validation_errors</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
-</span><span id="PhenValidationException-133"><a href="#PhenValidationException-133"><span class="linenos">133</span></a>        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">message</span><span class="p">)</span>
-</span><span id="PhenValidationException-134"><a href="#PhenValidationException-134"><span class="linenos">134</span></a>        <span class="bp">self</span><span class="o">.</span><span class="n">validation_errors</span> <span class="o">=</span> <span class="n">validation_errors</span>
+            <div class="pdoc-code codehilite"><pre><span></span><span id="PhenValidationException-156"><a href="#PhenValidationException-156"><span class="linenos">156</span></a><span class="k">class</span><span class="w"> </span><span class="nc">PhenValidationException</span><span class="p">(</span><span class="ne">Exception</span><span class="p">):</span>
+</span><span id="PhenValidationException-157"><a href="#PhenValidationException-157"><span class="linenos">157</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Custom exception class raised when validation errors in phenotype configuration file&quot;&quot;&quot;</span>
+</span><span id="PhenValidationException-158"><a href="#PhenValidationException-158"><span class="linenos">158</span></a>
+</span><span id="PhenValidationException-159"><a href="#PhenValidationException-159"><span class="linenos">159</span></a>    <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">,</span> <span class="n">validation_errors</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
+</span><span id="PhenValidationException-160"><a href="#PhenValidationException-160"><span class="linenos">160</span></a>        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">message</span><span class="p">)</span>
+</span><span id="PhenValidationException-161"><a href="#PhenValidationException-161"><span class="linenos">161</span></a>        <span class="bp">self</span><span class="o">.</span><span class="n">validation_errors</span> <span class="o">=</span> <span class="n">validation_errors</span>
 </span></pre></div>
 
 
@@ -1950,9 +1914,9 @@
 
     </div>
     <a class="headerlink" href="#PhenValidationException.__init__"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="PhenValidationException.__init__-132"><a href="#PhenValidationException.__init__-132"><span class="linenos">132</span></a>    <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">,</span> <span class="n">validation_errors</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
-</span><span id="PhenValidationException.__init__-133"><a href="#PhenValidationException.__init__-133"><span class="linenos">133</span></a>        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">message</span><span class="p">)</span>
-</span><span id="PhenValidationException.__init__-134"><a href="#PhenValidationException.__init__-134"><span class="linenos">134</span></a>        <span class="bp">self</span><span class="o">.</span><span class="n">validation_errors</span> <span class="o">=</span> <span class="n">validation_errors</span>
+            <div class="pdoc-code codehilite"><pre><span></span><span id="PhenValidationException.__init__-159"><a href="#PhenValidationException.__init__-159"><span class="linenos">159</span></a>    <span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">,</span> <span class="n">validation_errors</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
+</span><span id="PhenValidationException.__init__-160"><a href="#PhenValidationException.__init__-160"><span class="linenos">160</span></a>        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">message</span><span class="p">)</span>
+</span><span id="PhenValidationException.__init__-161"><a href="#PhenValidationException.__init__-161"><span class="linenos">161</span></a>        <span class="bp">self</span><span class="o">.</span><span class="n">validation_errors</span> <span class="o">=</span> <span class="n">validation_errors</span>
 </span></pre></div>
 
 
@@ -1971,132 +1935,150 @@
 
                             </div>
                 </section>
-                <section id="construct_git_url">
-                            <input id="construct_git_url-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
-<div class="attr function">
-            
-        <span class="def">def</span>
-        <span class="name">construct_git_url</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">remote_url</span><span class="p">:</span> <span class="nb">str</span></span><span class="return-annotation">):</span></span>
-
-                <label class="view-source-button" for="construct_git_url-view-source"><span>View Source</span></label>
-
-    </div>
-    <a class="headerlink" href="#construct_git_url"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="construct_git_url-137"><a href="#construct_git_url-137"><span class="linenos">137</span></a><span class="k">def</span><span class="w"> </span><span class="nf">construct_git_url</span><span class="p">(</span><span class="n">remote_url</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
-</span><span id="construct_git_url-138"><a href="#construct_git_url-138"><span class="linenos">138</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Constructs a git url for github or gitlab including a PAT token environment variable&quot;&quot;&quot;</span>
-</span><span id="construct_git_url-139"><a href="#construct_git_url-139"><span class="linenos">139</span></a>    <span class="c1"># check the url</span>
-</span><span id="construct_git_url-140"><a href="#construct_git_url-140"><span class="linenos">140</span></a>    <span class="n">parsed_url</span> <span class="o">=</span> <span class="n">urlparse</span><span class="p">(</span><span class="n">remote_url</span><span class="p">)</span>
-</span><span id="construct_git_url-141"><a href="#construct_git_url-141"><span class="linenos">141</span></a>
-</span><span id="construct_git_url-142"><a href="#construct_git_url-142"><span class="linenos">142</span></a>    <span class="c1"># if github in the URL otherwise assume it&#39;s gitlab, if we want to use others such as codeberg we&#39;d</span>
-</span><span id="construct_git_url-143"><a href="#construct_git_url-143"><span class="linenos">143</span></a>    <span class="c1"># need to update this function if the URL scheme is different.</span>
-</span><span id="construct_git_url-144"><a href="#construct_git_url-144"><span class="linenos">144</span></a>    <span class="k">if</span> <span class="s2">&quot;github.com&quot;</span> <span class="ow">in</span> <span class="n">parsed_url</span><span class="o">.</span><span class="n">netloc</span><span class="p">:</span>
-</span><span id="construct_git_url-145"><a href="#construct_git_url-145"><span class="linenos">145</span></a>        <span class="c1"># get GitHub PAT from environment variable</span>
-</span><span id="construct_git_url-146"><a href="#construct_git_url-146"><span class="linenos">146</span></a>        <span class="n">auth</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">getenv</span><span class="p">(</span><span class="s2">&quot;ACMC_GITHUB_PAT&quot;</span><span class="p">)</span>
-</span><span id="construct_git_url-147"><a href="#construct_git_url-147"><span class="linenos">147</span></a>        <span class="k">if</span> <span class="ow">not</span> <span class="n">auth</span><span class="p">:</span>
-</span><span id="construct_git_url-148"><a href="#construct_git_url-148"><span class="linenos">148</span></a>            <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
-</span><span id="construct_git_url-149"><a href="#construct_git_url-149"><span class="linenos">149</span></a>                <span class="s2">&quot;GitHub PAT not found. Set the ACMC_GITHUB_PAT environment variable.&quot;</span>
-</span><span id="construct_git_url-150"><a href="#construct_git_url-150"><span class="linenos">150</span></a>            <span class="p">)</span>
-</span><span id="construct_git_url-151"><a href="#construct_git_url-151"><span class="linenos">151</span></a>    <span class="k">else</span><span class="p">:</span>
-</span><span id="construct_git_url-152"><a href="#construct_git_url-152"><span class="linenos">152</span></a>        <span class="c1"># get GitLab PAT from environment variable</span>
-</span><span id="construct_git_url-153"><a href="#construct_git_url-153"><span class="linenos">153</span></a>        <span class="n">auth</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">getenv</span><span class="p">(</span><span class="s2">&quot;ACMC_GITLAB_PAT&quot;</span><span class="p">)</span>
-</span><span id="construct_git_url-154"><a href="#construct_git_url-154"><span class="linenos">154</span></a>        <span class="k">if</span> <span class="ow">not</span> <span class="n">auth</span><span class="p">:</span>
-</span><span id="construct_git_url-155"><a href="#construct_git_url-155"><span class="linenos">155</span></a>            <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
-</span><span id="construct_git_url-156"><a href="#construct_git_url-156"><span class="linenos">156</span></a>                <span class="s2">&quot;GitLab PAT not found. Set the ACMC_GITLAB_PAT environment variable.&quot;</span>
-</span><span id="construct_git_url-157"><a href="#construct_git_url-157"><span class="linenos">157</span></a>            <span class="p">)</span>
-</span><span id="construct_git_url-158"><a href="#construct_git_url-158"><span class="linenos">158</span></a>        <span class="n">auth</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;oauth2:</span><span class="si">{</span><span class="n">auth</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="construct_git_url-159"><a href="#construct_git_url-159"><span class="linenos">159</span></a>
-</span><span id="construct_git_url-160"><a href="#construct_git_url-160"><span class="linenos">160</span></a>    <span class="c1"># Construct the new URL with credentials</span>
-</span><span id="construct_git_url-161"><a href="#construct_git_url-161"><span class="linenos">161</span></a>    <span class="n">new_netloc</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">auth</span><span class="si">}</span><span class="s2">@</span><span class="si">{</span><span class="n">parsed_url</span><span class="o">.</span><span class="n">netloc</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="construct_git_url-162"><a href="#construct_git_url-162"><span class="linenos">162</span></a>    <span class="k">return</span> <span class="n">urlunparse</span><span class="p">(</span>
-</span><span id="construct_git_url-163"><a href="#construct_git_url-163"><span class="linenos">163</span></a>        <span class="p">(</span>
-</span><span id="construct_git_url-164"><a href="#construct_git_url-164"><span class="linenos">164</span></a>            <span class="n">parsed_url</span><span class="o">.</span><span class="n">scheme</span><span class="p">,</span>
-</span><span id="construct_git_url-165"><a href="#construct_git_url-165"><span class="linenos">165</span></a>            <span class="n">new_netloc</span><span class="p">,</span>
-</span><span id="construct_git_url-166"><a href="#construct_git_url-166"><span class="linenos">166</span></a>            <span class="n">parsed_url</span><span class="o">.</span><span class="n">path</span><span class="p">,</span>
-</span><span id="construct_git_url-167"><a href="#construct_git_url-167"><span class="linenos">167</span></a>            <span class="n">parsed_url</span><span class="o">.</span><span class="n">params</span><span class="p">,</span>
-</span><span id="construct_git_url-168"><a href="#construct_git_url-168"><span class="linenos">168</span></a>            <span class="n">parsed_url</span><span class="o">.</span><span class="n">query</span><span class="p">,</span>
-</span><span id="construct_git_url-169"><a href="#construct_git_url-169"><span class="linenos">169</span></a>            <span class="n">parsed_url</span><span class="o">.</span><span class="n">fragment</span><span class="p">,</span>
-</span><span id="construct_git_url-170"><a href="#construct_git_url-170"><span class="linenos">170</span></a>        <span class="p">)</span>
-</span><span id="construct_git_url-171"><a href="#construct_git_url-171"><span class="linenos">171</span></a>    <span class="p">)</span>
-</span></pre></div>
-
-
-            <div class="docstring"><p>Constructs a git url for github or gitlab including a PAT token environment variable</p>
-</div>
-
-
-                </section>
-                <section id="create_empty_git_dir">
-                            <input id="create_empty_git_dir-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
-<div class="attr function">
-            
-        <span class="def">def</span>
-        <span class="name">create_empty_git_dir</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">path</span><span class="p">:</span> <span class="n">pathlib</span><span class="o">.</span><span class="n">Path</span></span><span class="return-annotation">):</span></span>
-
-                <label class="view-source-button" for="create_empty_git_dir-view-source"><span>View Source</span></label>
-
-    </div>
-    <a class="headerlink" href="#create_empty_git_dir"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="create_empty_git_dir-174"><a href="#create_empty_git_dir-174"><span class="linenos">174</span></a><span class="k">def</span><span class="w"> </span><span class="nf">create_empty_git_dir</span><span class="p">(</span><span class="n">path</span><span class="p">:</span> <span class="n">Path</span><span class="p">):</span>
-</span><span id="create_empty_git_dir-175"><a href="#create_empty_git_dir-175"><span class="linenos">175</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Creates a directory with a .gitkeep file so that it&#39;s tracked in git&quot;&quot;&quot;</span>
-</span><span id="create_empty_git_dir-176"><a href="#create_empty_git_dir-176"><span class="linenos">176</span></a>    <span class="n">path</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="create_empty_git_dir-177"><a href="#create_empty_git_dir-177"><span class="linenos">177</span></a>    <span class="n">keep_path</span> <span class="o">=</span> <span class="n">path</span> <span class="o">/</span> <span class="s2">&quot;.gitkeep&quot;</span>
-</span><span id="create_empty_git_dir-178"><a href="#create_empty_git_dir-178"><span class="linenos">178</span></a>    <span class="n">keep_path</span><span class="o">.</span><span class="n">touch</span><span class="p">(</span><span class="n">exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span></pre></div>
-
-
-            <div class="docstring"><p>Creates a directory with a .gitkeep file so that it's tracked in git</p>
-</div>
-
-
-                </section>
-                <section id="check_delete_dir">
-                            <input id="check_delete_dir-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
+                <section id="init">
+                            <input id="init-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
 <div class="attr function">
             
         <span class="def">def</span>
-        <span class="name">check_delete_dir</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">path</span><span class="p">:</span> <span class="n">pathlib</span><span class="o">.</span><span class="n">Path</span>, </span><span class="param"><span class="n">msg</span><span class="p">:</span> <span class="nb">str</span></span><span class="return-annotation">) -> <span class="nb">bool</span>:</span></span>
+        <span class="name">init</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">phen_dir</span><span class="p">:</span> <span class="nb">str</span>, </span><span class="param"><span class="n">remote_url</span><span class="p">:</span> <span class="nb">str</span></span><span class="return-annotation">):</span></span>
 
-                <label class="view-source-button" for="check_delete_dir-view-source"><span>View Source</span></label>
+                <label class="view-source-button" for="init-view-source"><span>View Source</span></label>
 
     </div>
-    <a class="headerlink" href="#check_delete_dir"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="check_delete_dir-181"><a href="#check_delete_dir-181"><span class="linenos">181</span></a><span class="k">def</span><span class="w"> </span><span class="nf">check_delete_dir</span><span class="p">(</span><span class="n">path</span><span class="p">:</span> <span class="n">Path</span><span class="p">,</span> <span class="n">msg</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="check_delete_dir-182"><a href="#check_delete_dir-182"><span class="linenos">182</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Checks on the command line if a user wants to delete a directory</span>
-</span><span id="check_delete_dir-183"><a href="#check_delete_dir-183"><span class="linenos">183</span></a>
-</span><span id="check_delete_dir-184"><a href="#check_delete_dir-184"><span class="linenos">184</span></a><span class="sd">    Args:</span>
-</span><span id="check_delete_dir-185"><a href="#check_delete_dir-185"><span class="linenos">185</span></a><span class="sd">        path (Path): path of the directory to be deleted</span>
-</span><span id="check_delete_dir-186"><a href="#check_delete_dir-186"><span class="linenos">186</span></a><span class="sd">        msg (str): message to be displayed to the user</span>
-</span><span id="check_delete_dir-187"><a href="#check_delete_dir-187"><span class="linenos">187</span></a>
-</span><span id="check_delete_dir-188"><a href="#check_delete_dir-188"><span class="linenos">188</span></a><span class="sd">    Returns:</span>
-</span><span id="check_delete_dir-189"><a href="#check_delete_dir-189"><span class="linenos">189</span></a><span class="sd">        Boolean: True if deleted</span>
-</span><span id="check_delete_dir-190"><a href="#check_delete_dir-190"><span class="linenos">190</span></a><span class="sd">    &quot;&quot;&quot;</span>
-</span><span id="check_delete_dir-191"><a href="#check_delete_dir-191"><span class="linenos">191</span></a>    <span class="n">deleted</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="check_delete_dir-192"><a href="#check_delete_dir-192"><span class="linenos">192</span></a>
-</span><span id="check_delete_dir-193"><a href="#check_delete_dir-193"><span class="linenos">193</span></a>    <span class="n">user_input</span> <span class="o">=</span> <span class="nb">input</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">msg</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
-</span><span id="check_delete_dir-194"><a href="#check_delete_dir-194"><span class="linenos">194</span></a>    <span class="k">if</span> <span class="n">user_input</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">&quot;yes&quot;</span><span class="p">,</span> <span class="s2">&quot;y&quot;</span><span class="p">]:</span>
-</span><span id="check_delete_dir-195"><a href="#check_delete_dir-195"><span class="linenos">195</span></a>        <span class="n">shutil</span><span class="o">.</span><span class="n">rmtree</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
-</span><span id="check_delete_dir-196"><a href="#check_delete_dir-196"><span class="linenos">196</span></a>        <span class="n">deleted</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="check_delete_dir-197"><a href="#check_delete_dir-197"><span class="linenos">197</span></a>    <span class="k">else</span><span class="p">:</span>
-</span><span id="check_delete_dir-198"><a href="#check_delete_dir-198"><span class="linenos">198</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Directory was not deleted.&quot;</span><span class="p">)</span>
-</span><span id="check_delete_dir-199"><a href="#check_delete_dir-199"><span class="linenos">199</span></a>
-</span><span id="check_delete_dir-200"><a href="#check_delete_dir-200"><span class="linenos">200</span></a>    <span class="k">return</span> <span class="n">deleted</span>
+    <a class="headerlink" href="#init"></a>
+            <div class="pdoc-code codehilite"><pre><span></span><span id="init-230"><a href="#init-230"><span class="linenos">230</span></a><span class="k">def</span><span class="w"> </span><span class="nf">init</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">remote_url</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
+</span><span id="init-231"><a href="#init-231"><span class="linenos">231</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Initial phenotype directory as git repo with standard structure&quot;&quot;&quot;</span>
+</span><span id="init-232"><a href="#init-232"><span class="linenos">232</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Initialising Phenotype in directory: </span><span class="si">{</span><span class="n">phen_dir</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="init-233"><a href="#init-233"><span class="linenos">233</span></a>    <span class="n">phen_path</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">)</span>
+</span><span id="init-234"><a href="#init-234"><span class="linenos">234</span></a>
+</span><span id="init-235"><a href="#init-235"><span class="linenos">235</span></a>    <span class="c1"># check if directory already exists and ask user if they want to recreate it</span>
+</span><span id="init-236"><a href="#init-236"><span class="linenos">236</span></a>    <span class="k">if</span> <span class="p">(</span>
+</span><span id="init-237"><a href="#init-237"><span class="linenos">237</span></a>        <span class="n">phen_path</span><span class="o">.</span><span class="n">exists</span><span class="p">()</span> <span class="ow">and</span> <span class="n">phen_path</span><span class="o">.</span><span class="n">is_dir</span><span class="p">()</span>
+</span><span id="init-238"><a href="#init-238"><span class="linenos">238</span></a>    <span class="p">):</span>  <span class="c1"># Check if it exists and is a directory</span>
+</span><span id="init-239"><a href="#init-239"><span class="linenos">239</span></a>        <span class="n">configure</span> <span class="o">=</span> <span class="n">_check_delete_dir</span><span class="p">(</span>
+</span><span id="init-240"><a href="#init-240"><span class="linenos">240</span></a>            <span class="n">phen_path</span><span class="p">,</span>
+</span><span id="init-241"><a href="#init-241"><span class="linenos">241</span></a>            <span class="sa">f</span><span class="s2">&quot;The phen directory already exists. Do you want to reinitialise? (yes/no): &quot;</span><span class="p">,</span>
+</span><span id="init-242"><a href="#init-242"><span class="linenos">242</span></a>        <span class="p">)</span>
+</span><span id="init-243"><a href="#init-243"><span class="linenos">243</span></a>    <span class="k">else</span><span class="p">:</span>
+</span><span id="init-244"><a href="#init-244"><span class="linenos">244</span></a>        <span class="n">configure</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="init-245"><a href="#init-245"><span class="linenos">245</span></a>
+</span><span id="init-246"><a href="#init-246"><span class="linenos">246</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">configure</span><span class="p">:</span>
+</span><span id="init-247"><a href="#init-247"><span class="linenos">247</span></a>        <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Exiting, phenotype not initiatised&quot;</span><span class="p">)</span>
+</span><span id="init-248"><a href="#init-248"><span class="linenos">248</span></a>        <span class="k">return</span>
+</span><span id="init-249"><a href="#init-249"><span class="linenos">249</span></a>
+</span><span id="init-250"><a href="#init-250"><span class="linenos">250</span></a>    <span class="c1"># Initialise repo from local or remote</span>
+</span><span id="init-251"><a href="#init-251"><span class="linenos">251</span></a>    <span class="n">repo</span><span class="p">:</span> <span class="n">Repo</span>
+</span><span id="init-252"><a href="#init-252"><span class="linenos">252</span></a>
+</span><span id="init-253"><a href="#init-253"><span class="linenos">253</span></a>    <span class="c1"># if remote then clone the repo otherwise init a local repo</span>
+</span><span id="init-254"><a href="#init-254"><span class="linenos">254</span></a>    <span class="k">if</span> <span class="n">remote_url</span> <span class="o">!=</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="init-255"><a href="#init-255"><span class="linenos">255</span></a>        <span class="c1"># add PAT token to the URL</span>
+</span><span id="init-256"><a href="#init-256"><span class="linenos">256</span></a>        <span class="n">git_url</span> <span class="o">=</span> <span class="n">_construct_git_url</span><span class="p">(</span><span class="n">remote_url</span><span class="p">)</span>
+</span><span id="init-257"><a href="#init-257"><span class="linenos">257</span></a>
+</span><span id="init-258"><a href="#init-258"><span class="linenos">258</span></a>        <span class="c1"># clone the repo</span>
+</span><span id="init-259"><a href="#init-259"><span class="linenos">259</span></a>        <span class="n">git_cmd</span> <span class="o">=</span> <span class="n">git</span><span class="o">.</span><span class="n">cmd</span><span class="o">.</span><span class="n">Git</span><span class="p">()</span>
+</span><span id="init-260"><a href="#init-260"><span class="linenos">260</span></a>        <span class="n">git_cmd</span><span class="o">.</span><span class="n">clone</span><span class="p">(</span><span class="n">git_url</span><span class="p">,</span> <span class="n">phen_path</span><span class="p">)</span>
+</span><span id="init-261"><a href="#init-261"><span class="linenos">261</span></a>
+</span><span id="init-262"><a href="#init-262"><span class="linenos">262</span></a>        <span class="c1"># open repo</span>
+</span><span id="init-263"><a href="#init-263"><span class="linenos">263</span></a>        <span class="n">repo</span> <span class="o">=</span> <span class="n">Repo</span><span class="p">(</span><span class="n">phen_path</span><span class="p">)</span>
+</span><span id="init-264"><a href="#init-264"><span class="linenos">264</span></a>        <span class="c1"># check if there are any commits (new repo has no commits)</span>
+</span><span id="init-265"><a href="#init-265"><span class="linenos">265</span></a>        <span class="k">if</span> <span class="p">(</span>
+</span><span id="init-266"><a href="#init-266"><span class="linenos">266</span></a>            <span class="nb">len</span><span class="p">(</span><span class="n">repo</span><span class="o">.</span><span class="n">branches</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">or</span> <span class="n">repo</span><span class="o">.</span><span class="n">head</span><span class="o">.</span><span class="n">is_detached</span>
+</span><span id="init-267"><a href="#init-267"><span class="linenos">267</span></a>        <span class="p">):</span>  <span class="c1"># Handle detached HEAD (e.g., after init)</span>
+</span><span id="init-268"><a href="#init-268"><span class="linenos">268</span></a>            <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">&quot;The phen repository has no commits yet.&quot;</span><span class="p">)</span>
+</span><span id="init-269"><a href="#init-269"><span class="linenos">269</span></a>            <span class="n">commit_count</span> <span class="o">=</span> <span class="mi">0</span>
+</span><span id="init-270"><a href="#init-270"><span class="linenos">270</span></a>        <span class="k">else</span><span class="p">:</span>
+</span><span id="init-271"><a href="#init-271"><span class="linenos">271</span></a>            <span class="c1"># Get the total number of commits in the default branch</span>
+</span><span id="init-272"><a href="#init-272"><span class="linenos">272</span></a>            <span class="n">commit_count</span> <span class="o">=</span> <span class="nb">sum</span><span class="p">(</span><span class="mi">1</span> <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="n">repo</span><span class="o">.</span><span class="n">iter_commits</span><span class="p">())</span>
+</span><span id="init-273"><a href="#init-273"><span class="linenos">273</span></a>            <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Repo has previous commits: </span><span class="si">{</span><span class="n">commit_count</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="init-274"><a href="#init-274"><span class="linenos">274</span></a>    <span class="k">else</span><span class="p">:</span>
+</span><span id="init-275"><a href="#init-275"><span class="linenos">275</span></a>        <span class="c1"># local repo, create the directories and init</span>
+</span><span id="init-276"><a href="#init-276"><span class="linenos">276</span></a>        <span class="n">phen_path</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">parents</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="init-277"><a href="#init-277"><span class="linenos">277</span></a>        <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Phen directory &#39;</span><span class="si">{</span><span class="n">phen_path</span><span class="si">}</span><span class="s2">&#39; has been created.&quot;</span><span class="p">)</span>
+</span><span id="init-278"><a href="#init-278"><span class="linenos">278</span></a>        <span class="n">repo</span> <span class="o">=</span> <span class="n">git</span><span class="o">.</span><span class="n">Repo</span><span class="o">.</span><span class="n">init</span><span class="p">(</span><span class="n">phen_path</span><span class="p">)</span>
+</span><span id="init-279"><a href="#init-279"><span class="linenos">279</span></a>        <span class="n">commit_count</span> <span class="o">=</span> <span class="mi">0</span>
+</span><span id="init-280"><a href="#init-280"><span class="linenos">280</span></a>
+</span><span id="init-281"><a href="#init-281"><span class="linenos">281</span></a>    <span class="n">phen_path</span> <span class="o">=</span> <span class="n">phen_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">()</span>
+</span><span id="init-282"><a href="#init-282"><span class="linenos">282</span></a>    <span class="c1"># initialise empty repos</span>
+</span><span id="init-283"><a href="#init-283"><span class="linenos">283</span></a>    <span class="k">if</span> <span class="n">commit_count</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
+</span><span id="init-284"><a href="#init-284"><span class="linenos">284</span></a>        <span class="c1"># create initial commit</span>
+</span><span id="init-285"><a href="#init-285"><span class="linenos">285</span></a>        <span class="n">initial_file_path</span> <span class="o">=</span> <span class="n">phen_path</span> <span class="o">/</span> <span class="s2">&quot;README.md&quot;</span>
+</span><span id="init-286"><a href="#init-286"><span class="linenos">286</span></a>        <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">initial_file_path</span><span class="p">,</span> <span class="s2">&quot;w&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
+</span><span id="init-287"><a href="#init-287"><span class="linenos">287</span></a>            <span class="n">file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span>
+</span><span id="init-288"><a href="#init-288"><span class="linenos">288</span></a>                <span class="s2">&quot;# Initial commit</span><span class="se">\n</span><span class="s2">This is the first commit in the phen repository.</span><span class="se">\n</span><span class="s2">&quot;</span>
+</span><span id="init-289"><a href="#init-289"><span class="linenos">289</span></a>            <span class="p">)</span>
+</span><span id="init-290"><a href="#init-290"><span class="linenos">290</span></a>        <span class="n">repo</span><span class="o">.</span><span class="n">index</span><span class="o">.</span><span class="n">add</span><span class="p">([</span><span class="n">initial_file_path</span><span class="p">])</span>
+</span><span id="init-291"><a href="#init-291"><span class="linenos">291</span></a>        <span class="n">repo</span><span class="o">.</span><span class="n">index</span><span class="o">.</span><span class="n">commit</span><span class="p">(</span><span class="s2">&quot;Initial commit&quot;</span><span class="p">)</span>
+</span><span id="init-292"><a href="#init-292"><span class="linenos">292</span></a>        <span class="n">commit_count</span> <span class="o">=</span> <span class="mi">1</span>
+</span><span id="init-293"><a href="#init-293"><span class="linenos">293</span></a>
+</span><span id="init-294"><a href="#init-294"><span class="linenos">294</span></a>    <span class="c1"># Checkout the phens default branch, creating it if it does not exist</span>
+</span><span id="init-295"><a href="#init-295"><span class="linenos">295</span></a>    <span class="k">if</span> <span class="n">DEFAULT_GIT_BRANCH</span> <span class="ow">in</span> <span class="n">repo</span><span class="o">.</span><span class="n">branches</span><span class="p">:</span>
+</span><span id="init-296"><a href="#init-296"><span class="linenos">296</span></a>        <span class="n">main_branch</span> <span class="o">=</span> <span class="n">repo</span><span class="o">.</span><span class="n">heads</span><span class="p">[</span><span class="n">DEFAULT_GIT_BRANCH</span><span class="p">]</span>
+</span><span id="init-297"><a href="#init-297"><span class="linenos">297</span></a>        <span class="n">main_branch</span><span class="o">.</span><span class="n">checkout</span><span class="p">()</span>
+</span><span id="init-298"><a href="#init-298"><span class="linenos">298</span></a>    <span class="k">else</span><span class="p">:</span>
+</span><span id="init-299"><a href="#init-299"><span class="linenos">299</span></a>        <span class="n">main_branch</span> <span class="o">=</span> <span class="n">repo</span><span class="o">.</span><span class="n">create_head</span><span class="p">(</span><span class="n">DEFAULT_GIT_BRANCH</span><span class="p">)</span>
+</span><span id="init-300"><a href="#init-300"><span class="linenos">300</span></a>        <span class="n">main_branch</span><span class="o">.</span><span class="n">checkout</span><span class="p">()</span>
+</span><span id="init-301"><a href="#init-301"><span class="linenos">301</span></a>
+</span><span id="init-302"><a href="#init-302"><span class="linenos">302</span></a>    <span class="c1"># if the phen path does not contain the config file then initialise the phen type</span>
+</span><span id="init-303"><a href="#init-303"><span class="linenos">303</span></a>    <span class="n">config_path</span> <span class="o">=</span> <span class="n">phen_path</span> <span class="o">/</span> <span class="n">CONFIG_FILE</span>
+</span><span id="init-304"><a href="#init-304"><span class="linenos">304</span></a>    <span class="k">if</span> <span class="n">config_path</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
+</span><span id="init-305"><a href="#init-305"><span class="linenos">305</span></a>        <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Phenotype configuration files already exist&quot;</span><span class="p">)</span>
+</span><span id="init-306"><a href="#init-306"><span class="linenos">306</span></a>        <span class="k">return</span>
+</span><span id="init-307"><a href="#init-307"><span class="linenos">307</span></a>
+</span><span id="init-308"><a href="#init-308"><span class="linenos">308</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Creating phen directory structure and config files&quot;</span><span class="p">)</span>
+</span><span id="init-309"><a href="#init-309"><span class="linenos">309</span></a>    <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">DEFAULT_PHEN_DIR_LIST</span><span class="p">:</span>
+</span><span id="init-310"><a href="#init-310"><span class="linenos">310</span></a>        <span class="n">_create_empty_git_dir</span><span class="p">(</span><span class="n">phen_path</span> <span class="o">/</span> <span class="n">d</span><span class="p">)</span>
+</span><span id="init-311"><a href="#init-311"><span class="linenos">311</span></a>
+</span><span id="init-312"><a href="#init-312"><span class="linenos">312</span></a>    <span class="c1"># create empty phen config file</span>
+</span><span id="init-313"><a href="#init-313"><span class="linenos">313</span></a>    <span class="n">config</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="init-314"><a href="#init-314"><span class="linenos">314</span></a>        <span class="s2">&quot;phenotype&quot;</span><span class="p">:</span> <span class="p">{</span>
+</span><span id="init-315"><a href="#init-315"><span class="linenos">315</span></a>            <span class="s2">&quot;version&quot;</span><span class="p">:</span> <span class="s2">&quot;0.0.0&quot;</span><span class="p">,</span>
+</span><span id="init-316"><a href="#init-316"><span class="linenos">316</span></a>            <span class="s2">&quot;omop&quot;</span><span class="p">:</span> <span class="p">{</span>
+</span><span id="init-317"><a href="#init-317"><span class="linenos">317</span></a>                <span class="s2">&quot;vocabulary_id&quot;</span><span class="p">:</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
+</span><span id="init-318"><a href="#init-318"><span class="linenos">318</span></a>                <span class="s2">&quot;vocabulary_name&quot;</span><span class="p">:</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
+</span><span id="init-319"><a href="#init-319"><span class="linenos">319</span></a>                <span class="s2">&quot;vocabulary_reference&quot;</span><span class="p">:</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
+</span><span id="init-320"><a href="#init-320"><span class="linenos">320</span></a>            <span class="p">},</span>
+</span><span id="init-321"><a href="#init-321"><span class="linenos">321</span></a>            <span class="s2">&quot;translate&quot;</span><span class="p">:</span> <span class="p">[],</span>
+</span><span id="init-322"><a href="#init-322"><span class="linenos">322</span></a>            <span class="s2">&quot;concept_sets&quot;</span><span class="p">:</span> <span class="p">[],</span>
+</span><span id="init-323"><a href="#init-323"><span class="linenos">323</span></a>        <span class="p">}</span>
+</span><span id="init-324"><a href="#init-324"><span class="linenos">324</span></a>    <span class="p">}</span>
+</span><span id="init-325"><a href="#init-325"><span class="linenos">325</span></a>
+</span><span id="init-326"><a href="#init-326"><span class="linenos">326</span></a>    <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">phen_path</span> <span class="o">/</span> <span class="n">CONFIG_FILE</span><span class="p">,</span> <span class="s2">&quot;w&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
+</span><span id="init-327"><a href="#init-327"><span class="linenos">327</span></a>        <span class="n">yaml</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span>
+</span><span id="init-328"><a href="#init-328"><span class="linenos">328</span></a>            <span class="n">config</span><span class="p">,</span>
+</span><span id="init-329"><a href="#init-329"><span class="linenos">329</span></a>            <span class="n">file</span><span class="p">,</span>
+</span><span id="init-330"><a href="#init-330"><span class="linenos">330</span></a>            <span class="n">Dumper</span><span class="o">=</span><span class="n">util</span><span class="o">.</span><span class="n">QuotedDumper</span><span class="p">,</span>
+</span><span id="init-331"><a href="#init-331"><span class="linenos">331</span></a>            <span class="n">default_flow_style</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="init-332"><a href="#init-332"><span class="linenos">332</span></a>            <span class="n">sort_keys</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="init-333"><a href="#init-333"><span class="linenos">333</span></a>            <span class="n">default_style</span><span class="o">=</span><span class="s1">&#39;&quot;&#39;</span><span class="p">,</span>
+</span><span id="init-334"><a href="#init-334"><span class="linenos">334</span></a>        <span class="p">)</span>
+</span><span id="init-335"><a href="#init-335"><span class="linenos">335</span></a>
+</span><span id="init-336"><a href="#init-336"><span class="linenos">336</span></a>    <span class="c1"># add git ignore</span>
+</span><span id="init-337"><a href="#init-337"><span class="linenos">337</span></a>    <span class="n">ignore_content</span> <span class="o">=</span> <span class="s2">&quot;&quot;&quot;# Ignore SQLite database files</span>
+</span><span id="init-338"><a href="#init-338"><span class="linenos">338</span></a><span class="s2">*.db</span>
+</span><span id="init-339"><a href="#init-339"><span class="linenos">339</span></a><span class="s2">*.sqlite3</span>
+</span><span id="init-340"><a href="#init-340"><span class="linenos">340</span></a><span class="s2"> </span>
+</span><span id="init-341"><a href="#init-341"><span class="linenos">341</span></a><span class="s2"># Ignore SQLite journal and metadata files</span>
+</span><span id="init-342"><a href="#init-342"><span class="linenos">342</span></a><span class="s2">*.db-journal</span>
+</span><span id="init-343"><a href="#init-343"><span class="linenos">343</span></a><span class="s2">*.sqlite3-journal</span>
+</span><span id="init-344"><a href="#init-344"><span class="linenos">344</span></a>
+</span><span id="init-345"><a href="#init-345"><span class="linenos">345</span></a><span class="s2"># python</span>
+</span><span id="init-346"><a href="#init-346"><span class="linenos">346</span></a><span class="s2">.ipynb_checkpoints</span>
+</span><span id="init-347"><a href="#init-347"><span class="linenos">347</span></a><span class="s2"> &quot;&quot;&quot;</span>
+</span><span id="init-348"><a href="#init-348"><span class="linenos">348</span></a>    <span class="n">ignore_path</span> <span class="o">=</span> <span class="n">phen_path</span> <span class="o">/</span> <span class="s2">&quot;.gitignore&quot;</span>
+</span><span id="init-349"><a href="#init-349"><span class="linenos">349</span></a>    <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">ignore_path</span><span class="p">,</span> <span class="s2">&quot;w&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
+</span><span id="init-350"><a href="#init-350"><span class="linenos">350</span></a>        <span class="n">file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">ignore_content</span><span class="p">)</span>
+</span><span id="init-351"><a href="#init-351"><span class="linenos">351</span></a>
+</span><span id="init-352"><a href="#init-352"><span class="linenos">352</span></a>    <span class="c1"># add to git repo and commit</span>
+</span><span id="init-353"><a href="#init-353"><span class="linenos">353</span></a>    <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">DEFAULT_PHEN_DIR_LIST</span><span class="p">:</span>
+</span><span id="init-354"><a href="#init-354"><span class="linenos">354</span></a>        <span class="n">repo</span><span class="o">.</span><span class="n">git</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">phen_path</span> <span class="o">/</span> <span class="n">d</span><span class="p">)</span>
+</span><span id="init-355"><a href="#init-355"><span class="linenos">355</span></a>    <span class="n">repo</span><span class="o">.</span><span class="n">git</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="nb">all</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="init-356"><a href="#init-356"><span class="linenos">356</span></a>    <span class="n">repo</span><span class="o">.</span><span class="n">index</span><span class="o">.</span><span class="n">commit</span><span class="p">(</span><span class="s2">&quot;initialised the phen git repo.&quot;</span><span class="p">)</span>
+</span><span id="init-357"><a href="#init-357"><span class="linenos">357</span></a>
+</span><span id="init-358"><a href="#init-358"><span class="linenos">358</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Phenotype initialised successfully&quot;</span><span class="p">)</span>
 </span></pre></div>
 
 
-            <div class="docstring"><p>Checks on the command line if a user wants to delete a directory</p>
-
-<h6 id="arguments">Arguments:</h6>
-
-<ul>
-<li><strong>path (Path):</strong>  path of the directory to be deleted</li>
-<li><strong>msg (str):</strong>  message to be displayed to the user</li>
-</ul>
-
-<h6 id="returns">Returns:</h6>
-
-<blockquote>
-  <p>Boolean: True if deleted</p>
-</blockquote>
+            <div class="docstring"><p>Initial phenotype directory as git repo with standard structure</p>
 </div>
 
 
@@ -2112,96 +2094,96 @@
 
     </div>
     <a class="headerlink" href="#fork"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="fork-203"><a href="#fork-203"><span class="linenos">203</span></a><span class="k">def</span><span class="w"> </span><span class="nf">fork</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">upstream_url</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">upstream_version</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">new_origin_url</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
-</span><span id="fork-204"><a href="#fork-204"><span class="linenos">204</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Forks an upstream phenotype in a remote repo at a specific version to a local director, and optionally sets to a new remote origin&quot;</span>
-</span><span id="fork-205"><a href="#fork-205"><span class="linenos">205</span></a>
-</span><span id="fork-206"><a href="#fork-206"><span class="linenos">206</span></a><span class="sd">    Args:</span>
-</span><span id="fork-207"><a href="#fork-207"><span class="linenos">207</span></a><span class="sd">        phen_dir (str): local directory path where the upstream repo is to be cloned</span>
-</span><span id="fork-208"><a href="#fork-208"><span class="linenos">208</span></a><span class="sd">        upstream_url (str): url to the upstream repo</span>
-</span><span id="fork-209"><a href="#fork-209"><span class="linenos">209</span></a><span class="sd">        upstream_version (str): version in the upstream repo to clone</span>
-</span><span id="fork-210"><a href="#fork-210"><span class="linenos">210</span></a><span class="sd">        new_origin_url (str, optional): url of the remote repo to set as the new origin. Defaults to None.</span>
-</span><span id="fork-211"><a href="#fork-211"><span class="linenos">211</span></a>
-</span><span id="fork-212"><a href="#fork-212"><span class="linenos">212</span></a><span class="sd">    Raises:</span>
-</span><span id="fork-213"><a href="#fork-213"><span class="linenos">213</span></a><span class="sd">        ValueError: if the specified version is not in the upstream repo</span>
-</span><span id="fork-214"><a href="#fork-214"><span class="linenos">214</span></a><span class="sd">        ValueError: if the upstream repo is not a valid phenotype repo</span>
-</span><span id="fork-215"><a href="#fork-215"><span class="linenos">215</span></a><span class="sd">        ValueError: if there&#39;s any other problems with Git</span>
-</span><span id="fork-216"><a href="#fork-216"><span class="linenos">216</span></a><span class="sd">    &quot;&quot;&quot;</span>
-</span><span id="fork-217"><a href="#fork-217"><span class="linenos">217</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span>
-</span><span id="fork-218"><a href="#fork-218"><span class="linenos">218</span></a>        <span class="sa">f</span><span class="s2">&quot;Forking upstream repo </span><span class="si">{</span><span class="n">upstream_url</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">upstream_version</span><span class="si">}</span><span class="s2"> into directory: </span><span class="si">{</span><span class="n">phen_dir</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="fork-219"><a href="#fork-219"><span class="linenos">219</span></a>    <span class="p">)</span>
-</span><span id="fork-220"><a href="#fork-220"><span class="linenos">220</span></a>
-</span><span id="fork-221"><a href="#fork-221"><span class="linenos">221</span></a>    <span class="n">phen_path</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">)</span>
-</span><span id="fork-222"><a href="#fork-222"><span class="linenos">222</span></a>    <span class="c1"># check if directory already exists and ask user if they want to recreate it</span>
-</span><span id="fork-223"><a href="#fork-223"><span class="linenos">223</span></a>    <span class="k">if</span> <span class="p">(</span>
-</span><span id="fork-224"><a href="#fork-224"><span class="linenos">224</span></a>        <span class="n">phen_path</span><span class="o">.</span><span class="n">exists</span><span class="p">()</span> <span class="ow">and</span> <span class="n">phen_path</span><span class="o">.</span><span class="n">is_dir</span><span class="p">()</span>
-</span><span id="fork-225"><a href="#fork-225"><span class="linenos">225</span></a>    <span class="p">):</span>  <span class="c1"># Check if it exists and is a directory</span>
-</span><span id="fork-226"><a href="#fork-226"><span class="linenos">226</span></a>        <span class="n">configure</span> <span class="o">=</span> <span class="n">check_delete_dir</span><span class="p">(</span>
-</span><span id="fork-227"><a href="#fork-227"><span class="linenos">227</span></a>            <span class="n">phen_path</span><span class="p">,</span>
-</span><span id="fork-228"><a href="#fork-228"><span class="linenos">228</span></a>            <span class="sa">f</span><span class="s2">&quot;The phen directory already exists. Do you want to reinitialise? (yes/no): &quot;</span><span class="p">,</span>
-</span><span id="fork-229"><a href="#fork-229"><span class="linenos">229</span></a>        <span class="p">)</span>
-</span><span id="fork-230"><a href="#fork-230"><span class="linenos">230</span></a>    <span class="k">else</span><span class="p">:</span>
-</span><span id="fork-231"><a href="#fork-231"><span class="linenos">231</span></a>        <span class="n">configure</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="fork-232"><a href="#fork-232"><span class="linenos">232</span></a>
-</span><span id="fork-233"><a href="#fork-233"><span class="linenos">233</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">configure</span><span class="p">:</span>
-</span><span id="fork-234"><a href="#fork-234"><span class="linenos">234</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Exiting, phenotype not initiatised&quot;</span><span class="p">)</span>
-</span><span id="fork-235"><a href="#fork-235"><span class="linenos">235</span></a>        <span class="k">return</span>
-</span><span id="fork-236"><a href="#fork-236"><span class="linenos">236</span></a>
-</span><span id="fork-237"><a href="#fork-237"><span class="linenos">237</span></a>    <span class="k">try</span><span class="p">:</span>
-</span><span id="fork-238"><a href="#fork-238"><span class="linenos">238</span></a>        <span class="c1"># Clone repo</span>
-</span><span id="fork-239"><a href="#fork-239"><span class="linenos">239</span></a>        <span class="n">git_url</span> <span class="o">=</span> <span class="n">construct_git_url</span><span class="p">(</span><span class="n">upstream_url</span><span class="p">)</span>
-</span><span id="fork-240"><a href="#fork-240"><span class="linenos">240</span></a>        <span class="n">repo</span> <span class="o">=</span> <span class="n">git</span><span class="o">.</span><span class="n">Repo</span><span class="o">.</span><span class="n">clone_from</span><span class="p">(</span><span class="n">git_url</span><span class="p">,</span> <span class="n">phen_path</span><span class="p">)</span>
-</span><span id="fork-241"><a href="#fork-241"><span class="linenos">241</span></a>
-</span><span id="fork-242"><a href="#fork-242"><span class="linenos">242</span></a>        <span class="c1"># Fetch all branches and tags</span>
-</span><span id="fork-243"><a href="#fork-243"><span class="linenos">243</span></a>        <span class="n">repo</span><span class="o">.</span><span class="n">remotes</span><span class="o">.</span><span class="n">origin</span><span class="o">.</span><span class="n">fetch</span><span class="p">()</span>
-</span><span id="fork-244"><a href="#fork-244"><span class="linenos">244</span></a>
-</span><span id="fork-245"><a href="#fork-245"><span class="linenos">245</span></a>        <span class="c1"># Check if the version exists</span>
-</span><span id="fork-246"><a href="#fork-246"><span class="linenos">246</span></a>        <span class="n">available_refs</span> <span class="o">=</span> <span class="p">[</span><span class="n">ref</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;/&quot;</span><span class="p">)[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="k">for</span> <span class="n">ref</span> <span class="ow">in</span> <span class="n">repo</span><span class="o">.</span><span class="n">references</span><span class="p">]</span>
-</span><span id="fork-247"><a href="#fork-247"><span class="linenos">247</span></a>        <span class="k">if</span> <span class="n">upstream_version</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">available_refs</span><span class="p">:</span>
-</span><span id="fork-248"><a href="#fork-248"><span class="linenos">248</span></a>            <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
-</span><span id="fork-249"><a href="#fork-249"><span class="linenos">249</span></a>                <span class="sa">f</span><span class="s2">&quot;Version &#39;</span><span class="si">{</span><span class="n">upstream_version</span><span class="si">}</span><span class="s2">&#39; not found in the repository: </span><span class="si">{</span><span class="n">upstream_url</span><span class="si">}</span><span class="s2">.&quot;</span>
-</span><span id="fork-250"><a href="#fork-250"><span class="linenos">250</span></a>            <span class="p">)</span>
-</span><span id="fork-251"><a href="#fork-251"><span class="linenos">251</span></a>
-</span><span id="fork-252"><a href="#fork-252"><span class="linenos">252</span></a>        <span class="c1"># Checkout the specified version</span>
-</span><span id="fork-253"><a href="#fork-253"><span class="linenos">253</span></a>        <span class="n">repo</span><span class="o">.</span><span class="n">git</span><span class="o">.</span><span class="n">checkout</span><span class="p">(</span><span class="n">upstream_version</span><span class="p">)</span>
-</span><span id="fork-254"><a href="#fork-254"><span class="linenos">254</span></a>        <span class="n">main_branch</span> <span class="o">=</span> <span class="n">repo</span><span class="o">.</span><span class="n">heads</span><span class="p">[</span><span class="n">DEFAULT_GIT_BRANCH</span><span class="p">]</span>
-</span><span id="fork-255"><a href="#fork-255"><span class="linenos">255</span></a>        <span class="n">main_branch</span><span class="o">.</span><span class="n">checkout</span><span class="p">()</span>
-</span><span id="fork-256"><a href="#fork-256"><span class="linenos">256</span></a>
-</span><span id="fork-257"><a href="#fork-257"><span class="linenos">257</span></a>        <span class="c1"># Check if &#39;config.yml&#39; exists in the root directory</span>
-</span><span id="fork-258"><a href="#fork-258"><span class="linenos">258</span></a>        <span class="n">config_path</span> <span class="o">=</span> <span class="n">phen_path</span> <span class="o">/</span> <span class="s2">&quot;config.yml&quot;</span>
-</span><span id="fork-259"><a href="#fork-259"><span class="linenos">259</span></a>        <span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isfile</span><span class="p">(</span><span class="n">config_path</span><span class="p">):</span>
-</span><span id="fork-260"><a href="#fork-260"><span class="linenos">260</span></a>            <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
-</span><span id="fork-261"><a href="#fork-261"><span class="linenos">261</span></a>                <span class="sa">f</span><span class="s2">&quot;The forked repository is not a valid ACMC repo because &#39;config.yml&#39; is missing in the root directory.&quot;</span>
-</span><span id="fork-262"><a href="#fork-262"><span class="linenos">262</span></a>            <span class="p">)</span>
-</span><span id="fork-263"><a href="#fork-263"><span class="linenos">263</span></a>
-</span><span id="fork-264"><a href="#fork-264"><span class="linenos">264</span></a>        <span class="c1"># Validate the phenotype is compatible with the acmc tool</span>
-</span><span id="fork-265"><a href="#fork-265"><span class="linenos">265</span></a>        <span class="n">validate</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">phen_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">()))</span>
-</span><span id="fork-266"><a href="#fork-266"><span class="linenos">266</span></a>
-</span><span id="fork-267"><a href="#fork-267"><span class="linenos">267</span></a>        <span class="c1"># Delete each tag locally</span>
-</span><span id="fork-268"><a href="#fork-268"><span class="linenos">268</span></a>        <span class="n">tags</span> <span class="o">=</span> <span class="n">repo</span><span class="o">.</span><span class="n">tags</span>
-</span><span id="fork-269"><a href="#fork-269"><span class="linenos">269</span></a>        <span class="k">for</span> <span class="n">tag</span> <span class="ow">in</span> <span class="n">tags</span><span class="p">:</span>
-</span><span id="fork-270"><a href="#fork-270"><span class="linenos">270</span></a>            <span class="n">repo</span><span class="o">.</span><span class="n">delete_tag</span><span class="p">(</span><span class="n">tag</span><span class="p">)</span>
-</span><span id="fork-271"><a href="#fork-271"><span class="linenos">271</span></a>            <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Deleted tags from forked repo: </span><span class="si">{</span><span class="n">tag</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="fork-272"><a href="#fork-272"><span class="linenos">272</span></a>
-</span><span id="fork-273"><a href="#fork-273"><span class="linenos">273</span></a>        <span class="c1"># Add upstream remote</span>
-</span><span id="fork-274"><a href="#fork-274"><span class="linenos">274</span></a>        <span class="n">repo</span><span class="o">.</span><span class="n">create_remote</span><span class="p">(</span><span class="s2">&quot;upstream&quot;</span><span class="p">,</span> <span class="n">upstream_url</span><span class="p">)</span>
-</span><span id="fork-275"><a href="#fork-275"><span class="linenos">275</span></a>        <span class="n">remote</span> <span class="o">=</span> <span class="n">repo</span><span class="o">.</span><span class="n">remotes</span><span class="p">[</span><span class="s2">&quot;origin&quot;</span><span class="p">]</span>
-</span><span id="fork-276"><a href="#fork-276"><span class="linenos">276</span></a>        <span class="n">repo</span><span class="o">.</span><span class="n">delete_remote</span><span class="p">(</span><span class="n">remote</span><span class="p">)</span>  <span class="c1"># Remove existing origin</span>
-</span><span id="fork-277"><a href="#fork-277"><span class="linenos">277</span></a>
-</span><span id="fork-278"><a href="#fork-278"><span class="linenos">278</span></a>        <span class="c1"># Optionally set a new origin remote</span>
-</span><span id="fork-279"><a href="#fork-279"><span class="linenos">279</span></a>        <span class="k">if</span> <span class="n">new_origin_url</span><span class="p">:</span>
-</span><span id="fork-280"><a href="#fork-280"><span class="linenos">280</span></a>            <span class="n">git_url</span> <span class="o">=</span> <span class="n">construct_git_url</span><span class="p">(</span><span class="n">new_origin_url</span><span class="p">)</span>
-</span><span id="fork-281"><a href="#fork-281"><span class="linenos">281</span></a>            <span class="n">repo</span><span class="o">.</span><span class="n">create_remote</span><span class="p">(</span><span class="s2">&quot;origin&quot;</span><span class="p">,</span> <span class="n">git_url</span><span class="p">)</span>
-</span><span id="fork-282"><a href="#fork-282"><span class="linenos">282</span></a>            <span class="n">repo</span><span class="o">.</span><span class="n">git</span><span class="o">.</span><span class="n">push</span><span class="p">(</span><span class="s2">&quot;--set-upstream&quot;</span><span class="p">,</span> <span class="s2">&quot;origin&quot;</span><span class="p">,</span> <span class="s2">&quot;main&quot;</span><span class="p">)</span>
-</span><span id="fork-283"><a href="#fork-283"><span class="linenos">283</span></a>
-</span><span id="fork-284"><a href="#fork-284"><span class="linenos">284</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Repository forked successfully at </span><span class="si">{</span><span class="n">phen_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="fork-285"><a href="#fork-285"><span class="linenos">285</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Upstream set to </span><span class="si">{</span><span class="n">upstream_url</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="fork-286"><a href="#fork-286"><span class="linenos">286</span></a>        <span class="k">if</span> <span class="n">new_origin_url</span><span class="p">:</span>
-</span><span id="fork-287"><a href="#fork-287"><span class="linenos">287</span></a>            <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Origin set to </span><span class="si">{</span><span class="n">new_origin_url</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="fork-288"><a href="#fork-288"><span class="linenos">288</span></a>
-</span><span id="fork-289"><a href="#fork-289"><span class="linenos">289</span></a>    <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
-</span><span id="fork-290"><a href="#fork-290"><span class="linenos">290</span></a>        <span class="k">if</span> <span class="n">phen_path</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
-</span><span id="fork-291"><a href="#fork-291"><span class="linenos">291</span></a>            <span class="n">shutil</span><span class="o">.</span><span class="n">rmtree</span><span class="p">(</span><span class="n">phen_path</span><span class="p">)</span>
-</span><span id="fork-292"><a href="#fork-292"><span class="linenos">292</span></a>        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Error occurred during repository fork: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+            <div class="pdoc-code codehilite"><pre><span></span><span id="fork-361"><a href="#fork-361"><span class="linenos">361</span></a><span class="k">def</span><span class="w"> </span><span class="nf">fork</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">upstream_url</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">upstream_version</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">new_origin_url</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
+</span><span id="fork-362"><a href="#fork-362"><span class="linenos">362</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Forks an upstream phenotype in a remote repo at a specific version to a local director, and optionally sets to a new remote origin&quot;</span>
+</span><span id="fork-363"><a href="#fork-363"><span class="linenos">363</span></a>
+</span><span id="fork-364"><a href="#fork-364"><span class="linenos">364</span></a><span class="sd">    Args:</span>
+</span><span id="fork-365"><a href="#fork-365"><span class="linenos">365</span></a><span class="sd">        phen_dir (str): local directory path where the upstream repo is to be cloned</span>
+</span><span id="fork-366"><a href="#fork-366"><span class="linenos">366</span></a><span class="sd">        upstream_url (str): url to the upstream repo</span>
+</span><span id="fork-367"><a href="#fork-367"><span class="linenos">367</span></a><span class="sd">        upstream_version (str): version in the upstream repo to clone</span>
+</span><span id="fork-368"><a href="#fork-368"><span class="linenos">368</span></a><span class="sd">        new_origin_url (str, optional): url of the remote repo to set as the new origin. Defaults to None.</span>
+</span><span id="fork-369"><a href="#fork-369"><span class="linenos">369</span></a>
+</span><span id="fork-370"><a href="#fork-370"><span class="linenos">370</span></a><span class="sd">    Raises:</span>
+</span><span id="fork-371"><a href="#fork-371"><span class="linenos">371</span></a><span class="sd">        ValueError: if the specified version is not in the upstream repo</span>
+</span><span id="fork-372"><a href="#fork-372"><span class="linenos">372</span></a><span class="sd">        ValueError: if the upstream repo is not a valid phenotype repo</span>
+</span><span id="fork-373"><a href="#fork-373"><span class="linenos">373</span></a><span class="sd">        ValueError: if there&#39;s any other problems with Git</span>
+</span><span id="fork-374"><a href="#fork-374"><span class="linenos">374</span></a><span class="sd">    &quot;&quot;&quot;</span>
+</span><span id="fork-375"><a href="#fork-375"><span class="linenos">375</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span>
+</span><span id="fork-376"><a href="#fork-376"><span class="linenos">376</span></a>        <span class="sa">f</span><span class="s2">&quot;Forking upstream repo </span><span class="si">{</span><span class="n">upstream_url</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">upstream_version</span><span class="si">}</span><span class="s2"> into directory: </span><span class="si">{</span><span class="n">phen_dir</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="fork-377"><a href="#fork-377"><span class="linenos">377</span></a>    <span class="p">)</span>
+</span><span id="fork-378"><a href="#fork-378"><span class="linenos">378</span></a>
+</span><span id="fork-379"><a href="#fork-379"><span class="linenos">379</span></a>    <span class="n">phen_path</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">)</span>
+</span><span id="fork-380"><a href="#fork-380"><span class="linenos">380</span></a>    <span class="c1"># check if directory already exists and ask user if they want to recreate it</span>
+</span><span id="fork-381"><a href="#fork-381"><span class="linenos">381</span></a>    <span class="k">if</span> <span class="p">(</span>
+</span><span id="fork-382"><a href="#fork-382"><span class="linenos">382</span></a>        <span class="n">phen_path</span><span class="o">.</span><span class="n">exists</span><span class="p">()</span> <span class="ow">and</span> <span class="n">phen_path</span><span class="o">.</span><span class="n">is_dir</span><span class="p">()</span>
+</span><span id="fork-383"><a href="#fork-383"><span class="linenos">383</span></a>    <span class="p">):</span>  <span class="c1"># Check if it exists and is a directory</span>
+</span><span id="fork-384"><a href="#fork-384"><span class="linenos">384</span></a>        <span class="n">configure</span> <span class="o">=</span> <span class="n">_check_delete_dir</span><span class="p">(</span>
+</span><span id="fork-385"><a href="#fork-385"><span class="linenos">385</span></a>            <span class="n">phen_path</span><span class="p">,</span>
+</span><span id="fork-386"><a href="#fork-386"><span class="linenos">386</span></a>            <span class="sa">f</span><span class="s2">&quot;The phen directory already exists. Do you want to reinitialise? (yes/no): &quot;</span><span class="p">,</span>
+</span><span id="fork-387"><a href="#fork-387"><span class="linenos">387</span></a>        <span class="p">)</span>
+</span><span id="fork-388"><a href="#fork-388"><span class="linenos">388</span></a>    <span class="k">else</span><span class="p">:</span>
+</span><span id="fork-389"><a href="#fork-389"><span class="linenos">389</span></a>        <span class="n">configure</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="fork-390"><a href="#fork-390"><span class="linenos">390</span></a>
+</span><span id="fork-391"><a href="#fork-391"><span class="linenos">391</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">configure</span><span class="p">:</span>
+</span><span id="fork-392"><a href="#fork-392"><span class="linenos">392</span></a>        <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Exiting, phenotype not initiatised&quot;</span><span class="p">)</span>
+</span><span id="fork-393"><a href="#fork-393"><span class="linenos">393</span></a>        <span class="k">return</span>
+</span><span id="fork-394"><a href="#fork-394"><span class="linenos">394</span></a>
+</span><span id="fork-395"><a href="#fork-395"><span class="linenos">395</span></a>    <span class="k">try</span><span class="p">:</span>
+</span><span id="fork-396"><a href="#fork-396"><span class="linenos">396</span></a>        <span class="c1"># Clone repo</span>
+</span><span id="fork-397"><a href="#fork-397"><span class="linenos">397</span></a>        <span class="n">git_url</span> <span class="o">=</span> <span class="n">_construct_git_url</span><span class="p">(</span><span class="n">upstream_url</span><span class="p">)</span>
+</span><span id="fork-398"><a href="#fork-398"><span class="linenos">398</span></a>        <span class="n">repo</span> <span class="o">=</span> <span class="n">git</span><span class="o">.</span><span class="n">Repo</span><span class="o">.</span><span class="n">clone_from</span><span class="p">(</span><span class="n">git_url</span><span class="p">,</span> <span class="n">phen_path</span><span class="p">)</span>
+</span><span id="fork-399"><a href="#fork-399"><span class="linenos">399</span></a>
+</span><span id="fork-400"><a href="#fork-400"><span class="linenos">400</span></a>        <span class="c1"># Fetch all branches and tags</span>
+</span><span id="fork-401"><a href="#fork-401"><span class="linenos">401</span></a>        <span class="n">repo</span><span class="o">.</span><span class="n">remotes</span><span class="o">.</span><span class="n">origin</span><span class="o">.</span><span class="n">fetch</span><span class="p">()</span>
+</span><span id="fork-402"><a href="#fork-402"><span class="linenos">402</span></a>
+</span><span id="fork-403"><a href="#fork-403"><span class="linenos">403</span></a>        <span class="c1"># Check if the version exists</span>
+</span><span id="fork-404"><a href="#fork-404"><span class="linenos">404</span></a>        <span class="n">available_refs</span> <span class="o">=</span> <span class="p">[</span><span class="n">ref</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;/&quot;</span><span class="p">)[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="k">for</span> <span class="n">ref</span> <span class="ow">in</span> <span class="n">repo</span><span class="o">.</span><span class="n">references</span><span class="p">]</span>
+</span><span id="fork-405"><a href="#fork-405"><span class="linenos">405</span></a>        <span class="k">if</span> <span class="n">upstream_version</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">available_refs</span><span class="p">:</span>
+</span><span id="fork-406"><a href="#fork-406"><span class="linenos">406</span></a>            <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
+</span><span id="fork-407"><a href="#fork-407"><span class="linenos">407</span></a>                <span class="sa">f</span><span class="s2">&quot;Version &#39;</span><span class="si">{</span><span class="n">upstream_version</span><span class="si">}</span><span class="s2">&#39; not found in the repository: </span><span class="si">{</span><span class="n">upstream_url</span><span class="si">}</span><span class="s2">.&quot;</span>
+</span><span id="fork-408"><a href="#fork-408"><span class="linenos">408</span></a>            <span class="p">)</span>
+</span><span id="fork-409"><a href="#fork-409"><span class="linenos">409</span></a>
+</span><span id="fork-410"><a href="#fork-410"><span class="linenos">410</span></a>        <span class="c1"># Checkout the specified version</span>
+</span><span id="fork-411"><a href="#fork-411"><span class="linenos">411</span></a>        <span class="n">repo</span><span class="o">.</span><span class="n">git</span><span class="o">.</span><span class="n">checkout</span><span class="p">(</span><span class="n">upstream_version</span><span class="p">)</span>
+</span><span id="fork-412"><a href="#fork-412"><span class="linenos">412</span></a>        <span class="n">main_branch</span> <span class="o">=</span> <span class="n">repo</span><span class="o">.</span><span class="n">heads</span><span class="p">[</span><span class="n">DEFAULT_GIT_BRANCH</span><span class="p">]</span>
+</span><span id="fork-413"><a href="#fork-413"><span class="linenos">413</span></a>        <span class="n">main_branch</span><span class="o">.</span><span class="n">checkout</span><span class="p">()</span>
+</span><span id="fork-414"><a href="#fork-414"><span class="linenos">414</span></a>
+</span><span id="fork-415"><a href="#fork-415"><span class="linenos">415</span></a>        <span class="c1"># Check if &#39;config.yml&#39; exists in the root directory</span>
+</span><span id="fork-416"><a href="#fork-416"><span class="linenos">416</span></a>        <span class="n">config_path</span> <span class="o">=</span> <span class="n">phen_path</span> <span class="o">/</span> <span class="s2">&quot;config.yml&quot;</span>
+</span><span id="fork-417"><a href="#fork-417"><span class="linenos">417</span></a>        <span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isfile</span><span class="p">(</span><span class="n">config_path</span><span class="p">):</span>
+</span><span id="fork-418"><a href="#fork-418"><span class="linenos">418</span></a>            <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
+</span><span id="fork-419"><a href="#fork-419"><span class="linenos">419</span></a>                <span class="sa">f</span><span class="s2">&quot;The forked repository is not a valid ACMC repo because &#39;config.yml&#39; is missing in the root directory.&quot;</span>
+</span><span id="fork-420"><a href="#fork-420"><span class="linenos">420</span></a>            <span class="p">)</span>
+</span><span id="fork-421"><a href="#fork-421"><span class="linenos">421</span></a>
+</span><span id="fork-422"><a href="#fork-422"><span class="linenos">422</span></a>        <span class="c1"># Validate the phenotype is compatible with the acmc tool</span>
+</span><span id="fork-423"><a href="#fork-423"><span class="linenos">423</span></a>        <span class="n">validate</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">phen_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">()))</span>
+</span><span id="fork-424"><a href="#fork-424"><span class="linenos">424</span></a>
+</span><span id="fork-425"><a href="#fork-425"><span class="linenos">425</span></a>        <span class="c1"># Delete each tag locally</span>
+</span><span id="fork-426"><a href="#fork-426"><span class="linenos">426</span></a>        <span class="n">tags</span> <span class="o">=</span> <span class="n">repo</span><span class="o">.</span><span class="n">tags</span>
+</span><span id="fork-427"><a href="#fork-427"><span class="linenos">427</span></a>        <span class="k">for</span> <span class="n">tag</span> <span class="ow">in</span> <span class="n">tags</span><span class="p">:</span>
+</span><span id="fork-428"><a href="#fork-428"><span class="linenos">428</span></a>            <span class="n">repo</span><span class="o">.</span><span class="n">delete_tag</span><span class="p">(</span><span class="n">tag</span><span class="p">)</span>
+</span><span id="fork-429"><a href="#fork-429"><span class="linenos">429</span></a>            <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Deleted tags from forked repo: </span><span class="si">{</span><span class="n">tag</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="fork-430"><a href="#fork-430"><span class="linenos">430</span></a>
+</span><span id="fork-431"><a href="#fork-431"><span class="linenos">431</span></a>        <span class="c1"># Add upstream remote</span>
+</span><span id="fork-432"><a href="#fork-432"><span class="linenos">432</span></a>        <span class="n">repo</span><span class="o">.</span><span class="n">create_remote</span><span class="p">(</span><span class="s2">&quot;upstream&quot;</span><span class="p">,</span> <span class="n">upstream_url</span><span class="p">)</span>
+</span><span id="fork-433"><a href="#fork-433"><span class="linenos">433</span></a>        <span class="n">remote</span> <span class="o">=</span> <span class="n">repo</span><span class="o">.</span><span class="n">remotes</span><span class="p">[</span><span class="s2">&quot;origin&quot;</span><span class="p">]</span>
+</span><span id="fork-434"><a href="#fork-434"><span class="linenos">434</span></a>        <span class="n">repo</span><span class="o">.</span><span class="n">delete_remote</span><span class="p">(</span><span class="n">remote</span><span class="p">)</span>  <span class="c1"># Remove existing origin</span>
+</span><span id="fork-435"><a href="#fork-435"><span class="linenos">435</span></a>
+</span><span id="fork-436"><a href="#fork-436"><span class="linenos">436</span></a>        <span class="c1"># Optionally set a new origin remote</span>
+</span><span id="fork-437"><a href="#fork-437"><span class="linenos">437</span></a>        <span class="k">if</span> <span class="n">new_origin_url</span><span class="p">:</span>
+</span><span id="fork-438"><a href="#fork-438"><span class="linenos">438</span></a>            <span class="n">git_url</span> <span class="o">=</span> <span class="n">_construct_git_url</span><span class="p">(</span><span class="n">new_origin_url</span><span class="p">)</span>
+</span><span id="fork-439"><a href="#fork-439"><span class="linenos">439</span></a>            <span class="n">repo</span><span class="o">.</span><span class="n">create_remote</span><span class="p">(</span><span class="s2">&quot;origin&quot;</span><span class="p">,</span> <span class="n">git_url</span><span class="p">)</span>
+</span><span id="fork-440"><a href="#fork-440"><span class="linenos">440</span></a>            <span class="n">repo</span><span class="o">.</span><span class="n">git</span><span class="o">.</span><span class="n">push</span><span class="p">(</span><span class="s2">&quot;--set-upstream&quot;</span><span class="p">,</span> <span class="s2">&quot;origin&quot;</span><span class="p">,</span> <span class="s2">&quot;main&quot;</span><span class="p">)</span>
+</span><span id="fork-441"><a href="#fork-441"><span class="linenos">441</span></a>
+</span><span id="fork-442"><a href="#fork-442"><span class="linenos">442</span></a>        <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Repository forked successfully at </span><span class="si">{</span><span class="n">phen_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="fork-443"><a href="#fork-443"><span class="linenos">443</span></a>        <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Upstream set to </span><span class="si">{</span><span class="n">upstream_url</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="fork-444"><a href="#fork-444"><span class="linenos">444</span></a>        <span class="k">if</span> <span class="n">new_origin_url</span><span class="p">:</span>
+</span><span id="fork-445"><a href="#fork-445"><span class="linenos">445</span></a>            <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Origin set to </span><span class="si">{</span><span class="n">new_origin_url</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="fork-446"><a href="#fork-446"><span class="linenos">446</span></a>
+</span><span id="fork-447"><a href="#fork-447"><span class="linenos">447</span></a>    <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
+</span><span id="fork-448"><a href="#fork-448"><span class="linenos">448</span></a>        <span class="k">if</span> <span class="n">phen_path</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
+</span><span id="fork-449"><a href="#fork-449"><span class="linenos">449</span></a>            <span class="n">shutil</span><span class="o">.</span><span class="n">rmtree</span><span class="p">(</span><span class="n">phen_path</span><span class="p">)</span>
+</span><span id="fork-450"><a href="#fork-450"><span class="linenos">450</span></a>        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Error occurred during repository fork: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
 </span></pre></div>
 
 
@@ -2226,154 +2208,6 @@
 </div>
 
 
-                </section>
-                <section id="init">
-                            <input id="init-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
-<div class="attr function">
-            
-        <span class="def">def</span>
-        <span class="name">init</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">phen_dir</span><span class="p">:</span> <span class="nb">str</span>, </span><span class="param"><span class="n">remote_url</span><span class="p">:</span> <span class="nb">str</span></span><span class="return-annotation">):</span></span>
-
-                <label class="view-source-button" for="init-view-source"><span>View Source</span></label>
-
-    </div>
-    <a class="headerlink" href="#init"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="init-295"><a href="#init-295"><span class="linenos">295</span></a><span class="k">def</span><span class="w"> </span><span class="nf">init</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">remote_url</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
-</span><span id="init-296"><a href="#init-296"><span class="linenos">296</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Initial phenotype directory as git repo with standard structure&quot;&quot;&quot;</span>
-</span><span id="init-297"><a href="#init-297"><span class="linenos">297</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Initialising Phenotype in directory: </span><span class="si">{</span><span class="n">phen_dir</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="init-298"><a href="#init-298"><span class="linenos">298</span></a>    <span class="n">phen_path</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">)</span>
-</span><span id="init-299"><a href="#init-299"><span class="linenos">299</span></a>
-</span><span id="init-300"><a href="#init-300"><span class="linenos">300</span></a>    <span class="c1"># check if directory already exists and ask user if they want to recreate it</span>
-</span><span id="init-301"><a href="#init-301"><span class="linenos">301</span></a>    <span class="k">if</span> <span class="p">(</span>
-</span><span id="init-302"><a href="#init-302"><span class="linenos">302</span></a>        <span class="n">phen_path</span><span class="o">.</span><span class="n">exists</span><span class="p">()</span> <span class="ow">and</span> <span class="n">phen_path</span><span class="o">.</span><span class="n">is_dir</span><span class="p">()</span>
-</span><span id="init-303"><a href="#init-303"><span class="linenos">303</span></a>    <span class="p">):</span>  <span class="c1"># Check if it exists and is a directory</span>
-</span><span id="init-304"><a href="#init-304"><span class="linenos">304</span></a>        <span class="n">configure</span> <span class="o">=</span> <span class="n">check_delete_dir</span><span class="p">(</span>
-</span><span id="init-305"><a href="#init-305"><span class="linenos">305</span></a>            <span class="n">phen_path</span><span class="p">,</span>
-</span><span id="init-306"><a href="#init-306"><span class="linenos">306</span></a>            <span class="sa">f</span><span class="s2">&quot;The phen directory already exists. Do you want to reinitialise? (yes/no): &quot;</span><span class="p">,</span>
-</span><span id="init-307"><a href="#init-307"><span class="linenos">307</span></a>        <span class="p">)</span>
-</span><span id="init-308"><a href="#init-308"><span class="linenos">308</span></a>    <span class="k">else</span><span class="p">:</span>
-</span><span id="init-309"><a href="#init-309"><span class="linenos">309</span></a>        <span class="n">configure</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="init-310"><a href="#init-310"><span class="linenos">310</span></a>
-</span><span id="init-311"><a href="#init-311"><span class="linenos">311</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">configure</span><span class="p">:</span>
-</span><span id="init-312"><a href="#init-312"><span class="linenos">312</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Exiting, phenotype not initiatised&quot;</span><span class="p">)</span>
-</span><span id="init-313"><a href="#init-313"><span class="linenos">313</span></a>        <span class="k">return</span>
-</span><span id="init-314"><a href="#init-314"><span class="linenos">314</span></a>
-</span><span id="init-315"><a href="#init-315"><span class="linenos">315</span></a>    <span class="c1"># Initialise repo from local or remote</span>
-</span><span id="init-316"><a href="#init-316"><span class="linenos">316</span></a>    <span class="n">repo</span><span class="p">:</span> <span class="n">Repo</span>
-</span><span id="init-317"><a href="#init-317"><span class="linenos">317</span></a>
-</span><span id="init-318"><a href="#init-318"><span class="linenos">318</span></a>    <span class="c1"># if remote then clone the repo otherwise init a local repo</span>
-</span><span id="init-319"><a href="#init-319"><span class="linenos">319</span></a>    <span class="k">if</span> <span class="n">remote_url</span> <span class="o">!=</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="init-320"><a href="#init-320"><span class="linenos">320</span></a>        <span class="c1"># add PAT token to the URL</span>
-</span><span id="init-321"><a href="#init-321"><span class="linenos">321</span></a>        <span class="n">git_url</span> <span class="o">=</span> <span class="n">construct_git_url</span><span class="p">(</span><span class="n">remote_url</span><span class="p">)</span>
-</span><span id="init-322"><a href="#init-322"><span class="linenos">322</span></a>
-</span><span id="init-323"><a href="#init-323"><span class="linenos">323</span></a>        <span class="c1"># clone the repo</span>
-</span><span id="init-324"><a href="#init-324"><span class="linenos">324</span></a>        <span class="n">git_cmd</span> <span class="o">=</span> <span class="n">git</span><span class="o">.</span><span class="n">cmd</span><span class="o">.</span><span class="n">Git</span><span class="p">()</span>
-</span><span id="init-325"><a href="#init-325"><span class="linenos">325</span></a>        <span class="n">git_cmd</span><span class="o">.</span><span class="n">clone</span><span class="p">(</span><span class="n">git_url</span><span class="p">,</span> <span class="n">phen_path</span><span class="p">)</span>
-</span><span id="init-326"><a href="#init-326"><span class="linenos">326</span></a>
-</span><span id="init-327"><a href="#init-327"><span class="linenos">327</span></a>        <span class="c1"># open repo</span>
-</span><span id="init-328"><a href="#init-328"><span class="linenos">328</span></a>        <span class="n">repo</span> <span class="o">=</span> <span class="n">Repo</span><span class="p">(</span><span class="n">phen_path</span><span class="p">)</span>
-</span><span id="init-329"><a href="#init-329"><span class="linenos">329</span></a>        <span class="c1"># check if there are any commits (new repo has no commits)</span>
-</span><span id="init-330"><a href="#init-330"><span class="linenos">330</span></a>        <span class="k">if</span> <span class="p">(</span>
-</span><span id="init-331"><a href="#init-331"><span class="linenos">331</span></a>            <span class="nb">len</span><span class="p">(</span><span class="n">repo</span><span class="o">.</span><span class="n">branches</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span> <span class="ow">or</span> <span class="n">repo</span><span class="o">.</span><span class="n">head</span><span class="o">.</span><span class="n">is_detached</span>
-</span><span id="init-332"><a href="#init-332"><span class="linenos">332</span></a>        <span class="p">):</span>  <span class="c1"># Handle detached HEAD (e.g., after init)</span>
-</span><span id="init-333"><a href="#init-333"><span class="linenos">333</span></a>            <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">&quot;The phen repository has no commits yet.&quot;</span><span class="p">)</span>
-</span><span id="init-334"><a href="#init-334"><span class="linenos">334</span></a>            <span class="n">commit_count</span> <span class="o">=</span> <span class="mi">0</span>
-</span><span id="init-335"><a href="#init-335"><span class="linenos">335</span></a>        <span class="k">else</span><span class="p">:</span>
-</span><span id="init-336"><a href="#init-336"><span class="linenos">336</span></a>            <span class="c1"># Get the total number of commits in the default branch</span>
-</span><span id="init-337"><a href="#init-337"><span class="linenos">337</span></a>            <span class="n">commit_count</span> <span class="o">=</span> <span class="nb">sum</span><span class="p">(</span><span class="mi">1</span> <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="n">repo</span><span class="o">.</span><span class="n">iter_commits</span><span class="p">())</span>
-</span><span id="init-338"><a href="#init-338"><span class="linenos">338</span></a>            <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Repo has previous commits: </span><span class="si">{</span><span class="n">commit_count</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="init-339"><a href="#init-339"><span class="linenos">339</span></a>    <span class="k">else</span><span class="p">:</span>
-</span><span id="init-340"><a href="#init-340"><span class="linenos">340</span></a>        <span class="c1"># local repo, create the directories and init</span>
-</span><span id="init-341"><a href="#init-341"><span class="linenos">341</span></a>        <span class="n">phen_path</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">parents</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="init-342"><a href="#init-342"><span class="linenos">342</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Phen directory &#39;</span><span class="si">{</span><span class="n">phen_path</span><span class="si">}</span><span class="s2">&#39; has been created.&quot;</span><span class="p">)</span>
-</span><span id="init-343"><a href="#init-343"><span class="linenos">343</span></a>        <span class="n">repo</span> <span class="o">=</span> <span class="n">git</span><span class="o">.</span><span class="n">Repo</span><span class="o">.</span><span class="n">init</span><span class="p">(</span><span class="n">phen_path</span><span class="p">)</span>
-</span><span id="init-344"><a href="#init-344"><span class="linenos">344</span></a>        <span class="n">commit_count</span> <span class="o">=</span> <span class="mi">0</span>
-</span><span id="init-345"><a href="#init-345"><span class="linenos">345</span></a>
-</span><span id="init-346"><a href="#init-346"><span class="linenos">346</span></a>    <span class="n">phen_path</span> <span class="o">=</span> <span class="n">phen_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">()</span>
-</span><span id="init-347"><a href="#init-347"><span class="linenos">347</span></a>    <span class="c1"># initialise empty repos</span>
-</span><span id="init-348"><a href="#init-348"><span class="linenos">348</span></a>    <span class="k">if</span> <span class="n">commit_count</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
-</span><span id="init-349"><a href="#init-349"><span class="linenos">349</span></a>        <span class="c1"># create initial commit</span>
-</span><span id="init-350"><a href="#init-350"><span class="linenos">350</span></a>        <span class="n">initial_file_path</span> <span class="o">=</span> <span class="n">phen_path</span> <span class="o">/</span> <span class="s2">&quot;README.md&quot;</span>
-</span><span id="init-351"><a href="#init-351"><span class="linenos">351</span></a>        <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">initial_file_path</span><span class="p">,</span> <span class="s2">&quot;w&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
-</span><span id="init-352"><a href="#init-352"><span class="linenos">352</span></a>            <span class="n">file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span>
-</span><span id="init-353"><a href="#init-353"><span class="linenos">353</span></a>                <span class="s2">&quot;# Initial commit</span><span class="se">\n</span><span class="s2">This is the first commit in the phen repository.</span><span class="se">\n</span><span class="s2">&quot;</span>
-</span><span id="init-354"><a href="#init-354"><span class="linenos">354</span></a>            <span class="p">)</span>
-</span><span id="init-355"><a href="#init-355"><span class="linenos">355</span></a>        <span class="n">repo</span><span class="o">.</span><span class="n">index</span><span class="o">.</span><span class="n">add</span><span class="p">([</span><span class="n">initial_file_path</span><span class="p">])</span>
-</span><span id="init-356"><a href="#init-356"><span class="linenos">356</span></a>        <span class="n">repo</span><span class="o">.</span><span class="n">index</span><span class="o">.</span><span class="n">commit</span><span class="p">(</span><span class="s2">&quot;Initial commit&quot;</span><span class="p">)</span>
-</span><span id="init-357"><a href="#init-357"><span class="linenos">357</span></a>        <span class="n">commit_count</span> <span class="o">=</span> <span class="mi">1</span>
-</span><span id="init-358"><a href="#init-358"><span class="linenos">358</span></a>
-</span><span id="init-359"><a href="#init-359"><span class="linenos">359</span></a>    <span class="c1"># Checkout the phens default branch, creating it if it does not exist</span>
-</span><span id="init-360"><a href="#init-360"><span class="linenos">360</span></a>    <span class="k">if</span> <span class="n">DEFAULT_GIT_BRANCH</span> <span class="ow">in</span> <span class="n">repo</span><span class="o">.</span><span class="n">branches</span><span class="p">:</span>
-</span><span id="init-361"><a href="#init-361"><span class="linenos">361</span></a>        <span class="n">main_branch</span> <span class="o">=</span> <span class="n">repo</span><span class="o">.</span><span class="n">heads</span><span class="p">[</span><span class="n">DEFAULT_GIT_BRANCH</span><span class="p">]</span>
-</span><span id="init-362"><a href="#init-362"><span class="linenos">362</span></a>        <span class="n">main_branch</span><span class="o">.</span><span class="n">checkout</span><span class="p">()</span>
-</span><span id="init-363"><a href="#init-363"><span class="linenos">363</span></a>    <span class="k">else</span><span class="p">:</span>
-</span><span id="init-364"><a href="#init-364"><span class="linenos">364</span></a>        <span class="n">main_branch</span> <span class="o">=</span> <span class="n">repo</span><span class="o">.</span><span class="n">create_head</span><span class="p">(</span><span class="n">DEFAULT_GIT_BRANCH</span><span class="p">)</span>
-</span><span id="init-365"><a href="#init-365"><span class="linenos">365</span></a>        <span class="n">main_branch</span><span class="o">.</span><span class="n">checkout</span><span class="p">()</span>
-</span><span id="init-366"><a href="#init-366"><span class="linenos">366</span></a>
-</span><span id="init-367"><a href="#init-367"><span class="linenos">367</span></a>    <span class="c1"># if the phen path does not contain the config file then initialise the phen type</span>
-</span><span id="init-368"><a href="#init-368"><span class="linenos">368</span></a>    <span class="n">config_path</span> <span class="o">=</span> <span class="n">phen_path</span> <span class="o">/</span> <span class="n">CONFIG_FILE</span>
-</span><span id="init-369"><a href="#init-369"><span class="linenos">369</span></a>    <span class="k">if</span> <span class="n">config_path</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
-</span><span id="init-370"><a href="#init-370"><span class="linenos">370</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Phenotype configuration files already exist&quot;</span><span class="p">)</span>
-</span><span id="init-371"><a href="#init-371"><span class="linenos">371</span></a>        <span class="k">return</span>
-</span><span id="init-372"><a href="#init-372"><span class="linenos">372</span></a>
-</span><span id="init-373"><a href="#init-373"><span class="linenos">373</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Creating phen directory structure and config files&quot;</span><span class="p">)</span>
-</span><span id="init-374"><a href="#init-374"><span class="linenos">374</span></a>    <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">DEFAULT_PHEN_DIR_LIST</span><span class="p">:</span>
-</span><span id="init-375"><a href="#init-375"><span class="linenos">375</span></a>        <span class="n">create_empty_git_dir</span><span class="p">(</span><span class="n">phen_path</span> <span class="o">/</span> <span class="n">d</span><span class="p">)</span>
-</span><span id="init-376"><a href="#init-376"><span class="linenos">376</span></a>
-</span><span id="init-377"><a href="#init-377"><span class="linenos">377</span></a>    <span class="c1"># create empty phen config file</span>
-</span><span id="init-378"><a href="#init-378"><span class="linenos">378</span></a>    <span class="n">config</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="init-379"><a href="#init-379"><span class="linenos">379</span></a>        <span class="s2">&quot;phenotype&quot;</span><span class="p">:</span> <span class="p">{</span>
-</span><span id="init-380"><a href="#init-380"><span class="linenos">380</span></a>            <span class="s2">&quot;version&quot;</span><span class="p">:</span> <span class="s2">&quot;0.0.0&quot;</span><span class="p">,</span>
-</span><span id="init-381"><a href="#init-381"><span class="linenos">381</span></a>            <span class="s2">&quot;omop&quot;</span><span class="p">:</span> <span class="p">{</span>
-</span><span id="init-382"><a href="#init-382"><span class="linenos">382</span></a>                <span class="s2">&quot;vocabulary_id&quot;</span><span class="p">:</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
-</span><span id="init-383"><a href="#init-383"><span class="linenos">383</span></a>                <span class="s2">&quot;vocabulary_name&quot;</span><span class="p">:</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
-</span><span id="init-384"><a href="#init-384"><span class="linenos">384</span></a>                <span class="s2">&quot;vocabulary_reference&quot;</span><span class="p">:</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
-</span><span id="init-385"><a href="#init-385"><span class="linenos">385</span></a>            <span class="p">},</span>
-</span><span id="init-386"><a href="#init-386"><span class="linenos">386</span></a>            <span class="s2">&quot;translate&quot;</span><span class="p">:</span> <span class="p">[],</span>
-</span><span id="init-387"><a href="#init-387"><span class="linenos">387</span></a>            <span class="s2">&quot;concept_sets&quot;</span><span class="p">:</span> <span class="p">[],</span>
-</span><span id="init-388"><a href="#init-388"><span class="linenos">388</span></a>        <span class="p">}</span>
-</span><span id="init-389"><a href="#init-389"><span class="linenos">389</span></a>    <span class="p">}</span>
-</span><span id="init-390"><a href="#init-390"><span class="linenos">390</span></a>
-</span><span id="init-391"><a href="#init-391"><span class="linenos">391</span></a>    <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">phen_path</span> <span class="o">/</span> <span class="n">CONFIG_FILE</span><span class="p">,</span> <span class="s2">&quot;w&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
-</span><span id="init-392"><a href="#init-392"><span class="linenos">392</span></a>        <span class="n">yaml</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span>
-</span><span id="init-393"><a href="#init-393"><span class="linenos">393</span></a>            <span class="n">config</span><span class="p">,</span>
-</span><span id="init-394"><a href="#init-394"><span class="linenos">394</span></a>            <span class="n">file</span><span class="p">,</span>
-</span><span id="init-395"><a href="#init-395"><span class="linenos">395</span></a>            <span class="n">Dumper</span><span class="o">=</span><span class="n">util</span><span class="o">.</span><span class="n">QuotedDumper</span><span class="p">,</span>
-</span><span id="init-396"><a href="#init-396"><span class="linenos">396</span></a>            <span class="n">default_flow_style</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-</span><span id="init-397"><a href="#init-397"><span class="linenos">397</span></a>            <span class="n">sort_keys</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-</span><span id="init-398"><a href="#init-398"><span class="linenos">398</span></a>            <span class="n">default_style</span><span class="o">=</span><span class="s1">&#39;&quot;&#39;</span><span class="p">,</span>
-</span><span id="init-399"><a href="#init-399"><span class="linenos">399</span></a>        <span class="p">)</span>
-</span><span id="init-400"><a href="#init-400"><span class="linenos">400</span></a>
-</span><span id="init-401"><a href="#init-401"><span class="linenos">401</span></a>    <span class="c1"># add git ignore</span>
-</span><span id="init-402"><a href="#init-402"><span class="linenos">402</span></a>    <span class="n">ignore_content</span> <span class="o">=</span> <span class="s2">&quot;&quot;&quot;# Ignore SQLite database files</span>
-</span><span id="init-403"><a href="#init-403"><span class="linenos">403</span></a><span class="s2">*.db</span>
-</span><span id="init-404"><a href="#init-404"><span class="linenos">404</span></a><span class="s2">*.sqlite3</span>
-</span><span id="init-405"><a href="#init-405"><span class="linenos">405</span></a><span class="s2"> </span>
-</span><span id="init-406"><a href="#init-406"><span class="linenos">406</span></a><span class="s2"># Ignore SQLite journal and metadata files</span>
-</span><span id="init-407"><a href="#init-407"><span class="linenos">407</span></a><span class="s2">*.db-journal</span>
-</span><span id="init-408"><a href="#init-408"><span class="linenos">408</span></a><span class="s2">*.sqlite3-journal</span>
-</span><span id="init-409"><a href="#init-409"><span class="linenos">409</span></a>
-</span><span id="init-410"><a href="#init-410"><span class="linenos">410</span></a><span class="s2"># python</span>
-</span><span id="init-411"><a href="#init-411"><span class="linenos">411</span></a><span class="s2">.ipynb_checkpoints</span>
-</span><span id="init-412"><a href="#init-412"><span class="linenos">412</span></a><span class="s2"> &quot;&quot;&quot;</span>
-</span><span id="init-413"><a href="#init-413"><span class="linenos">413</span></a>    <span class="n">ignore_path</span> <span class="o">=</span> <span class="n">phen_path</span> <span class="o">/</span> <span class="s2">&quot;.gitignore&quot;</span>
-</span><span id="init-414"><a href="#init-414"><span class="linenos">414</span></a>    <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">ignore_path</span><span class="p">,</span> <span class="s2">&quot;w&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
-</span><span id="init-415"><a href="#init-415"><span class="linenos">415</span></a>        <span class="n">file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">ignore_content</span><span class="p">)</span>
-</span><span id="init-416"><a href="#init-416"><span class="linenos">416</span></a>
-</span><span id="init-417"><a href="#init-417"><span class="linenos">417</span></a>    <span class="c1"># add to git repo and commit</span>
-</span><span id="init-418"><a href="#init-418"><span class="linenos">418</span></a>    <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">DEFAULT_PHEN_DIR_LIST</span><span class="p">:</span>
-</span><span id="init-419"><a href="#init-419"><span class="linenos">419</span></a>        <span class="n">repo</span><span class="o">.</span><span class="n">git</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">phen_path</span> <span class="o">/</span> <span class="n">d</span><span class="p">)</span>
-</span><span id="init-420"><a href="#init-420"><span class="linenos">420</span></a>    <span class="n">repo</span><span class="o">.</span><span class="n">git</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="nb">all</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="init-421"><a href="#init-421"><span class="linenos">421</span></a>    <span class="n">repo</span><span class="o">.</span><span class="n">index</span><span class="o">.</span><span class="n">commit</span><span class="p">(</span><span class="s2">&quot;initialised the phen git repo.&quot;</span><span class="p">)</span>
-</span><span id="init-422"><a href="#init-422"><span class="linenos">422</span></a>
-</span><span id="init-423"><a href="#init-423"><span class="linenos">423</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Phenotype initialised successfully&quot;</span><span class="p">)</span>
-</span></pre></div>
-
-
-            <div class="docstring"><p>Initial phenotype directory as git repo with standard structure</p>
-</div>
-
-
                 </section>
                 <section id="validate">
                             <input id="validate-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
@@ -2386,117 +2220,117 @@
 
     </div>
     <a class="headerlink" href="#validate"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="validate-426"><a href="#validate-426"><span class="linenos">426</span></a><span class="k">def</span><span class="w"> </span><span class="nf">validate</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
-</span><span id="validate-427"><a href="#validate-427"><span class="linenos">427</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Validates the phenotype directory is a git repo with standard structure&quot;&quot;&quot;</span>
-</span><span id="validate-428"><a href="#validate-428"><span class="linenos">428</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Validating phenotype: </span><span class="si">{</span><span class="n">phen_dir</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="validate-429"><a href="#validate-429"><span class="linenos">429</span></a>    <span class="n">phen_path</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">)</span>
-</span><span id="validate-430"><a href="#validate-430"><span class="linenos">430</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">phen_path</span><span class="o">.</span><span class="n">is_dir</span><span class="p">():</span>
-</span><span id="validate-431"><a href="#validate-431"><span class="linenos">431</span></a>        <span class="k">raise</span> <span class="ne">NotADirectoryError</span><span class="p">(</span>
-</span><span id="validate-432"><a href="#validate-432"><span class="linenos">432</span></a>            <span class="sa">f</span><span class="s2">&quot;Error: &#39;</span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">phen_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="s2">&#39; is not a directory&quot;</span>
-</span><span id="validate-433"><a href="#validate-433"><span class="linenos">433</span></a>        <span class="p">)</span>
-</span><span id="validate-434"><a href="#validate-434"><span class="linenos">434</span></a>
-</span><span id="validate-435"><a href="#validate-435"><span class="linenos">435</span></a>    <span class="n">config_path</span> <span class="o">=</span> <span class="n">phen_path</span> <span class="o">/</span> <span class="n">CONFIG_FILE</span>
-</span><span id="validate-436"><a href="#validate-436"><span class="linenos">436</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">config_path</span><span class="o">.</span><span class="n">is_file</span><span class="p">():</span>
-</span><span id="validate-437"><a href="#validate-437"><span class="linenos">437</span></a>        <span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span>
-</span><span id="validate-438"><a href="#validate-438"><span class="linenos">438</span></a>            <span class="sa">f</span><span class="s2">&quot;Error: phen configuration file &#39;</span><span class="si">{</span><span class="n">config_path</span><span class="si">}</span><span class="s2">&#39; does not exist.&quot;</span>
-</span><span id="validate-439"><a href="#validate-439"><span class="linenos">439</span></a>        <span class="p">)</span>
-</span><span id="validate-440"><a href="#validate-440"><span class="linenos">440</span></a>
-</span><span id="validate-441"><a href="#validate-441"><span class="linenos">441</span></a>    <span class="n">concepts_path</span> <span class="o">=</span> <span class="n">phen_path</span> <span class="o">/</span> <span class="n">CONCEPTS_DIR</span>
-</span><span id="validate-442"><a href="#validate-442"><span class="linenos">442</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">concepts_path</span><span class="o">.</span><span class="n">is_dir</span><span class="p">():</span>
-</span><span id="validate-443"><a href="#validate-443"><span class="linenos">443</span></a>        <span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span>
-</span><span id="validate-444"><a href="#validate-444"><span class="linenos">444</span></a>            <span class="sa">f</span><span class="s2">&quot;Error: source concepts directory </span><span class="si">{</span><span class="n">concepts_path</span><span class="si">}</span><span class="s2"> does not exist.&quot;</span>
-</span><span id="validate-445"><a href="#validate-445"><span class="linenos">445</span></a>        <span class="p">)</span>
-</span><span id="validate-446"><a href="#validate-446"><span class="linenos">446</span></a>
-</span><span id="validate-447"><a href="#validate-447"><span class="linenos">447</span></a>    <span class="c1"># Calidate the directory is a git repo</span>
-</span><span id="validate-448"><a href="#validate-448"><span class="linenos">448</span></a>    <span class="k">try</span><span class="p">:</span>
-</span><span id="validate-449"><a href="#validate-449"><span class="linenos">449</span></a>        <span class="n">git</span><span class="o">.</span><span class="n">Repo</span><span class="p">(</span><span class="n">phen_path</span><span class="p">)</span>
-</span><span id="validate-450"><a href="#validate-450"><span class="linenos">450</span></a>    <span class="k">except</span> <span class="p">(</span><span class="n">git</span><span class="o">.</span><span class="n">exc</span><span class="o">.</span><span class="n">InvalidGitRepositoryError</span><span class="p">,</span> <span class="n">git</span><span class="o">.</span><span class="n">exc</span><span class="o">.</span><span class="n">NoSuchPathError</span><span class="p">):</span>
-</span><span id="validate-451"><a href="#validate-451"><span class="linenos">451</span></a>        <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Phen directory </span><span class="si">{</span><span class="n">phen_path</span><span class="si">}</span><span class="s2"> is not a git repo&quot;</span><span class="p">)</span>
-</span><span id="validate-452"><a href="#validate-452"><span class="linenos">452</span></a>
-</span><span id="validate-453"><a href="#validate-453"><span class="linenos">453</span></a>    <span class="c1"># Load configuration File</span>
-</span><span id="validate-454"><a href="#validate-454"><span class="linenos">454</span></a>    <span class="k">if</span> <span class="n">config_path</span><span class="o">.</span><span class="n">suffix</span> <span class="o">==</span> <span class="s2">&quot;.yml&quot;</span><span class="p">:</span>
-</span><span id="validate-455"><a href="#validate-455"><span class="linenos">455</span></a>        <span class="k">try</span><span class="p">:</span>
-</span><span id="validate-456"><a href="#validate-456"><span class="linenos">456</span></a>            <span class="k">with</span> <span class="n">config_path</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="s2">&quot;r&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
-</span><span id="validate-457"><a href="#validate-457"><span class="linenos">457</span></a>                <span class="n">phenotype</span> <span class="o">=</span> <span class="n">yaml</span><span class="o">.</span><span class="n">safe_load</span><span class="p">(</span><span class="n">file</span><span class="p">)</span>
-</span><span id="validate-458"><a href="#validate-458"><span class="linenos">458</span></a>
-</span><span id="validate-459"><a href="#validate-459"><span class="linenos">459</span></a>            <span class="n">validator</span> <span class="o">=</span> <span class="n">Validator</span><span class="p">(</span><span class="n">CONFIG_SCHEMA</span><span class="p">)</span>
-</span><span id="validate-460"><a href="#validate-460"><span class="linenos">460</span></a>            <span class="k">if</span> <span class="n">validator</span><span class="o">.</span><span class="n">validate</span><span class="p">(</span><span class="n">phenotype</span><span class="p">):</span>
-</span><span id="validate-461"><a href="#validate-461"><span class="linenos">461</span></a>                <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">&quot;YAML structure is valid.&quot;</span><span class="p">)</span>
-</span><span id="validate-462"><a href="#validate-462"><span class="linenos">462</span></a>            <span class="k">else</span><span class="p">:</span>
-</span><span id="validate-463"><a href="#validate-463"><span class="linenos">463</span></a>                <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;YAML structure validation failed: </span><span class="si">{</span><span class="n">validator</span><span class="o">.</span><span class="n">errors</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="validate-464"><a href="#validate-464"><span class="linenos">464</span></a>                <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;YAML structure validation failed: </span><span class="si">{</span><span class="n">validator</span><span class="o">.</span><span class="n">errors</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="validate-465"><a href="#validate-465"><span class="linenos">465</span></a>        <span class="k">except</span> <span class="n">yaml</span><span class="o">.</span><span class="n">YAMLError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
-</span><span id="validate-466"><a href="#validate-466"><span class="linenos">466</span></a>            <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;YAML syntax error: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="validate-467"><a href="#validate-467"><span class="linenos">467</span></a>            <span class="k">raise</span> <span class="n">e</span>
-</span><span id="validate-468"><a href="#validate-468"><span class="linenos">468</span></a>    <span class="k">else</span><span class="p">:</span>
-</span><span id="validate-469"><a href="#validate-469"><span class="linenos">469</span></a>        <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span>
-</span><span id="validate-470"><a href="#validate-470"><span class="linenos">470</span></a>            <span class="sa">f</span><span class="s2">&quot;Unsupported configuration filetype: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">config_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="validate-471"><a href="#validate-471"><span class="linenos">471</span></a>        <span class="p">)</span>
-</span><span id="validate-472"><a href="#validate-472"><span class="linenos">472</span></a>
-</span><span id="validate-473"><a href="#validate-473"><span class="linenos">473</span></a>    <span class="c1"># initiatise</span>
-</span><span id="validate-474"><a href="#validate-474"><span class="linenos">474</span></a>    <span class="n">validation_errors</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="validate-475"><a href="#validate-475"><span class="linenos">475</span></a>    <span class="n">phenotype</span> <span class="o">=</span> <span class="n">phenotype</span><span class="p">[</span><span class="s2">&quot;phenotype&quot;</span><span class="p">]</span>
-</span><span id="validate-476"><a href="#validate-476"><span class="linenos">476</span></a>    <span class="n">code_types</span> <span class="o">=</span> <span class="n">parse</span><span class="o">.</span><span class="n">CodeTypeParser</span><span class="p">()</span><span class="o">.</span><span class="n">code_types</span>
-</span><span id="validate-477"><a href="#validate-477"><span class="linenos">477</span></a>
-</span><span id="validate-478"><a href="#validate-478"><span class="linenos">478</span></a>    <span class="c1"># check the version number is of the format vn.n.n</span>
-</span><span id="validate-479"><a href="#validate-479"><span class="linenos">479</span></a>    <span class="n">match</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;(\d+\.\d+\.\d+)&quot;</span><span class="p">,</span> <span class="n">phenotype</span><span class="p">[</span><span class="s2">&quot;version&quot;</span><span class="p">])</span>
-</span><span id="validate-480"><a href="#validate-480"><span class="linenos">480</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">match</span><span class="p">:</span>
-</span><span id="validate-481"><a href="#validate-481"><span class="linenos">481</span></a>        <span class="n">validation_errors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="validate-482"><a href="#validate-482"><span class="linenos">482</span></a>            <span class="sa">f</span><span class="s2">&quot;Invalid version format in configuration file: </span><span class="si">{</span><span class="n">phenotype</span><span class="p">[</span><span class="s1">&#39;version&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="validate-483"><a href="#validate-483"><span class="linenos">483</span></a>        <span class="p">)</span>
-</span><span id="validate-484"><a href="#validate-484"><span class="linenos">484</span></a>
-</span><span id="validate-485"><a href="#validate-485"><span class="linenos">485</span></a>    <span class="c1"># create a list of all the concept set names defined in the concept set configuration</span>
-</span><span id="validate-486"><a href="#validate-486"><span class="linenos">486</span></a>    <span class="n">concept_set_names</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="validate-487"><a href="#validate-487"><span class="linenos">487</span></a>    <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">phenotype</span><span class="p">[</span><span class="s2">&quot;concept_sets&quot;</span><span class="p">]:</span>
-</span><span id="validate-488"><a href="#validate-488"><span class="linenos">488</span></a>        <span class="k">if</span> <span class="n">item</span><span class="p">[</span><span class="s2">&quot;name&quot;</span><span class="p">]</span> <span class="ow">in</span> <span class="n">concept_set_names</span><span class="p">:</span>
-</span><span id="validate-489"><a href="#validate-489"><span class="linenos">489</span></a>            <span class="n">validation_errors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="validate-490"><a href="#validate-490"><span class="linenos">490</span></a>                <span class="sa">f</span><span class="s2">&quot;Duplicate concept set defined in concept sets </span><span class="si">{</span><span class="n">item</span><span class="p">[</span><span class="s1">&#39;name&#39;</span><span class="p">]</span><span class="w"> </span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="validate-491"><a href="#validate-491"><span class="linenos">491</span></a>            <span class="p">)</span>
-</span><span id="validate-492"><a href="#validate-492"><span class="linenos">492</span></a>        <span class="k">else</span><span class="p">:</span>
-</span><span id="validate-493"><a href="#validate-493"><span class="linenos">493</span></a>            <span class="n">concept_set_names</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">item</span><span class="p">[</span><span class="s2">&quot;name&quot;</span><span class="p">])</span>
-</span><span id="validate-494"><a href="#validate-494"><span class="linenos">494</span></a>
-</span><span id="validate-495"><a href="#validate-495"><span class="linenos">495</span></a>    <span class="c1"># check codes definition</span>
-</span><span id="validate-496"><a href="#validate-496"><span class="linenos">496</span></a>    <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">phenotype</span><span class="p">[</span><span class="s2">&quot;concept_sets&quot;</span><span class="p">]:</span>
-</span><span id="validate-497"><a href="#validate-497"><span class="linenos">497</span></a>        <span class="c1"># check concepte code file exists</span>
-</span><span id="validate-498"><a href="#validate-498"><span class="linenos">498</span></a>        <span class="n">concept_code_file_path</span> <span class="o">=</span> <span class="n">concepts_path</span> <span class="o">/</span> <span class="n">item</span><span class="p">[</span><span class="s2">&quot;file&quot;</span><span class="p">][</span><span class="s2">&quot;path&quot;</span><span class="p">]</span>
-</span><span id="validate-499"><a href="#validate-499"><span class="linenos">499</span></a>        <span class="k">if</span> <span class="ow">not</span> <span class="n">concept_code_file_path</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
-</span><span id="validate-500"><a href="#validate-500"><span class="linenos">500</span></a>            <span class="n">validation_errors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="validate-501"><a href="#validate-501"><span class="linenos">501</span></a>                <span class="sa">f</span><span class="s2">&quot;Coding file </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">concept_code_file_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="s2"> does not exist&quot;</span>
-</span><span id="validate-502"><a href="#validate-502"><span class="linenos">502</span></a>            <span class="p">)</span>
-</span><span id="validate-503"><a href="#validate-503"><span class="linenos">503</span></a>
-</span><span id="validate-504"><a href="#validate-504"><span class="linenos">504</span></a>        <span class="c1"># check concepte code file is not empty</span>
-</span><span id="validate-505"><a href="#validate-505"><span class="linenos">505</span></a>        <span class="k">if</span> <span class="n">concept_code_file_path</span><span class="o">.</span><span class="n">stat</span><span class="p">()</span><span class="o">.</span><span class="n">st_size</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
-</span><span id="validate-506"><a href="#validate-506"><span class="linenos">506</span></a>            <span class="n">validation_errors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="validate-507"><a href="#validate-507"><span class="linenos">507</span></a>                <span class="sa">f</span><span class="s2">&quot;Coding file </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">concept_code_file_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="s2"> is an empty file&quot;</span>
-</span><span id="validate-508"><a href="#validate-508"><span class="linenos">508</span></a>            <span class="p">)</span>
-</span><span id="validate-509"><a href="#validate-509"><span class="linenos">509</span></a>
-</span><span id="validate-510"><a href="#validate-510"><span class="linenos">510</span></a>        <span class="c1"># check code file type is supported</span>
-</span><span id="validate-511"><a href="#validate-511"><span class="linenos">511</span></a>        <span class="k">if</span> <span class="n">concept_code_file_path</span><span class="o">.</span><span class="n">suffix</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">CODE_FILE_TYPES</span><span class="p">:</span>
-</span><span id="validate-512"><a href="#validate-512"><span class="linenos">512</span></a>            <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
-</span><span id="validate-513"><a href="#validate-513"><span class="linenos">513</span></a>                <span class="sa">f</span><span class="s2">&quot;Unsupported filetype </span><span class="si">{</span><span class="n">concept_code_file_path</span><span class="o">.</span><span class="n">suffix</span><span class="si">}</span><span class="s2">, only support csv, xlsx, xls code file types&quot;</span>
-</span><span id="validate-514"><a href="#validate-514"><span class="linenos">514</span></a>            <span class="p">)</span>
-</span><span id="validate-515"><a href="#validate-515"><span class="linenos">515</span></a>
-</span><span id="validate-516"><a href="#validate-516"><span class="linenos">516</span></a>        <span class="c1"># check columns specified are a supported medical coding type</span>
-</span><span id="validate-517"><a href="#validate-517"><span class="linenos">517</span></a>        <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">item</span><span class="p">[</span><span class="s2">&quot;file&quot;</span><span class="p">][</span><span class="s2">&quot;columns&quot;</span><span class="p">]:</span>
-</span><span id="validate-518"><a href="#validate-518"><span class="linenos">518</span></a>            <span class="k">if</span> <span class="n">column</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">code_types</span><span class="p">:</span>
-</span><span id="validate-519"><a href="#validate-519"><span class="linenos">519</span></a>                <span class="n">validation_errors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
-</span><span id="validate-520"><a href="#validate-520"><span class="linenos">520</span></a>                    <span class="sa">f</span><span class="s2">&quot;Column type </span><span class="si">{</span><span class="n">column</span><span class="si">}</span><span class="s2"> for file </span><span class="si">{</span><span class="n">concept_code_file_path</span><span class="si">}</span><span class="s2"> is not supported&quot;</span>
-</span><span id="validate-521"><a href="#validate-521"><span class="linenos">521</span></a>                <span class="p">)</span>
-</span><span id="validate-522"><a href="#validate-522"><span class="linenos">522</span></a>
-</span><span id="validate-523"><a href="#validate-523"><span class="linenos">523</span></a>        <span class="c1"># check the actions are supported</span>
-</span><span id="validate-524"><a href="#validate-524"><span class="linenos">524</span></a>        <span class="k">if</span> <span class="s2">&quot;actions&quot;</span> <span class="ow">in</span> <span class="n">item</span><span class="p">[</span><span class="s2">&quot;file&quot;</span><span class="p">]:</span>
-</span><span id="validate-525"><a href="#validate-525"><span class="linenos">525</span></a>            <span class="k">for</span> <span class="n">action</span> <span class="ow">in</span> <span class="n">item</span><span class="p">[</span><span class="s2">&quot;file&quot;</span><span class="p">][</span><span class="s2">&quot;actions&quot;</span><span class="p">]:</span>
-</span><span id="validate-526"><a href="#validate-526"><span class="linenos">526</span></a>                <span class="k">if</span> <span class="n">action</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">COL_ACTIONS</span><span class="p">:</span>
-</span><span id="validate-527"><a href="#validate-527"><span class="linenos">527</span></a>                    <span class="n">validation_errors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Action </span><span class="si">{</span><span class="n">action</span><span class="si">}</span><span class="s2"> is not supported&quot;</span><span class="p">)</span>
-</span><span id="validate-528"><a href="#validate-528"><span class="linenos">528</span></a>
-</span><span id="validate-529"><a href="#validate-529"><span class="linenos">529</span></a>    <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">validation_errors</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
-</span><span id="validate-530"><a href="#validate-530"><span class="linenos">530</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">validation_errors</span><span class="p">)</span>
-</span><span id="validate-531"><a href="#validate-531"><span class="linenos">531</span></a>        <span class="k">raise</span> <span class="n">PhenValidationException</span><span class="p">(</span>
-</span><span id="validate-532"><a href="#validate-532"><span class="linenos">532</span></a>            <span class="sa">f</span><span class="s2">&quot;Configuration file </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">config_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="s2"> failed validation&quot;</span><span class="p">,</span>
-</span><span id="validate-533"><a href="#validate-533"><span class="linenos">533</span></a>            <span class="n">validation_errors</span><span class="p">,</span>
-</span><span id="validate-534"><a href="#validate-534"><span class="linenos">534</span></a>        <span class="p">)</span>
-</span><span id="validate-535"><a href="#validate-535"><span class="linenos">535</span></a>
-</span><span id="validate-536"><a href="#validate-536"><span class="linenos">536</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Phenotype validated successfully&quot;</span><span class="p">)</span>
+            <div class="pdoc-code codehilite"><pre><span></span><span id="validate-453"><a href="#validate-453"><span class="linenos">453</span></a><span class="k">def</span><span class="w"> </span><span class="nf">validate</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
+</span><span id="validate-454"><a href="#validate-454"><span class="linenos">454</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Validates the phenotype directory is a git repo with standard structure&quot;&quot;&quot;</span>
+</span><span id="validate-455"><a href="#validate-455"><span class="linenos">455</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Validating phenotype: </span><span class="si">{</span><span class="n">phen_dir</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="validate-456"><a href="#validate-456"><span class="linenos">456</span></a>    <span class="n">phen_path</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">)</span>
+</span><span id="validate-457"><a href="#validate-457"><span class="linenos">457</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">phen_path</span><span class="o">.</span><span class="n">is_dir</span><span class="p">():</span>
+</span><span id="validate-458"><a href="#validate-458"><span class="linenos">458</span></a>        <span class="k">raise</span> <span class="ne">NotADirectoryError</span><span class="p">(</span>
+</span><span id="validate-459"><a href="#validate-459"><span class="linenos">459</span></a>            <span class="sa">f</span><span class="s2">&quot;Error: &#39;</span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">phen_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="s2">&#39; is not a directory&quot;</span>
+</span><span id="validate-460"><a href="#validate-460"><span class="linenos">460</span></a>        <span class="p">)</span>
+</span><span id="validate-461"><a href="#validate-461"><span class="linenos">461</span></a>
+</span><span id="validate-462"><a href="#validate-462"><span class="linenos">462</span></a>    <span class="n">config_path</span> <span class="o">=</span> <span class="n">phen_path</span> <span class="o">/</span> <span class="n">CONFIG_FILE</span>
+</span><span id="validate-463"><a href="#validate-463"><span class="linenos">463</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">config_path</span><span class="o">.</span><span class="n">is_file</span><span class="p">():</span>
+</span><span id="validate-464"><a href="#validate-464"><span class="linenos">464</span></a>        <span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span>
+</span><span id="validate-465"><a href="#validate-465"><span class="linenos">465</span></a>            <span class="sa">f</span><span class="s2">&quot;Error: phen configuration file &#39;</span><span class="si">{</span><span class="n">config_path</span><span class="si">}</span><span class="s2">&#39; does not exist.&quot;</span>
+</span><span id="validate-466"><a href="#validate-466"><span class="linenos">466</span></a>        <span class="p">)</span>
+</span><span id="validate-467"><a href="#validate-467"><span class="linenos">467</span></a>
+</span><span id="validate-468"><a href="#validate-468"><span class="linenos">468</span></a>    <span class="n">concepts_path</span> <span class="o">=</span> <span class="n">phen_path</span> <span class="o">/</span> <span class="n">CONCEPTS_DIR</span>
+</span><span id="validate-469"><a href="#validate-469"><span class="linenos">469</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">concepts_path</span><span class="o">.</span><span class="n">is_dir</span><span class="p">():</span>
+</span><span id="validate-470"><a href="#validate-470"><span class="linenos">470</span></a>        <span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span>
+</span><span id="validate-471"><a href="#validate-471"><span class="linenos">471</span></a>            <span class="sa">f</span><span class="s2">&quot;Error: source concepts directory </span><span class="si">{</span><span class="n">concepts_path</span><span class="si">}</span><span class="s2"> does not exist.&quot;</span>
+</span><span id="validate-472"><a href="#validate-472"><span class="linenos">472</span></a>        <span class="p">)</span>
+</span><span id="validate-473"><a href="#validate-473"><span class="linenos">473</span></a>
+</span><span id="validate-474"><a href="#validate-474"><span class="linenos">474</span></a>    <span class="c1"># Calidate the directory is a git repo</span>
+</span><span id="validate-475"><a href="#validate-475"><span class="linenos">475</span></a>    <span class="k">try</span><span class="p">:</span>
+</span><span id="validate-476"><a href="#validate-476"><span class="linenos">476</span></a>        <span class="n">git</span><span class="o">.</span><span class="n">Repo</span><span class="p">(</span><span class="n">phen_path</span><span class="p">)</span>
+</span><span id="validate-477"><a href="#validate-477"><span class="linenos">477</span></a>    <span class="k">except</span> <span class="p">(</span><span class="n">git</span><span class="o">.</span><span class="n">exc</span><span class="o">.</span><span class="n">InvalidGitRepositoryError</span><span class="p">,</span> <span class="n">git</span><span class="o">.</span><span class="n">exc</span><span class="o">.</span><span class="n">NoSuchPathError</span><span class="p">):</span>
+</span><span id="validate-478"><a href="#validate-478"><span class="linenos">478</span></a>        <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Phen directory </span><span class="si">{</span><span class="n">phen_path</span><span class="si">}</span><span class="s2"> is not a git repo&quot;</span><span class="p">)</span>
+</span><span id="validate-479"><a href="#validate-479"><span class="linenos">479</span></a>
+</span><span id="validate-480"><a href="#validate-480"><span class="linenos">480</span></a>    <span class="c1"># Load configuration File</span>
+</span><span id="validate-481"><a href="#validate-481"><span class="linenos">481</span></a>    <span class="k">if</span> <span class="n">config_path</span><span class="o">.</span><span class="n">suffix</span> <span class="o">==</span> <span class="s2">&quot;.yml&quot;</span><span class="p">:</span>
+</span><span id="validate-482"><a href="#validate-482"><span class="linenos">482</span></a>        <span class="k">try</span><span class="p">:</span>
+</span><span id="validate-483"><a href="#validate-483"><span class="linenos">483</span></a>            <span class="k">with</span> <span class="n">config_path</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="s2">&quot;r&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
+</span><span id="validate-484"><a href="#validate-484"><span class="linenos">484</span></a>                <span class="n">phenotype</span> <span class="o">=</span> <span class="n">yaml</span><span class="o">.</span><span class="n">safe_load</span><span class="p">(</span><span class="n">file</span><span class="p">)</span>
+</span><span id="validate-485"><a href="#validate-485"><span class="linenos">485</span></a>
+</span><span id="validate-486"><a href="#validate-486"><span class="linenos">486</span></a>            <span class="n">validator</span> <span class="o">=</span> <span class="n">Validator</span><span class="p">(</span><span class="n">CONFIG_SCHEMA</span><span class="p">)</span>
+</span><span id="validate-487"><a href="#validate-487"><span class="linenos">487</span></a>            <span class="k">if</span> <span class="n">validator</span><span class="o">.</span><span class="n">validate</span><span class="p">(</span><span class="n">phenotype</span><span class="p">):</span>
+</span><span id="validate-488"><a href="#validate-488"><span class="linenos">488</span></a>                <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">&quot;YAML structure is valid.&quot;</span><span class="p">)</span>
+</span><span id="validate-489"><a href="#validate-489"><span class="linenos">489</span></a>            <span class="k">else</span><span class="p">:</span>
+</span><span id="validate-490"><a href="#validate-490"><span class="linenos">490</span></a>                <span class="n">_logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;YAML structure validation failed: </span><span class="si">{</span><span class="n">validator</span><span class="o">.</span><span class="n">errors</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="validate-491"><a href="#validate-491"><span class="linenos">491</span></a>                <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;YAML structure validation failed: </span><span class="si">{</span><span class="n">validator</span><span class="o">.</span><span class="n">errors</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="validate-492"><a href="#validate-492"><span class="linenos">492</span></a>        <span class="k">except</span> <span class="n">yaml</span><span class="o">.</span><span class="n">YAMLError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
+</span><span id="validate-493"><a href="#validate-493"><span class="linenos">493</span></a>            <span class="n">_logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;YAML syntax error: </span><span class="si">{</span><span class="n">e</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="validate-494"><a href="#validate-494"><span class="linenos">494</span></a>            <span class="k">raise</span> <span class="n">e</span>
+</span><span id="validate-495"><a href="#validate-495"><span class="linenos">495</span></a>    <span class="k">else</span><span class="p">:</span>
+</span><span id="validate-496"><a href="#validate-496"><span class="linenos">496</span></a>        <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span>
+</span><span id="validate-497"><a href="#validate-497"><span class="linenos">497</span></a>            <span class="sa">f</span><span class="s2">&quot;Unsupported configuration filetype: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">config_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="validate-498"><a href="#validate-498"><span class="linenos">498</span></a>        <span class="p">)</span>
+</span><span id="validate-499"><a href="#validate-499"><span class="linenos">499</span></a>
+</span><span id="validate-500"><a href="#validate-500"><span class="linenos">500</span></a>    <span class="c1"># initiatise</span>
+</span><span id="validate-501"><a href="#validate-501"><span class="linenos">501</span></a>    <span class="n">validation_errors</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="validate-502"><a href="#validate-502"><span class="linenos">502</span></a>    <span class="n">phenotype</span> <span class="o">=</span> <span class="n">phenotype</span><span class="p">[</span><span class="s2">&quot;phenotype&quot;</span><span class="p">]</span>
+</span><span id="validate-503"><a href="#validate-503"><span class="linenos">503</span></a>    <span class="n">code_types</span> <span class="o">=</span> <span class="n">parse</span><span class="o">.</span><span class="n">CodeTypeParser</span><span class="p">()</span><span class="o">.</span><span class="n">code_types</span>
+</span><span id="validate-504"><a href="#validate-504"><span class="linenos">504</span></a>
+</span><span id="validate-505"><a href="#validate-505"><span class="linenos">505</span></a>    <span class="c1"># check the version number is of the format vn.n.n</span>
+</span><span id="validate-506"><a href="#validate-506"><span class="linenos">506</span></a>    <span class="n">match</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;(\d+\.\d+\.\d+)&quot;</span><span class="p">,</span> <span class="n">phenotype</span><span class="p">[</span><span class="s2">&quot;version&quot;</span><span class="p">])</span>
+</span><span id="validate-507"><a href="#validate-507"><span class="linenos">507</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">match</span><span class="p">:</span>
+</span><span id="validate-508"><a href="#validate-508"><span class="linenos">508</span></a>        <span class="n">validation_errors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="validate-509"><a href="#validate-509"><span class="linenos">509</span></a>            <span class="sa">f</span><span class="s2">&quot;Invalid version format in configuration file: </span><span class="si">{</span><span class="n">phenotype</span><span class="p">[</span><span class="s1">&#39;version&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="validate-510"><a href="#validate-510"><span class="linenos">510</span></a>        <span class="p">)</span>
+</span><span id="validate-511"><a href="#validate-511"><span class="linenos">511</span></a>
+</span><span id="validate-512"><a href="#validate-512"><span class="linenos">512</span></a>    <span class="c1"># create a list of all the concept set names defined in the concept set configuration</span>
+</span><span id="validate-513"><a href="#validate-513"><span class="linenos">513</span></a>    <span class="n">concept_set_names</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="validate-514"><a href="#validate-514"><span class="linenos">514</span></a>    <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">phenotype</span><span class="p">[</span><span class="s2">&quot;concept_sets&quot;</span><span class="p">]:</span>
+</span><span id="validate-515"><a href="#validate-515"><span class="linenos">515</span></a>        <span class="k">if</span> <span class="n">item</span><span class="p">[</span><span class="s2">&quot;name&quot;</span><span class="p">]</span> <span class="ow">in</span> <span class="n">concept_set_names</span><span class="p">:</span>
+</span><span id="validate-516"><a href="#validate-516"><span class="linenos">516</span></a>            <span class="n">validation_errors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="validate-517"><a href="#validate-517"><span class="linenos">517</span></a>                <span class="sa">f</span><span class="s2">&quot;Duplicate concept set defined in concept sets </span><span class="si">{</span><span class="n">item</span><span class="p">[</span><span class="s1">&#39;name&#39;</span><span class="p">]</span><span class="w"> </span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="validate-518"><a href="#validate-518"><span class="linenos">518</span></a>            <span class="p">)</span>
+</span><span id="validate-519"><a href="#validate-519"><span class="linenos">519</span></a>        <span class="k">else</span><span class="p">:</span>
+</span><span id="validate-520"><a href="#validate-520"><span class="linenos">520</span></a>            <span class="n">concept_set_names</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">item</span><span class="p">[</span><span class="s2">&quot;name&quot;</span><span class="p">])</span>
+</span><span id="validate-521"><a href="#validate-521"><span class="linenos">521</span></a>
+</span><span id="validate-522"><a href="#validate-522"><span class="linenos">522</span></a>    <span class="c1"># check codes definition</span>
+</span><span id="validate-523"><a href="#validate-523"><span class="linenos">523</span></a>    <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">phenotype</span><span class="p">[</span><span class="s2">&quot;concept_sets&quot;</span><span class="p">]:</span>
+</span><span id="validate-524"><a href="#validate-524"><span class="linenos">524</span></a>        <span class="c1"># check concepte code file exists</span>
+</span><span id="validate-525"><a href="#validate-525"><span class="linenos">525</span></a>        <span class="n">concept_code_file_path</span> <span class="o">=</span> <span class="n">concepts_path</span> <span class="o">/</span> <span class="n">item</span><span class="p">[</span><span class="s2">&quot;file&quot;</span><span class="p">][</span><span class="s2">&quot;path&quot;</span><span class="p">]</span>
+</span><span id="validate-526"><a href="#validate-526"><span class="linenos">526</span></a>        <span class="k">if</span> <span class="ow">not</span> <span class="n">concept_code_file_path</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
+</span><span id="validate-527"><a href="#validate-527"><span class="linenos">527</span></a>            <span class="n">validation_errors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="validate-528"><a href="#validate-528"><span class="linenos">528</span></a>                <span class="sa">f</span><span class="s2">&quot;Coding file </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">concept_code_file_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="s2"> does not exist&quot;</span>
+</span><span id="validate-529"><a href="#validate-529"><span class="linenos">529</span></a>            <span class="p">)</span>
+</span><span id="validate-530"><a href="#validate-530"><span class="linenos">530</span></a>
+</span><span id="validate-531"><a href="#validate-531"><span class="linenos">531</span></a>        <span class="c1"># check concepte code file is not empty</span>
+</span><span id="validate-532"><a href="#validate-532"><span class="linenos">532</span></a>        <span class="k">if</span> <span class="n">concept_code_file_path</span><span class="o">.</span><span class="n">stat</span><span class="p">()</span><span class="o">.</span><span class="n">st_size</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
+</span><span id="validate-533"><a href="#validate-533"><span class="linenos">533</span></a>            <span class="n">validation_errors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="validate-534"><a href="#validate-534"><span class="linenos">534</span></a>                <span class="sa">f</span><span class="s2">&quot;Coding file </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">concept_code_file_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="s2"> is an empty file&quot;</span>
+</span><span id="validate-535"><a href="#validate-535"><span class="linenos">535</span></a>            <span class="p">)</span>
+</span><span id="validate-536"><a href="#validate-536"><span class="linenos">536</span></a>
+</span><span id="validate-537"><a href="#validate-537"><span class="linenos">537</span></a>        <span class="c1"># check code file type is supported</span>
+</span><span id="validate-538"><a href="#validate-538"><span class="linenos">538</span></a>        <span class="k">if</span> <span class="n">concept_code_file_path</span><span class="o">.</span><span class="n">suffix</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">CODE_FILE_TYPES</span><span class="p">:</span>
+</span><span id="validate-539"><a href="#validate-539"><span class="linenos">539</span></a>            <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
+</span><span id="validate-540"><a href="#validate-540"><span class="linenos">540</span></a>                <span class="sa">f</span><span class="s2">&quot;Unsupported filetype </span><span class="si">{</span><span class="n">concept_code_file_path</span><span class="o">.</span><span class="n">suffix</span><span class="si">}</span><span class="s2">, only support csv, xlsx, xls code file types&quot;</span>
+</span><span id="validate-541"><a href="#validate-541"><span class="linenos">541</span></a>            <span class="p">)</span>
+</span><span id="validate-542"><a href="#validate-542"><span class="linenos">542</span></a>
+</span><span id="validate-543"><a href="#validate-543"><span class="linenos">543</span></a>        <span class="c1"># check columns specified are a supported medical coding type</span>
+</span><span id="validate-544"><a href="#validate-544"><span class="linenos">544</span></a>        <span class="k">for</span> <span class="n">column</span> <span class="ow">in</span> <span class="n">item</span><span class="p">[</span><span class="s2">&quot;file&quot;</span><span class="p">][</span><span class="s2">&quot;columns&quot;</span><span class="p">]:</span>
+</span><span id="validate-545"><a href="#validate-545"><span class="linenos">545</span></a>            <span class="k">if</span> <span class="n">column</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">code_types</span><span class="p">:</span>
+</span><span id="validate-546"><a href="#validate-546"><span class="linenos">546</span></a>                <span class="n">validation_errors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
+</span><span id="validate-547"><a href="#validate-547"><span class="linenos">547</span></a>                    <span class="sa">f</span><span class="s2">&quot;Column type </span><span class="si">{</span><span class="n">column</span><span class="si">}</span><span class="s2"> for file </span><span class="si">{</span><span class="n">concept_code_file_path</span><span class="si">}</span><span class="s2"> is not supported&quot;</span>
+</span><span id="validate-548"><a href="#validate-548"><span class="linenos">548</span></a>                <span class="p">)</span>
+</span><span id="validate-549"><a href="#validate-549"><span class="linenos">549</span></a>
+</span><span id="validate-550"><a href="#validate-550"><span class="linenos">550</span></a>        <span class="c1"># check the actions are supported</span>
+</span><span id="validate-551"><a href="#validate-551"><span class="linenos">551</span></a>        <span class="k">if</span> <span class="s2">&quot;actions&quot;</span> <span class="ow">in</span> <span class="n">item</span><span class="p">[</span><span class="s2">&quot;file&quot;</span><span class="p">]:</span>
+</span><span id="validate-552"><a href="#validate-552"><span class="linenos">552</span></a>            <span class="k">for</span> <span class="n">action</span> <span class="ow">in</span> <span class="n">item</span><span class="p">[</span><span class="s2">&quot;file&quot;</span><span class="p">][</span><span class="s2">&quot;actions&quot;</span><span class="p">]:</span>
+</span><span id="validate-553"><a href="#validate-553"><span class="linenos">553</span></a>                <span class="k">if</span> <span class="n">action</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">COL_ACTIONS</span><span class="p">:</span>
+</span><span id="validate-554"><a href="#validate-554"><span class="linenos">554</span></a>                    <span class="n">validation_errors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Action </span><span class="si">{</span><span class="n">action</span><span class="si">}</span><span class="s2"> is not supported&quot;</span><span class="p">)</span>
+</span><span id="validate-555"><a href="#validate-555"><span class="linenos">555</span></a>
+</span><span id="validate-556"><a href="#validate-556"><span class="linenos">556</span></a>    <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">validation_errors</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
+</span><span id="validate-557"><a href="#validate-557"><span class="linenos">557</span></a>        <span class="n">_logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">validation_errors</span><span class="p">)</span>
+</span><span id="validate-558"><a href="#validate-558"><span class="linenos">558</span></a>        <span class="k">raise</span> <span class="n">PhenValidationException</span><span class="p">(</span>
+</span><span id="validate-559"><a href="#validate-559"><span class="linenos">559</span></a>            <span class="sa">f</span><span class="s2">&quot;Configuration file </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">config_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="s2"> failed validation&quot;</span><span class="p">,</span>
+</span><span id="validate-560"><a href="#validate-560"><span class="linenos">560</span></a>            <span class="n">validation_errors</span><span class="p">,</span>
+</span><span id="validate-561"><a href="#validate-561"><span class="linenos">561</span></a>        <span class="p">)</span>
+</span><span id="validate-562"><a href="#validate-562"><span class="linenos">562</span></a>
+</span><span id="validate-563"><a href="#validate-563"><span class="linenos">563</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Phenotype validated successfully&quot;</span><span class="p">)</span>
 </span></pre></div>
 
 
@@ -2504,164 +2338,6 @@
 </div>
 
 
-                </section>
-                <section id="read_table_file">
-                            <input id="read_table_file-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
-<div class="attr function">
-            
-        <span class="def">def</span>
-        <span class="name">read_table_file</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">path</span><span class="p">:</span> <span class="n">pathlib</span><span class="o">.</span><span class="n">Path</span>, </span><span class="param"><span class="n">excel_sheet</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span></span><span class="return-annotation">):</span></span>
-
-                <label class="view-source-button" for="read_table_file-view-source"><span>View Source</span></label>
-
-    </div>
-    <a class="headerlink" href="#read_table_file"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="read_table_file-539"><a href="#read_table_file-539"><span class="linenos">539</span></a><span class="k">def</span><span class="w"> </span><span class="nf">read_table_file</span><span class="p">(</span><span class="n">path</span><span class="p">:</span> <span class="n">Path</span><span class="p">,</span> <span class="n">excel_sheet</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="p">):</span>
-</span><span id="read_table_file-540"><a href="#read_table_file-540"><span class="linenos">540</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="read_table_file-541"><a href="#read_table_file-541"><span class="linenos">541</span></a><span class="sd">    Load Code List File</span>
-</span><span id="read_table_file-542"><a href="#read_table_file-542"><span class="linenos">542</span></a><span class="sd">    &quot;&quot;&quot;</span>
-</span><span id="read_table_file-543"><a href="#read_table_file-543"><span class="linenos">543</span></a>
-</span><span id="read_table_file-544"><a href="#read_table_file-544"><span class="linenos">544</span></a>    <span class="n">path</span> <span class="o">=</span> <span class="n">path</span><span class="o">.</span><span class="n">resolve</span><span class="p">()</span>
-</span><span id="read_table_file-545"><a href="#read_table_file-545"><span class="linenos">545</span></a>    <span class="k">if</span> <span class="n">path</span><span class="o">.</span><span class="n">suffix</span> <span class="o">==</span> <span class="s2">&quot;.csv&quot;</span><span class="p">:</span>
-</span><span id="read_table_file-546"><a href="#read_table_file-546"><span class="linenos">546</span></a>        <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_csv</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="nb">str</span><span class="p">)</span>
-</span><span id="read_table_file-547"><a href="#read_table_file-547"><span class="linenos">547</span></a>    <span class="k">elif</span> <span class="n">path</span><span class="o">.</span><span class="n">suffix</span> <span class="o">==</span> <span class="s2">&quot;.xlsx&quot;</span> <span class="ow">or</span> <span class="n">path</span><span class="o">.</span><span class="n">suffix</span> <span class="o">==</span> <span class="s2">&quot;.xls&quot;</span><span class="p">:</span>
-</span><span id="read_table_file-548"><a href="#read_table_file-548"><span class="linenos">548</span></a>        <span class="k">if</span> <span class="n">excel_sheet</span> <span class="o">!=</span> <span class="s2">&quot;&quot;</span><span class="p">:</span>
-</span><span id="read_table_file-549"><a href="#read_table_file-549"><span class="linenos">549</span></a>            <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_excel</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">sheet_name</span><span class="o">=</span><span class="n">excel_sheet</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="nb">str</span><span class="p">)</span>
-</span><span id="read_table_file-550"><a href="#read_table_file-550"><span class="linenos">550</span></a>        <span class="k">else</span><span class="p">:</span>
-</span><span id="read_table_file-551"><a href="#read_table_file-551"><span class="linenos">551</span></a>            <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_excel</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="nb">str</span><span class="p">)</span>
-</span><span id="read_table_file-552"><a href="#read_table_file-552"><span class="linenos">552</span></a>    <span class="k">elif</span> <span class="n">path</span><span class="o">.</span><span class="n">suffix</span> <span class="o">==</span> <span class="s2">&quot;.dta&quot;</span><span class="p">:</span>
-</span><span id="read_table_file-553"><a href="#read_table_file-553"><span class="linenos">553</span></a>        <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_stata</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
-</span><span id="read_table_file-554"><a href="#read_table_file-554"><span class="linenos">554</span></a>    <span class="k">else</span><span class="p">:</span>
-</span><span id="read_table_file-555"><a href="#read_table_file-555"><span class="linenos">555</span></a>        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
-</span><span id="read_table_file-556"><a href="#read_table_file-556"><span class="linenos">556</span></a>            <span class="sa">f</span><span class="s2">&quot;Unsupported filetype </span><span class="si">{</span><span class="n">path</span><span class="o">.</span><span class="n">suffix</span><span class="si">}</span><span class="s2">, only support</span><span class="si">{</span><span class="n">CODE_FILE_TYPES</span><span class="si">}</span><span class="s2"> code file types&quot;</span>
-</span><span id="read_table_file-557"><a href="#read_table_file-557"><span class="linenos">557</span></a>        <span class="p">)</span>
-</span><span id="read_table_file-558"><a href="#read_table_file-558"><span class="linenos">558</span></a>
-</span><span id="read_table_file-559"><a href="#read_table_file-559"><span class="linenos">559</span></a>    <span class="k">return</span> <span class="n">df</span>
-</span></pre></div>
-
-
-            <div class="docstring"><p>Load Code List File</p>
-</div>
-
-
-                </section>
-                <section id="process_actions">
-                            <input id="process_actions-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
-<div class="attr function">
-            
-        <span class="def">def</span>
-        <span class="name">process_actions</span><span class="signature pdoc-code multiline">(<span class="param">	<span class="n">df</span><span class="p">:</span> <span class="n">pandas</span><span class="o">.</span><span class="n">core</span><span class="o">.</span><span class="n">frame</span><span class="o">.</span><span class="n">DataFrame</span>,</span><span class="param">	<span class="n">concept_set</span><span class="p">:</span> <span class="nb">dict</span></span><span class="return-annotation">) -> <span class="n">pandas</span><span class="o">.</span><span class="n">core</span><span class="o">.</span><span class="n">frame</span><span class="o">.</span><span class="n">DataFrame</span>:</span></span>
-
-                <label class="view-source-button" for="process_actions-view-source"><span>View Source</span></label>
-
-    </div>
-    <a class="headerlink" href="#process_actions"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="process_actions-562"><a href="#process_actions-562"><span class="linenos">562</span></a><span class="k">def</span><span class="w"> </span><span class="nf">process_actions</span><span class="p">(</span><span class="n">df</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">,</span> <span class="n">concept_set</span><span class="p">:</span> <span class="nb">dict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">:</span>
-</span><span id="process_actions-563"><a href="#process_actions-563"><span class="linenos">563</span></a>    <span class="c1"># Perform Structural Changes to file before preprocessing</span>
-</span><span id="process_actions-564"><a href="#process_actions-564"><span class="linenos">564</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">&quot;Processing file structural actions&quot;</span><span class="p">)</span>
-</span><span id="process_actions-565"><a href="#process_actions-565"><span class="linenos">565</span></a>    <span class="k">if</span> <span class="p">(</span>
-</span><span id="process_actions-566"><a href="#process_actions-566"><span class="linenos">566</span></a>        <span class="s2">&quot;actions&quot;</span> <span class="ow">in</span> <span class="n">concept_set</span><span class="p">[</span><span class="s2">&quot;file&quot;</span><span class="p">]</span>
-</span><span id="process_actions-567"><a href="#process_actions-567"><span class="linenos">567</span></a>        <span class="ow">and</span> <span class="s2">&quot;split_col&quot;</span> <span class="ow">in</span> <span class="n">concept_set</span><span class="p">[</span><span class="s2">&quot;file&quot;</span><span class="p">][</span><span class="s2">&quot;actions&quot;</span><span class="p">]</span>
-</span><span id="process_actions-568"><a href="#process_actions-568"><span class="linenos">568</span></a>        <span class="ow">and</span> <span class="s2">&quot;codes_col&quot;</span> <span class="ow">in</span> <span class="n">concept_set</span><span class="p">[</span><span class="s2">&quot;file&quot;</span><span class="p">][</span><span class="s2">&quot;actions&quot;</span><span class="p">]</span>
-</span><span id="process_actions-569"><a href="#process_actions-569"><span class="linenos">569</span></a>    <span class="p">):</span>
-</span><span id="process_actions-570"><a href="#process_actions-570"><span class="linenos">570</span></a>        <span class="n">split_col</span> <span class="o">=</span> <span class="n">concept_set</span><span class="p">[</span><span class="s2">&quot;file&quot;</span><span class="p">][</span><span class="s2">&quot;actions&quot;</span><span class="p">][</span><span class="s2">&quot;split_col&quot;</span><span class="p">]</span>
-</span><span id="process_actions-571"><a href="#process_actions-571"><span class="linenos">571</span></a>        <span class="n">codes_col</span> <span class="o">=</span> <span class="n">concept_set</span><span class="p">[</span><span class="s2">&quot;file&quot;</span><span class="p">][</span><span class="s2">&quot;actions&quot;</span><span class="p">][</span><span class="s2">&quot;codes_col&quot;</span><span class="p">]</span>
-</span><span id="process_actions-572"><a href="#process_actions-572"><span class="linenos">572</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span>
-</span><span id="process_actions-573"><a href="#process_actions-573"><span class="linenos">573</span></a>            <span class="s2">&quot;Action: Splitting&quot;</span><span class="p">,</span>
-</span><span id="process_actions-574"><a href="#process_actions-574"><span class="linenos">574</span></a>            <span class="n">split_col</span><span class="p">,</span>
-</span><span id="process_actions-575"><a href="#process_actions-575"><span class="linenos">575</span></a>            <span class="s2">&quot;column into:&quot;</span><span class="p">,</span>
-</span><span id="process_actions-576"><a href="#process_actions-576"><span class="linenos">576</span></a>            <span class="n">df</span><span class="p">[</span><span class="n">split_col</span><span class="p">]</span><span class="o">.</span><span class="n">unique</span><span class="p">(),</span>
-</span><span id="process_actions-577"><a href="#process_actions-577"><span class="linenos">577</span></a>        <span class="p">)</span>
-</span><span id="process_actions-578"><a href="#process_actions-578"><span class="linenos">578</span></a>        <span class="n">codes</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="n">codes_col</span><span class="p">]</span>
-</span><span id="process_actions-579"><a href="#process_actions-579"><span class="linenos">579</span></a>        <span class="n">oh</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">get_dummies</span><span class="p">(</span><span class="n">df</span><span class="p">[</span><span class="n">split_col</span><span class="p">],</span> <span class="n">dtype</span><span class="o">=</span><span class="nb">bool</span><span class="p">)</span>  <span class="c1"># one hot encode</span>
-</span><span id="process_actions-580"><a href="#process_actions-580"><span class="linenos">580</span></a>        <span class="n">oh</span> <span class="o">=</span> <span class="n">oh</span><span class="o">.</span><span class="n">where</span><span class="p">((</span><span class="n">oh</span> <span class="o">!=</span> <span class="kc">True</span><span class="p">),</span> <span class="n">codes</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>  <span class="c1"># fill in 1s with codes</span>
-</span><span id="process_actions-581"><a href="#process_actions-581"><span class="linenos">581</span></a>        <span class="n">oh</span><span class="p">[</span><span class="n">oh</span> <span class="o">==</span> <span class="kc">False</span><span class="p">]</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">nan</span>  <span class="c1"># replace 0s with None</span>
-</span><span id="process_actions-582"><a href="#process_actions-582"><span class="linenos">582</span></a>        <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">concat</span><span class="p">([</span><span class="n">df</span><span class="p">,</span> <span class="n">oh</span><span class="p">],</span> <span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>  <span class="c1"># merge in new columns</span>
-</span><span id="process_actions-583"><a href="#process_actions-583"><span class="linenos">583</span></a>
-</span><span id="process_actions-584"><a href="#process_actions-584"><span class="linenos">584</span></a>    <span class="k">return</span> <span class="n">df</span>
-</span></pre></div>
-
-
-    
-
-                </section>
-                <section id="preprocess_source_concepts">
-                            <input id="preprocess_source_concepts-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
-<div class="attr function">
-            
-        <span class="def">def</span>
-        <span class="name">preprocess_source_concepts</span><span class="signature pdoc-code multiline">(<span class="param">	<span class="n">df</span><span class="p">:</span> <span class="n">pandas</span><span class="o">.</span><span class="n">core</span><span class="o">.</span><span class="n">frame</span><span class="o">.</span><span class="n">DataFrame</span>,</span><span class="param">	<span class="n">concept_set</span><span class="p">:</span> <span class="nb">dict</span>,</span><span class="param">	<span class="n">code_file_path</span><span class="p">:</span> <span class="n">pathlib</span><span class="o">.</span><span class="n">Path</span></span><span class="return-annotation">) -> <span class="n">Tuple</span><span class="p">[</span><span class="n">pandas</span><span class="o">.</span><span class="n">core</span><span class="o">.</span><span class="n">frame</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">,</span> <span class="nb">list</span><span class="p">]</span>:</span></span>
-
-                <label class="view-source-button" for="preprocess_source_concepts-view-source"><span>View Source</span></label>
-
-    </div>
-    <a class="headerlink" href="#preprocess_source_concepts"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="preprocess_source_concepts-588"><a href="#preprocess_source_concepts-588"><span class="linenos">588</span></a><span class="k">def</span><span class="w"> </span><span class="nf">preprocess_source_concepts</span><span class="p">(</span>
-</span><span id="preprocess_source_concepts-589"><a href="#preprocess_source_concepts-589"><span class="linenos">589</span></a>    <span class="n">df</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">,</span> <span class="n">concept_set</span><span class="p">:</span> <span class="nb">dict</span><span class="p">,</span> <span class="n">code_file_path</span><span class="p">:</span> <span class="n">Path</span>
-</span><span id="preprocess_source_concepts-590"><a href="#preprocess_source_concepts-590"><span class="linenos">590</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Tuple</span><span class="p">[</span><span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">,</span> <span class="nb">list</span><span class="p">]:</span>
-</span><span id="preprocess_source_concepts-591"><a href="#preprocess_source_concepts-591"><span class="linenos">591</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Parses each column individually - Order and length will not be preserved!&quot;&quot;&quot;</span>
-</span><span id="preprocess_source_concepts-592"><a href="#preprocess_source_concepts-592"><span class="linenos">592</span></a>    <span class="n">out</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">([])</span>  <span class="c1"># create output df to append to</span>
-</span><span id="preprocess_source_concepts-593"><a href="#preprocess_source_concepts-593"><span class="linenos">593</span></a>    <span class="n">code_errors</span> <span class="o">=</span> <span class="p">[]</span>  <span class="c1"># list of errors from processing</span>
-</span><span id="preprocess_source_concepts-594"><a href="#preprocess_source_concepts-594"><span class="linenos">594</span></a>
-</span><span id="preprocess_source_concepts-595"><a href="#preprocess_source_concepts-595"><span class="linenos">595</span></a>    <span class="c1"># remove unnamed columns due to extra commas, missing headers, or incorrect parsing</span>
-</span><span id="preprocess_source_concepts-596"><a href="#preprocess_source_concepts-596"><span class="linenos">596</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">drop</span><span class="p">(</span><span class="n">columns</span><span class="o">=</span><span class="p">[</span><span class="n">col</span> <span class="k">for</span> <span class="n">col</span> <span class="ow">in</span> <span class="n">df</span><span class="o">.</span><span class="n">columns</span> <span class="k">if</span> <span class="s2">&quot;Unnamed&quot;</span> <span class="ow">in</span> <span class="n">col</span><span class="p">])</span>
-</span><span id="preprocess_source_concepts-597"><a href="#preprocess_source_concepts-597"><span class="linenos">597</span></a>
-</span><span id="preprocess_source_concepts-598"><a href="#preprocess_source_concepts-598"><span class="linenos">598</span></a>    <span class="c1"># Preprocess codes</span>
-</span><span id="preprocess_source_concepts-599"><a href="#preprocess_source_concepts-599"><span class="linenos">599</span></a>    <span class="n">code_types</span> <span class="o">=</span> <span class="n">parse</span><span class="o">.</span><span class="n">CodeTypeParser</span><span class="p">()</span><span class="o">.</span><span class="n">code_types</span>
-</span><span id="preprocess_source_concepts-600"><a href="#preprocess_source_concepts-600"><span class="linenos">600</span></a>    <span class="k">for</span> <span class="n">code_type</span> <span class="ow">in</span> <span class="n">concept_set</span><span class="p">[</span><span class="s2">&quot;file&quot;</span><span class="p">][</span><span class="s2">&quot;columns&quot;</span><span class="p">]:</span>
-</span><span id="preprocess_source_concepts-601"><a href="#preprocess_source_concepts-601"><span class="linenos">601</span></a>        <span class="n">parser</span> <span class="o">=</span> <span class="n">code_types</span><span class="p">[</span><span class="n">code_type</span><span class="p">]</span>
-</span><span id="preprocess_source_concepts-602"><a href="#preprocess_source_concepts-602"><span class="linenos">602</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Processing </span><span class="si">{</span><span class="n">code_type</span><span class="si">}</span><span class="s2"> codes for </span><span class="si">{</span><span class="n">code_file_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="preprocess_source_concepts-603"><a href="#preprocess_source_concepts-603"><span class="linenos">603</span></a>
-</span><span id="preprocess_source_concepts-604"><a href="#preprocess_source_concepts-604"><span class="linenos">604</span></a>        <span class="c1"># get codes by column name</span>
-</span><span id="preprocess_source_concepts-605"><a href="#preprocess_source_concepts-605"><span class="linenos">605</span></a>        <span class="n">source_col_name</span> <span class="o">=</span> <span class="n">concept_set</span><span class="p">[</span><span class="s2">&quot;file&quot;</span><span class="p">][</span><span class="s2">&quot;columns&quot;</span><span class="p">][</span><span class="n">code_type</span><span class="p">]</span>
-</span><span id="preprocess_source_concepts-606"><a href="#preprocess_source_concepts-606"><span class="linenos">606</span></a>        <span class="n">codes</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="n">source_col_name</span><span class="p">]</span><span class="o">.</span><span class="n">dropna</span><span class="p">()</span>
-</span><span id="preprocess_source_concepts-607"><a href="#preprocess_source_concepts-607"><span class="linenos">607</span></a>        <span class="n">codes</span> <span class="o">=</span> <span class="n">codes</span><span class="o">.</span><span class="n">astype</span><span class="p">(</span><span class="nb">str</span><span class="p">)</span>  <span class="c1"># convert to string</span>
-</span><span id="preprocess_source_concepts-608"><a href="#preprocess_source_concepts-608"><span class="linenos">608</span></a>        <span class="n">codes</span> <span class="o">=</span> <span class="n">codes</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>  <span class="c1"># remove excess spaces</span>
-</span><span id="preprocess_source_concepts-609"><a href="#preprocess_source_concepts-609"><span class="linenos">609</span></a>
-</span><span id="preprocess_source_concepts-610"><a href="#preprocess_source_concepts-610"><span class="linenos">610</span></a>        <span class="c1"># process codes, validating them using parser and returning the errors</span>
-</span><span id="preprocess_source_concepts-611"><a href="#preprocess_source_concepts-611"><span class="linenos">611</span></a>        <span class="n">codes</span><span class="p">,</span> <span class="n">errors</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">process</span><span class="p">(</span><span class="n">codes</span><span class="p">,</span> <span class="n">code_file_path</span><span class="p">)</span>
-</span><span id="preprocess_source_concepts-612"><a href="#preprocess_source_concepts-612"><span class="linenos">612</span></a>        <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">errors</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
-</span><span id="preprocess_source_concepts-613"><a href="#preprocess_source_concepts-613"><span class="linenos">613</span></a>            <span class="n">code_errors</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">errors</span><span class="p">)</span>
-</span><span id="preprocess_source_concepts-614"><a href="#preprocess_source_concepts-614"><span class="linenos">614</span></a>            <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Codes validation failed with </span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="n">errors</span><span class="p">)</span><span class="si">}</span><span class="s2"> errors&quot;</span><span class="p">)</span>
-</span><span id="preprocess_source_concepts-615"><a href="#preprocess_source_concepts-615"><span class="linenos">615</span></a>
-</span><span id="preprocess_source_concepts-616"><a href="#preprocess_source_concepts-616"><span class="linenos">616</span></a>        <span class="c1"># add processed codes to df</span>
-</span><span id="preprocess_source_concepts-617"><a href="#preprocess_source_concepts-617"><span class="linenos">617</span></a>        <span class="n">new_col_name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">source_col_name</span><span class="si">}</span><span class="s2">_SOURCE&quot;</span>
-</span><span id="preprocess_source_concepts-618"><a href="#preprocess_source_concepts-618"><span class="linenos">618</span></a>        <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="n">source_col_name</span><span class="p">:</span> <span class="n">new_col_name</span><span class="p">})</span>
-</span><span id="preprocess_source_concepts-619"><a href="#preprocess_source_concepts-619"><span class="linenos">619</span></a>        <span class="n">process_codes</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">({</span><span class="n">code_type</span><span class="p">:</span> <span class="n">codes</span><span class="p">})</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">df</span><span class="p">)</span>
-</span><span id="preprocess_source_concepts-620"><a href="#preprocess_source_concepts-620"><span class="linenos">620</span></a>        <span class="n">out</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">concat</span><span class="p">(</span>
-</span><span id="preprocess_source_concepts-621"><a href="#preprocess_source_concepts-621"><span class="linenos">621</span></a>            <span class="p">[</span><span class="n">out</span><span class="p">,</span> <span class="n">process_codes</span><span class="p">],</span>
-</span><span id="preprocess_source_concepts-622"><a href="#preprocess_source_concepts-622"><span class="linenos">622</span></a>            <span class="n">ignore_index</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
-</span><span id="preprocess_source_concepts-623"><a href="#preprocess_source_concepts-623"><span class="linenos">623</span></a>        <span class="p">)</span>
-</span><span id="preprocess_source_concepts-624"><a href="#preprocess_source_concepts-624"><span class="linenos">624</span></a>
-</span><span id="preprocess_source_concepts-625"><a href="#preprocess_source_concepts-625"><span class="linenos">625</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">out</span><span class="o">.</span><span class="n">head</span><span class="p">())</span>
-</span><span id="preprocess_source_concepts-626"><a href="#preprocess_source_concepts-626"><span class="linenos">626</span></a>
-</span><span id="preprocess_source_concepts-627"><a href="#preprocess_source_concepts-627"><span class="linenos">627</span></a>    <span class="k">return</span> <span class="n">out</span><span class="p">,</span> <span class="n">code_errors</span>
-</span></pre></div>
-
-
-            <div class="docstring"><p>Parses each column individually - Order and length will not be preserved!</p>
-</div>
-
-
-                </section>
-                <section id="get_code_type_from_col_name">
-                            <input id="get_code_type_from_col_name-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
-<div class="attr function">
-            
-        <span class="def">def</span>
-        <span class="name">get_code_type_from_col_name</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">col_name</span><span class="p">:</span> <span class="nb">str</span></span><span class="return-annotation">):</span></span>
-
-                <label class="view-source-button" for="get_code_type_from_col_name-view-source"><span>View Source</span></label>
-
-    </div>
-    <a class="headerlink" href="#get_code_type_from_col_name"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="get_code_type_from_col_name-630"><a href="#get_code_type_from_col_name-630"><span class="linenos">630</span></a><span class="k">def</span><span class="w"> </span><span class="nf">get_code_type_from_col_name</span><span class="p">(</span><span class="n">col_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
-</span><span id="get_code_type_from_col_name-631"><a href="#get_code_type_from_col_name-631"><span class="linenos">631</span></a>    <span class="k">return</span> <span class="n">col_name</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;_&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
-</span></pre></div>
-
-
-    
-
                 </section>
                 <section id="translate_codes">
                             <input id="translate_codes-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
@@ -2674,68 +2350,68 @@
 
     </div>
     <a class="headerlink" href="#translate_codes"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="translate_codes-635"><a href="#translate_codes-635"><span class="linenos">635</span></a><span class="k">def</span><span class="w"> </span><span class="nf">translate_codes</span><span class="p">(</span>
-</span><span id="translate_codes-636"><a href="#translate_codes-636"><span class="linenos">636</span></a>    <span class="n">source_df</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">,</span> <span class="n">target_code_type</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">concept_name</span><span class="p">:</span> <span class="nb">str</span>
-</span><span id="translate_codes-637"><a href="#translate_codes-637"><span class="linenos">637</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">:</span>
-</span><span id="translate_codes-638"><a href="#translate_codes-638"><span class="linenos">638</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Translates each source code type the source coding list into a target type and returns all conversions as a concept set&quot;&quot;&quot;</span>
-</span><span id="translate_codes-639"><a href="#translate_codes-639"><span class="linenos">639</span></a>
-</span><span id="translate_codes-640"><a href="#translate_codes-640"><span class="linenos">640</span></a>    <span class="c1"># codes = pd.DataFrame([], dtype=str)</span>
-</span><span id="translate_codes-641"><a href="#translate_codes-641"><span class="linenos">641</span></a>    <span class="n">codes</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">(</span>
-</span><span id="translate_codes-642"><a href="#translate_codes-642"><span class="linenos">642</span></a>        <span class="n">columns</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;SOURCE_CONCEPT&quot;</span><span class="p">,</span> <span class="s2">&quot;SOURCE_CONCEPT_TYPE&quot;</span><span class="p">,</span> <span class="s2">&quot;CONCEPT&quot;</span><span class="p">],</span> <span class="n">dtype</span><span class="o">=</span><span class="s2">&quot;string&quot;</span>
-</span><span id="translate_codes-643"><a href="#translate_codes-643"><span class="linenos">643</span></a>    <span class="p">)</span>
-</span><span id="translate_codes-644"><a href="#translate_codes-644"><span class="linenos">644</span></a>    <span class="c1"># Convert codes to target type</span>
-</span><span id="translate_codes-645"><a href="#translate_codes-645"><span class="linenos">645</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Converting to target code type </span><span class="si">{</span><span class="n">target_code_type</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="translate_codes-646"><a href="#translate_codes-646"><span class="linenos">646</span></a>
-</span><span id="translate_codes-647"><a href="#translate_codes-647"><span class="linenos">647</span></a>    <span class="k">for</span> <span class="n">source_code_type</span> <span class="ow">in</span> <span class="n">source_df</span><span class="o">.</span><span class="n">columns</span><span class="p">:</span>
-</span><span id="translate_codes-648"><a href="#translate_codes-648"><span class="linenos">648</span></a>        <span class="c1"># if target code type is the same as thet source code type, no translation, just appending source as target</span>
-</span><span id="translate_codes-649"><a href="#translate_codes-649"><span class="linenos">649</span></a>        <span class="k">if</span> <span class="n">source_code_type</span> <span class="o">==</span> <span class="n">target_code_type</span><span class="p">:</span>
-</span><span id="translate_codes-650"><a href="#translate_codes-650"><span class="linenos">650</span></a>            <span class="n">copy_df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">(</span>
-</span><span id="translate_codes-651"><a href="#translate_codes-651"><span class="linenos">651</span></a>                <span class="p">{</span>
-</span><span id="translate_codes-652"><a href="#translate_codes-652"><span class="linenos">652</span></a>                    <span class="s2">&quot;SOURCE_CONCEPT&quot;</span><span class="p">:</span> <span class="n">source_df</span><span class="p">[</span><span class="n">source_code_type</span><span class="p">],</span>
-</span><span id="translate_codes-653"><a href="#translate_codes-653"><span class="linenos">653</span></a>                    <span class="s2">&quot;SOURCE_CONCEPT_TYPE&quot;</span><span class="p">:</span> <span class="n">source_code_type</span><span class="p">,</span>
-</span><span id="translate_codes-654"><a href="#translate_codes-654"><span class="linenos">654</span></a>                    <span class="s2">&quot;CONCEPT&quot;</span><span class="p">:</span> <span class="n">source_df</span><span class="p">[</span><span class="n">source_code_type</span><span class="p">],</span>
-</span><span id="translate_codes-655"><a href="#translate_codes-655"><span class="linenos">655</span></a>                <span class="p">}</span>
-</span><span id="translate_codes-656"><a href="#translate_codes-656"><span class="linenos">656</span></a>            <span class="p">)</span>
-</span><span id="translate_codes-657"><a href="#translate_codes-657"><span class="linenos">657</span></a>            <span class="n">codes</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">concat</span><span class="p">([</span><span class="n">codes</span><span class="p">,</span> <span class="n">copy_df</span><span class="p">])</span>
-</span><span id="translate_codes-658"><a href="#translate_codes-658"><span class="linenos">658</span></a>            <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span>
-</span><span id="translate_codes-659"><a href="#translate_codes-659"><span class="linenos">659</span></a>                <span class="sa">f</span><span class="s2">&quot;Target code type </span><span class="si">{</span><span class="n">target_code_type</span><span class="si">}</span><span class="s2"> is the same as source code type </span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="n">source_df</span><span class="p">)</span><span class="si">}</span><span class="s2">, copying codes rather than translating&quot;</span>
-</span><span id="translate_codes-660"><a href="#translate_codes-660"><span class="linenos">660</span></a>            <span class="p">)</span>
-</span><span id="translate_codes-661"><a href="#translate_codes-661"><span class="linenos">661</span></a>        <span class="k">else</span><span class="p">:</span>
-</span><span id="translate_codes-662"><a href="#translate_codes-662"><span class="linenos">662</span></a>            <span class="c1"># get the translation filename using source to target code types</span>
-</span><span id="translate_codes-663"><a href="#translate_codes-663"><span class="linenos">663</span></a>            <span class="n">filename</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">source_code_type</span><span class="si">}</span><span class="s2">_to_</span><span class="si">{</span><span class="n">target_code_type</span><span class="si">}</span><span class="s2">.parquet&quot;</span>
-</span><span id="translate_codes-664"><a href="#translate_codes-664"><span class="linenos">664</span></a>            <span class="n">map_path</span> <span class="o">=</span> <span class="n">trud</span><span class="o">.</span><span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="n">filename</span>
-</span><span id="translate_codes-665"><a href="#translate_codes-665"><span class="linenos">665</span></a>
-</span><span id="translate_codes-666"><a href="#translate_codes-666"><span class="linenos">666</span></a>            <span class="c1"># do the mapping if it exists</span>
-</span><span id="translate_codes-667"><a href="#translate_codes-667"><span class="linenos">667</span></a>            <span class="k">if</span> <span class="n">map_path</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
-</span><span id="translate_codes-668"><a href="#translate_codes-668"><span class="linenos">668</span></a>                <span class="c1"># get mapping</span>
-</span><span id="translate_codes-669"><a href="#translate_codes-669"><span class="linenos">669</span></a>                <span class="n">df_map</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_parquet</span><span class="p">(</span><span class="n">map_path</span><span class="p">)</span>
-</span><span id="translate_codes-670"><a href="#translate_codes-670"><span class="linenos">670</span></a>
-</span><span id="translate_codes-671"><a href="#translate_codes-671"><span class="linenos">671</span></a>                <span class="c1"># do mapping</span>
-</span><span id="translate_codes-672"><a href="#translate_codes-672"><span class="linenos">672</span></a>                <span class="n">translated_df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">merge</span><span class="p">(</span>
-</span><span id="translate_codes-673"><a href="#translate_codes-673"><span class="linenos">673</span></a>                    <span class="n">source_df</span><span class="p">[</span><span class="n">source_code_type</span><span class="p">],</span> <span class="n">df_map</span><span class="p">,</span> <span class="n">how</span><span class="o">=</span><span class="s2">&quot;left&quot;</span>
-</span><span id="translate_codes-674"><a href="#translate_codes-674"><span class="linenos">674</span></a>                <span class="p">)</span>
-</span><span id="translate_codes-675"><a href="#translate_codes-675"><span class="linenos">675</span></a>
-</span><span id="translate_codes-676"><a href="#translate_codes-676"><span class="linenos">676</span></a>                <span class="c1"># normalise the output</span>
-</span><span id="translate_codes-677"><a href="#translate_codes-677"><span class="linenos">677</span></a>                <span class="n">translated_df</span><span class="o">.</span><span class="n">columns</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">Index</span><span class="p">([</span><span class="s2">&quot;SOURCE_CONCEPT&quot;</span><span class="p">,</span> <span class="s2">&quot;CONCEPT&quot;</span><span class="p">])</span>
-</span><span id="translate_codes-678"><a href="#translate_codes-678"><span class="linenos">678</span></a>                <span class="n">translated_df</span><span class="p">[</span><span class="s2">&quot;SOURCE_CONCEPT_TYPE&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">source_code_type</span>
-</span><span id="translate_codes-679"><a href="#translate_codes-679"><span class="linenos">679</span></a>
-</span><span id="translate_codes-680"><a href="#translate_codes-680"><span class="linenos">680</span></a>                <span class="c1"># add to list of codes</span>
-</span><span id="translate_codes-681"><a href="#translate_codes-681"><span class="linenos">681</span></a>                <span class="n">codes</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">concat</span><span class="p">([</span><span class="n">codes</span><span class="p">,</span> <span class="n">translated_df</span><span class="p">])</span>
-</span><span id="translate_codes-682"><a href="#translate_codes-682"><span class="linenos">682</span></a>
-</span><span id="translate_codes-683"><a href="#translate_codes-683"><span class="linenos">683</span></a>            <span class="k">else</span><span class="p">:</span>
-</span><span id="translate_codes-684"><a href="#translate_codes-684"><span class="linenos">684</span></a>                <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span>
-</span><span id="translate_codes-685"><a href="#translate_codes-685"><span class="linenos">685</span></a>                    <span class="sa">f</span><span class="s2">&quot;No mapping from </span><span class="si">{</span><span class="n">source_code_type</span><span class="si">}</span><span class="s2"> to </span><span class="si">{</span><span class="n">target_code_type</span><span class="si">}</span><span class="s2">, file </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">map_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="s2"> does not exist&quot;</span>
-</span><span id="translate_codes-686"><a href="#translate_codes-686"><span class="linenos">686</span></a>                <span class="p">)</span>
+            <div class="pdoc-code codehilite"><pre><span></span><span id="translate_codes-657"><a href="#translate_codes-657"><span class="linenos">657</span></a><span class="k">def</span><span class="w"> </span><span class="nf">translate_codes</span><span class="p">(</span>
+</span><span id="translate_codes-658"><a href="#translate_codes-658"><span class="linenos">658</span></a>    <span class="n">source_df</span><span class="p">:</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">,</span> <span class="n">target_code_type</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">concept_name</span><span class="p">:</span> <span class="nb">str</span>
+</span><span id="translate_codes-659"><a href="#translate_codes-659"><span class="linenos">659</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">:</span>
+</span><span id="translate_codes-660"><a href="#translate_codes-660"><span class="linenos">660</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Translates each source code type the source coding list into a target type and returns all conversions as a concept set&quot;&quot;&quot;</span>
+</span><span id="translate_codes-661"><a href="#translate_codes-661"><span class="linenos">661</span></a>
+</span><span id="translate_codes-662"><a href="#translate_codes-662"><span class="linenos">662</span></a>    <span class="c1"># codes = pd.DataFrame([], dtype=str)</span>
+</span><span id="translate_codes-663"><a href="#translate_codes-663"><span class="linenos">663</span></a>    <span class="n">codes</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">(</span>
+</span><span id="translate_codes-664"><a href="#translate_codes-664"><span class="linenos">664</span></a>        <span class="n">columns</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;SOURCE_CONCEPT&quot;</span><span class="p">,</span> <span class="s2">&quot;SOURCE_CONCEPT_TYPE&quot;</span><span class="p">,</span> <span class="s2">&quot;CONCEPT&quot;</span><span class="p">],</span> <span class="n">dtype</span><span class="o">=</span><span class="s2">&quot;string&quot;</span>
+</span><span id="translate_codes-665"><a href="#translate_codes-665"><span class="linenos">665</span></a>    <span class="p">)</span>
+</span><span id="translate_codes-666"><a href="#translate_codes-666"><span class="linenos">666</span></a>    <span class="c1"># Convert codes to target type</span>
+</span><span id="translate_codes-667"><a href="#translate_codes-667"><span class="linenos">667</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Converting to target code type </span><span class="si">{</span><span class="n">target_code_type</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="translate_codes-668"><a href="#translate_codes-668"><span class="linenos">668</span></a>
+</span><span id="translate_codes-669"><a href="#translate_codes-669"><span class="linenos">669</span></a>    <span class="k">for</span> <span class="n">source_code_type</span> <span class="ow">in</span> <span class="n">source_df</span><span class="o">.</span><span class="n">columns</span><span class="p">:</span>
+</span><span id="translate_codes-670"><a href="#translate_codes-670"><span class="linenos">670</span></a>        <span class="c1"># if target code type is the same as thet source code type, no translation, just appending source as target</span>
+</span><span id="translate_codes-671"><a href="#translate_codes-671"><span class="linenos">671</span></a>        <span class="k">if</span> <span class="n">source_code_type</span> <span class="o">==</span> <span class="n">target_code_type</span><span class="p">:</span>
+</span><span id="translate_codes-672"><a href="#translate_codes-672"><span class="linenos">672</span></a>            <span class="n">copy_df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">(</span>
+</span><span id="translate_codes-673"><a href="#translate_codes-673"><span class="linenos">673</span></a>                <span class="p">{</span>
+</span><span id="translate_codes-674"><a href="#translate_codes-674"><span class="linenos">674</span></a>                    <span class="s2">&quot;SOURCE_CONCEPT&quot;</span><span class="p">:</span> <span class="n">source_df</span><span class="p">[</span><span class="n">source_code_type</span><span class="p">],</span>
+</span><span id="translate_codes-675"><a href="#translate_codes-675"><span class="linenos">675</span></a>                    <span class="s2">&quot;SOURCE_CONCEPT_TYPE&quot;</span><span class="p">:</span> <span class="n">source_code_type</span><span class="p">,</span>
+</span><span id="translate_codes-676"><a href="#translate_codes-676"><span class="linenos">676</span></a>                    <span class="s2">&quot;CONCEPT&quot;</span><span class="p">:</span> <span class="n">source_df</span><span class="p">[</span><span class="n">source_code_type</span><span class="p">],</span>
+</span><span id="translate_codes-677"><a href="#translate_codes-677"><span class="linenos">677</span></a>                <span class="p">}</span>
+</span><span id="translate_codes-678"><a href="#translate_codes-678"><span class="linenos">678</span></a>            <span class="p">)</span>
+</span><span id="translate_codes-679"><a href="#translate_codes-679"><span class="linenos">679</span></a>            <span class="n">codes</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">concat</span><span class="p">([</span><span class="n">codes</span><span class="p">,</span> <span class="n">copy_df</span><span class="p">])</span>
+</span><span id="translate_codes-680"><a href="#translate_codes-680"><span class="linenos">680</span></a>            <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span>
+</span><span id="translate_codes-681"><a href="#translate_codes-681"><span class="linenos">681</span></a>                <span class="sa">f</span><span class="s2">&quot;Target code type </span><span class="si">{</span><span class="n">target_code_type</span><span class="si">}</span><span class="s2"> is the same as source code type </span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="n">source_df</span><span class="p">)</span><span class="si">}</span><span class="s2">, copying codes rather than translating&quot;</span>
+</span><span id="translate_codes-682"><a href="#translate_codes-682"><span class="linenos">682</span></a>            <span class="p">)</span>
+</span><span id="translate_codes-683"><a href="#translate_codes-683"><span class="linenos">683</span></a>        <span class="k">else</span><span class="p">:</span>
+</span><span id="translate_codes-684"><a href="#translate_codes-684"><span class="linenos">684</span></a>            <span class="c1"># get the translation filename using source to target code types</span>
+</span><span id="translate_codes-685"><a href="#translate_codes-685"><span class="linenos">685</span></a>            <span class="n">filename</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">source_code_type</span><span class="si">}</span><span class="s2">_to_</span><span class="si">{</span><span class="n">target_code_type</span><span class="si">}</span><span class="s2">.parquet&quot;</span>
+</span><span id="translate_codes-686"><a href="#translate_codes-686"><span class="linenos">686</span></a>            <span class="n">map_path</span> <span class="o">=</span> <span class="n">trud</span><span class="o">.</span><span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="n">filename</span>
 </span><span id="translate_codes-687"><a href="#translate_codes-687"><span class="linenos">687</span></a>
-</span><span id="translate_codes-688"><a href="#translate_codes-688"><span class="linenos">688</span></a>    <span class="n">codes</span> <span class="o">=</span> <span class="n">codes</span><span class="o">.</span><span class="n">dropna</span><span class="p">()</span>  <span class="c1"># delete NaNs</span>
-</span><span id="translate_codes-689"><a href="#translate_codes-689"><span class="linenos">689</span></a>
-</span><span id="translate_codes-690"><a href="#translate_codes-690"><span class="linenos">690</span></a>    <span class="c1"># added concept set type to output if any translations</span>
-</span><span id="translate_codes-691"><a href="#translate_codes-691"><span class="linenos">691</span></a>    <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">codes</span><span class="o">.</span><span class="n">index</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
-</span><span id="translate_codes-692"><a href="#translate_codes-692"><span class="linenos">692</span></a>        <span class="n">codes</span><span class="p">[</span><span class="s2">&quot;CONCEPT_SET&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">concept_name</span>
-</span><span id="translate_codes-693"><a href="#translate_codes-693"><span class="linenos">693</span></a>    <span class="k">else</span><span class="p">:</span>
-</span><span id="translate_codes-694"><a href="#translate_codes-694"><span class="linenos">694</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;No codes converted with target code type </span><span class="si">{</span><span class="n">target_code_type</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="translate_codes-695"><a href="#translate_codes-695"><span class="linenos">695</span></a>
-</span><span id="translate_codes-696"><a href="#translate_codes-696"><span class="linenos">696</span></a>    <span class="k">return</span> <span class="n">codes</span>
+</span><span id="translate_codes-688"><a href="#translate_codes-688"><span class="linenos">688</span></a>            <span class="c1"># do the mapping if it exists</span>
+</span><span id="translate_codes-689"><a href="#translate_codes-689"><span class="linenos">689</span></a>            <span class="k">if</span> <span class="n">map_path</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
+</span><span id="translate_codes-690"><a href="#translate_codes-690"><span class="linenos">690</span></a>                <span class="c1"># get mapping</span>
+</span><span id="translate_codes-691"><a href="#translate_codes-691"><span class="linenos">691</span></a>                <span class="n">df_map</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_parquet</span><span class="p">(</span><span class="n">map_path</span><span class="p">)</span>
+</span><span id="translate_codes-692"><a href="#translate_codes-692"><span class="linenos">692</span></a>
+</span><span id="translate_codes-693"><a href="#translate_codes-693"><span class="linenos">693</span></a>                <span class="c1"># do mapping</span>
+</span><span id="translate_codes-694"><a href="#translate_codes-694"><span class="linenos">694</span></a>                <span class="n">translated_df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">merge</span><span class="p">(</span>
+</span><span id="translate_codes-695"><a href="#translate_codes-695"><span class="linenos">695</span></a>                    <span class="n">source_df</span><span class="p">[</span><span class="n">source_code_type</span><span class="p">],</span> <span class="n">df_map</span><span class="p">,</span> <span class="n">how</span><span class="o">=</span><span class="s2">&quot;left&quot;</span>
+</span><span id="translate_codes-696"><a href="#translate_codes-696"><span class="linenos">696</span></a>                <span class="p">)</span>
+</span><span id="translate_codes-697"><a href="#translate_codes-697"><span class="linenos">697</span></a>
+</span><span id="translate_codes-698"><a href="#translate_codes-698"><span class="linenos">698</span></a>                <span class="c1"># normalise the output</span>
+</span><span id="translate_codes-699"><a href="#translate_codes-699"><span class="linenos">699</span></a>                <span class="n">translated_df</span><span class="o">.</span><span class="n">columns</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">Index</span><span class="p">([</span><span class="s2">&quot;SOURCE_CONCEPT&quot;</span><span class="p">,</span> <span class="s2">&quot;CONCEPT&quot;</span><span class="p">])</span>
+</span><span id="translate_codes-700"><a href="#translate_codes-700"><span class="linenos">700</span></a>                <span class="n">translated_df</span><span class="p">[</span><span class="s2">&quot;SOURCE_CONCEPT_TYPE&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">source_code_type</span>
+</span><span id="translate_codes-701"><a href="#translate_codes-701"><span class="linenos">701</span></a>
+</span><span id="translate_codes-702"><a href="#translate_codes-702"><span class="linenos">702</span></a>                <span class="c1"># add to list of codes</span>
+</span><span id="translate_codes-703"><a href="#translate_codes-703"><span class="linenos">703</span></a>                <span class="n">codes</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">concat</span><span class="p">([</span><span class="n">codes</span><span class="p">,</span> <span class="n">translated_df</span><span class="p">])</span>
+</span><span id="translate_codes-704"><a href="#translate_codes-704"><span class="linenos">704</span></a>
+</span><span id="translate_codes-705"><a href="#translate_codes-705"><span class="linenos">705</span></a>            <span class="k">else</span><span class="p">:</span>
+</span><span id="translate_codes-706"><a href="#translate_codes-706"><span class="linenos">706</span></a>                <span class="n">_logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span>
+</span><span id="translate_codes-707"><a href="#translate_codes-707"><span class="linenos">707</span></a>                    <span class="sa">f</span><span class="s2">&quot;No mapping from </span><span class="si">{</span><span class="n">source_code_type</span><span class="si">}</span><span class="s2"> to </span><span class="si">{</span><span class="n">target_code_type</span><span class="si">}</span><span class="s2">, file </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">map_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="s2"> does not exist&quot;</span>
+</span><span id="translate_codes-708"><a href="#translate_codes-708"><span class="linenos">708</span></a>                <span class="p">)</span>
+</span><span id="translate_codes-709"><a href="#translate_codes-709"><span class="linenos">709</span></a>
+</span><span id="translate_codes-710"><a href="#translate_codes-710"><span class="linenos">710</span></a>    <span class="n">codes</span> <span class="o">=</span> <span class="n">codes</span><span class="o">.</span><span class="n">dropna</span><span class="p">()</span>  <span class="c1"># delete NaNs</span>
+</span><span id="translate_codes-711"><a href="#translate_codes-711"><span class="linenos">711</span></a>
+</span><span id="translate_codes-712"><a href="#translate_codes-712"><span class="linenos">712</span></a>    <span class="c1"># added concept set type to output if any translations</span>
+</span><span id="translate_codes-713"><a href="#translate_codes-713"><span class="linenos">713</span></a>    <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">codes</span><span class="o">.</span><span class="n">index</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
+</span><span id="translate_codes-714"><a href="#translate_codes-714"><span class="linenos">714</span></a>        <span class="n">codes</span><span class="p">[</span><span class="s2">&quot;CONCEPT_SET&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">concept_name</span>
+</span><span id="translate_codes-715"><a href="#translate_codes-715"><span class="linenos">715</span></a>    <span class="k">else</span><span class="p">:</span>
+</span><span id="translate_codes-716"><a href="#translate_codes-716"><span class="linenos">716</span></a>        <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;No codes converted with target code type </span><span class="si">{</span><span class="n">target_code_type</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="translate_codes-717"><a href="#translate_codes-717"><span class="linenos">717</span></a>
+</span><span id="translate_codes-718"><a href="#translate_codes-718"><span class="linenos">718</span></a>    <span class="k">return</span> <span class="n">codes</span>
 </span></pre></div>
 
 
@@ -2743,66 +2419,6 @@
 </div>
 
 
-                </section>
-                <section id="sql_row_exist">
-                            <input id="sql_row_exist-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
-<div class="attr function">
-            
-        <span class="def">def</span>
-        <span class="name">sql_row_exist</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">conn</span><span class="p">:</span> <span class="n">sqlite3</span><span class="o">.</span><span class="n">Connection</span>, </span><span class="param"><span class="n">table</span><span class="p">:</span> <span class="nb">str</span>, </span><span class="param"><span class="n">column</span><span class="p">:</span> <span class="nb">str</span>, </span><span class="param"><span class="n">value</span><span class="p">:</span> <span class="nb">str</span></span><span class="return-annotation">) -> <span class="nb">bool</span>:</span></span>
-
-                <label class="view-source-button" for="sql_row_exist-view-source"><span>View Source</span></label>
-
-    </div>
-    <a class="headerlink" href="#sql_row_exist"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="sql_row_exist-699"><a href="#sql_row_exist-699"><span class="linenos">699</span></a><span class="k">def</span><span class="w"> </span><span class="nf">sql_row_exist</span><span class="p">(</span>
-</span><span id="sql_row_exist-700"><a href="#sql_row_exist-700"><span class="linenos">700</span></a>    <span class="n">conn</span><span class="p">:</span> <span class="n">sqlite3</span><span class="o">.</span><span class="n">Connection</span><span class="p">,</span> <span class="n">table</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">column</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">value</span><span class="p">:</span> <span class="nb">str</span>
-</span><span id="sql_row_exist-701"><a href="#sql_row_exist-701"><span class="linenos">701</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="sql_row_exist-702"><a href="#sql_row_exist-702"><span class="linenos">702</span></a>    <span class="c1"># Execute and check if a result exists</span>
-</span><span id="sql_row_exist-703"><a href="#sql_row_exist-703"><span class="linenos">703</span></a>    <span class="n">cur</span> <span class="o">=</span> <span class="n">conn</span><span class="o">.</span><span class="n">cursor</span><span class="p">()</span>
-</span><span id="sql_row_exist-704"><a href="#sql_row_exist-704"><span class="linenos">704</span></a>    <span class="n">query</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;SELECT 1 FROM </span><span class="si">{</span><span class="n">table</span><span class="si">}</span><span class="s2"> WHERE </span><span class="si">{</span><span class="n">column</span><span class="si">}</span><span class="s2"> = ? LIMIT 1;&quot;</span>
-</span><span id="sql_row_exist-705"><a href="#sql_row_exist-705"><span class="linenos">705</span></a>    <span class="n">cur</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="n">query</span><span class="p">,</span> <span class="p">(</span><span class="n">value</span><span class="p">,))</span>
-</span><span id="sql_row_exist-706"><a href="#sql_row_exist-706"><span class="linenos">706</span></a>    <span class="n">exists</span> <span class="o">=</span> <span class="n">cur</span><span class="o">.</span><span class="n">fetchone</span><span class="p">()</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span>
-</span><span id="sql_row_exist-707"><a href="#sql_row_exist-707"><span class="linenos">707</span></a>
-</span><span id="sql_row_exist-708"><a href="#sql_row_exist-708"><span class="linenos">708</span></a>    <span class="k">return</span> <span class="n">exists</span>
-</span></pre></div>
-
-
-    
-
-                </section>
-                <section id="write_code_errors">
-                            <input id="write_code_errors-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
-<div class="attr function">
-            
-        <span class="def">def</span>
-        <span class="name">write_code_errors</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">code_errors</span><span class="p">:</span> <span class="nb">list</span>, </span><span class="param"><span class="n">code_errors_path</span><span class="p">:</span> <span class="n">pathlib</span><span class="o">.</span><span class="n">Path</span></span><span class="return-annotation">):</span></span>
-
-                <label class="view-source-button" for="write_code_errors-view-source"><span>View Source</span></label>
-
-    </div>
-    <a class="headerlink" href="#write_code_errors"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="write_code_errors-711"><a href="#write_code_errors-711"><span class="linenos">711</span></a><span class="k">def</span><span class="w"> </span><span class="nf">write_code_errors</span><span class="p">(</span><span class="n">code_errors</span><span class="p">:</span> <span class="nb">list</span><span class="p">,</span> <span class="n">code_errors_path</span><span class="p">:</span> <span class="n">Path</span><span class="p">):</span>
-</span><span id="write_code_errors-712"><a href="#write_code_errors-712"><span class="linenos">712</span></a>    <span class="n">err_df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">(</span>
-</span><span id="write_code_errors-713"><a href="#write_code_errors-713"><span class="linenos">713</span></a>        <span class="p">[</span>
-</span><span id="write_code_errors-714"><a href="#write_code_errors-714"><span class="linenos">714</span></a>            <span class="p">{</span>
-</span><span id="write_code_errors-715"><a href="#write_code_errors-715"><span class="linenos">715</span></a>                <span class="s2">&quot;CONCEPT&quot;</span><span class="p">:</span> <span class="s2">&quot;, &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">err</span><span class="o">.</span><span class="n">codes</span><span class="p">[</span><span class="o">~</span><span class="n">err</span><span class="o">.</span><span class="n">mask</span><span class="p">]</span><span class="o">.</span><span class="n">tolist</span><span class="p">()),</span>
-</span><span id="write_code_errors-716"><a href="#write_code_errors-716"><span class="linenos">716</span></a>                <span class="s2">&quot;VOCABULARY&quot;</span><span class="p">:</span> <span class="n">err</span><span class="o">.</span><span class="n">code_type</span><span class="p">,</span>
-</span><span id="write_code_errors-717"><a href="#write_code_errors-717"><span class="linenos">717</span></a>                <span class="s2">&quot;SOURCE&quot;</span><span class="p">:</span> <span class="n">err</span><span class="o">.</span><span class="n">codes_file</span><span class="p">,</span>
-</span><span id="write_code_errors-718"><a href="#write_code_errors-718"><span class="linenos">718</span></a>                <span class="s2">&quot;CAUSE&quot;</span><span class="p">:</span> <span class="n">err</span><span class="o">.</span><span class="n">message</span><span class="p">,</span>
-</span><span id="write_code_errors-719"><a href="#write_code_errors-719"><span class="linenos">719</span></a>            <span class="p">}</span>
-</span><span id="write_code_errors-720"><a href="#write_code_errors-720"><span class="linenos">720</span></a>            <span class="k">for</span> <span class="n">err</span> <span class="ow">in</span> <span class="n">code_errors</span>
-</span><span id="write_code_errors-721"><a href="#write_code_errors-721"><span class="linenos">721</span></a>        <span class="p">]</span>
-</span><span id="write_code_errors-722"><a href="#write_code_errors-722"><span class="linenos">722</span></a>    <span class="p">)</span>
-</span><span id="write_code_errors-723"><a href="#write_code_errors-723"><span class="linenos">723</span></a>
-</span><span id="write_code_errors-724"><a href="#write_code_errors-724"><span class="linenos">724</span></a>    <span class="n">err_df</span> <span class="o">=</span> <span class="n">err_df</span><span class="o">.</span><span class="n">drop_duplicates</span><span class="p">()</span>  <span class="c1"># Remove Duplicates from Error file</span>
-</span><span id="write_code_errors-725"><a href="#write_code_errors-725"><span class="linenos">725</span></a>    <span class="n">err_df</span> <span class="o">=</span> <span class="n">err_df</span><span class="o">.</span><span class="n">sort_values</span><span class="p">(</span><span class="n">by</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;SOURCE&quot;</span><span class="p">,</span> <span class="s2">&quot;VOCABULARY&quot;</span><span class="p">,</span> <span class="s2">&quot;CONCEPT&quot;</span><span class="p">])</span>
-</span><span id="write_code_errors-726"><a href="#write_code_errors-726"><span class="linenos">726</span></a>    <span class="n">err_df</span><span class="o">.</span><span class="n">to_csv</span><span class="p">(</span><span class="n">code_errors_path</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">mode</span><span class="o">=</span><span class="s2">&quot;w&quot;</span><span class="p">)</span>
-</span></pre></div>
-
-
-    
-
                 </section>
                 <section id="write_vocab_version">
                             <input id="write_vocab_version-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
@@ -2815,43 +2431,43 @@
 
     </div>
     <a class="headerlink" href="#write_vocab_version"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="write_vocab_version-729"><a href="#write_vocab_version-729"><span class="linenos">729</span></a><span class="k">def</span><span class="w"> </span><span class="nf">write_vocab_version</span><span class="p">(</span><span class="n">phen_path</span><span class="p">:</span> <span class="n">Path</span><span class="p">):</span>
-</span><span id="write_vocab_version-730"><a href="#write_vocab_version-730"><span class="linenos">730</span></a>    <span class="c1"># write the vocab version files</span>
-</span><span id="write_vocab_version-731"><a href="#write_vocab_version-731"><span class="linenos">731</span></a>
-</span><span id="write_vocab_version-732"><a href="#write_vocab_version-732"><span class="linenos">732</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">trud</span><span class="o">.</span><span class="n">VERSION_PATH</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
-</span><span id="write_vocab_version-733"><a href="#write_vocab_version-733"><span class="linenos">733</span></a>        <span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span>
-</span><span id="write_vocab_version-734"><a href="#write_vocab_version-734"><span class="linenos">734</span></a>            <span class="sa">f</span><span class="s2">&quot;TRUD version path </span><span class="si">{</span><span class="n">trud</span><span class="o">.</span><span class="n">VERSION_PATH</span><span class="si">}</span><span class="s2"> does not exist, please check TRUD is installed&quot;</span>
-</span><span id="write_vocab_version-735"><a href="#write_vocab_version-735"><span class="linenos">735</span></a>        <span class="p">)</span>
-</span><span id="write_vocab_version-736"><a href="#write_vocab_version-736"><span class="linenos">736</span></a>
-</span><span id="write_vocab_version-737"><a href="#write_vocab_version-737"><span class="linenos">737</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">omop</span><span class="o">.</span><span class="n">VERSION_PATH</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
-</span><span id="write_vocab_version-738"><a href="#write_vocab_version-738"><span class="linenos">738</span></a>        <span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span>
-</span><span id="write_vocab_version-739"><a href="#write_vocab_version-739"><span class="linenos">739</span></a>            <span class="sa">f</span><span class="s2">&quot;OMOP version path </span><span class="si">{</span><span class="n">omop</span><span class="o">.</span><span class="n">VERSION_PATH</span><span class="si">}</span><span class="s2"> does not exist, please check OMOP is installed&quot;</span>
-</span><span id="write_vocab_version-740"><a href="#write_vocab_version-740"><span class="linenos">740</span></a>        <span class="p">)</span>
+            <div class="pdoc-code codehilite"><pre><span></span><span id="write_vocab_version-739"><a href="#write_vocab_version-739"><span class="linenos">739</span></a><span class="k">def</span><span class="w"> </span><span class="nf">write_vocab_version</span><span class="p">(</span><span class="n">phen_path</span><span class="p">:</span> <span class="n">Path</span><span class="p">):</span>
+</span><span id="write_vocab_version-740"><a href="#write_vocab_version-740"><span class="linenos">740</span></a>    <span class="c1"># write the vocab version files</span>
 </span><span id="write_vocab_version-741"><a href="#write_vocab_version-741"><span class="linenos">741</span></a>
-</span><span id="write_vocab_version-742"><a href="#write_vocab_version-742"><span class="linenos">742</span></a>    <span class="k">with</span> <span class="n">trud</span><span class="o">.</span><span class="n">VERSION_PATH</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="s2">&quot;r&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
-</span><span id="write_vocab_version-743"><a href="#write_vocab_version-743"><span class="linenos">743</span></a>        <span class="n">trud_version</span> <span class="o">=</span> <span class="n">yaml</span><span class="o">.</span><span class="n">safe_load</span><span class="p">(</span><span class="n">file</span><span class="p">)</span>
-</span><span id="write_vocab_version-744"><a href="#write_vocab_version-744"><span class="linenos">744</span></a>
-</span><span id="write_vocab_version-745"><a href="#write_vocab_version-745"><span class="linenos">745</span></a>    <span class="k">with</span> <span class="n">omop</span><span class="o">.</span><span class="n">VERSION_PATH</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="s2">&quot;r&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
-</span><span id="write_vocab_version-746"><a href="#write_vocab_version-746"><span class="linenos">746</span></a>        <span class="n">omop_version</span> <span class="o">=</span> <span class="n">yaml</span><span class="o">.</span><span class="n">safe_load</span><span class="p">(</span><span class="n">file</span><span class="p">)</span>
-</span><span id="write_vocab_version-747"><a href="#write_vocab_version-747"><span class="linenos">747</span></a>
-</span><span id="write_vocab_version-748"><a href="#write_vocab_version-748"><span class="linenos">748</span></a>    <span class="c1"># Create the combined YAML structure</span>
-</span><span id="write_vocab_version-749"><a href="#write_vocab_version-749"><span class="linenos">749</span></a>    <span class="n">version_data</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="write_vocab_version-750"><a href="#write_vocab_version-750"><span class="linenos">750</span></a>        <span class="s2">&quot;versions&quot;</span><span class="p">:</span> <span class="p">{</span>
-</span><span id="write_vocab_version-751"><a href="#write_vocab_version-751"><span class="linenos">751</span></a>            <span class="s2">&quot;acmc&quot;</span><span class="p">:</span> <span class="n">acmc</span><span class="o">.</span><span class="n">__version__</span><span class="p">,</span>
-</span><span id="write_vocab_version-752"><a href="#write_vocab_version-752"><span class="linenos">752</span></a>            <span class="s2">&quot;trud&quot;</span><span class="p">:</span> <span class="n">trud_version</span><span class="p">,</span>
-</span><span id="write_vocab_version-753"><a href="#write_vocab_version-753"><span class="linenos">753</span></a>            <span class="s2">&quot;omop&quot;</span><span class="p">:</span> <span class="n">omop_version</span><span class="p">,</span>
-</span><span id="write_vocab_version-754"><a href="#write_vocab_version-754"><span class="linenos">754</span></a>        <span class="p">}</span>
-</span><span id="write_vocab_version-755"><a href="#write_vocab_version-755"><span class="linenos">755</span></a>    <span class="p">}</span>
-</span><span id="write_vocab_version-756"><a href="#write_vocab_version-756"><span class="linenos">756</span></a>
-</span><span id="write_vocab_version-757"><a href="#write_vocab_version-757"><span class="linenos">757</span></a>    <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">phen_path</span> <span class="o">/</span> <span class="n">VOCAB_VERSION_FILE</span><span class="p">,</span> <span class="s2">&quot;w&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
-</span><span id="write_vocab_version-758"><a href="#write_vocab_version-758"><span class="linenos">758</span></a>        <span class="n">yaml</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span>
-</span><span id="write_vocab_version-759"><a href="#write_vocab_version-759"><span class="linenos">759</span></a>            <span class="n">version_data</span><span class="p">,</span>
-</span><span id="write_vocab_version-760"><a href="#write_vocab_version-760"><span class="linenos">760</span></a>            <span class="n">file</span><span class="p">,</span>
-</span><span id="write_vocab_version-761"><a href="#write_vocab_version-761"><span class="linenos">761</span></a>            <span class="n">Dumper</span><span class="o">=</span><span class="n">util</span><span class="o">.</span><span class="n">QuotedDumper</span><span class="p">,</span>
-</span><span id="write_vocab_version-762"><a href="#write_vocab_version-762"><span class="linenos">762</span></a>            <span class="n">default_flow_style</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-</span><span id="write_vocab_version-763"><a href="#write_vocab_version-763"><span class="linenos">763</span></a>            <span class="n">sort_keys</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-</span><span id="write_vocab_version-764"><a href="#write_vocab_version-764"><span class="linenos">764</span></a>            <span class="n">default_style</span><span class="o">=</span><span class="s1">&#39;&quot;&#39;</span><span class="p">,</span>
-</span><span id="write_vocab_version-765"><a href="#write_vocab_version-765"><span class="linenos">765</span></a>        <span class="p">)</span>
+</span><span id="write_vocab_version-742"><a href="#write_vocab_version-742"><span class="linenos">742</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">trud</span><span class="o">.</span><span class="n">VERSION_PATH</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
+</span><span id="write_vocab_version-743"><a href="#write_vocab_version-743"><span class="linenos">743</span></a>        <span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span>
+</span><span id="write_vocab_version-744"><a href="#write_vocab_version-744"><span class="linenos">744</span></a>            <span class="sa">f</span><span class="s2">&quot;TRUD version path </span><span class="si">{</span><span class="n">trud</span><span class="o">.</span><span class="n">VERSION_PATH</span><span class="si">}</span><span class="s2"> does not exist, please check TRUD is installed&quot;</span>
+</span><span id="write_vocab_version-745"><a href="#write_vocab_version-745"><span class="linenos">745</span></a>        <span class="p">)</span>
+</span><span id="write_vocab_version-746"><a href="#write_vocab_version-746"><span class="linenos">746</span></a>
+</span><span id="write_vocab_version-747"><a href="#write_vocab_version-747"><span class="linenos">747</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">omop</span><span class="o">.</span><span class="n">VERSION_PATH</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
+</span><span id="write_vocab_version-748"><a href="#write_vocab_version-748"><span class="linenos">748</span></a>        <span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span>
+</span><span id="write_vocab_version-749"><a href="#write_vocab_version-749"><span class="linenos">749</span></a>            <span class="sa">f</span><span class="s2">&quot;OMOP version path </span><span class="si">{</span><span class="n">omop</span><span class="o">.</span><span class="n">VERSION_PATH</span><span class="si">}</span><span class="s2"> does not exist, please check OMOP is installed&quot;</span>
+</span><span id="write_vocab_version-750"><a href="#write_vocab_version-750"><span class="linenos">750</span></a>        <span class="p">)</span>
+</span><span id="write_vocab_version-751"><a href="#write_vocab_version-751"><span class="linenos">751</span></a>
+</span><span id="write_vocab_version-752"><a href="#write_vocab_version-752"><span class="linenos">752</span></a>    <span class="k">with</span> <span class="n">trud</span><span class="o">.</span><span class="n">VERSION_PATH</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="s2">&quot;r&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
+</span><span id="write_vocab_version-753"><a href="#write_vocab_version-753"><span class="linenos">753</span></a>        <span class="n">trud_version</span> <span class="o">=</span> <span class="n">yaml</span><span class="o">.</span><span class="n">safe_load</span><span class="p">(</span><span class="n">file</span><span class="p">)</span>
+</span><span id="write_vocab_version-754"><a href="#write_vocab_version-754"><span class="linenos">754</span></a>
+</span><span id="write_vocab_version-755"><a href="#write_vocab_version-755"><span class="linenos">755</span></a>    <span class="k">with</span> <span class="n">omop</span><span class="o">.</span><span class="n">VERSION_PATH</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="s2">&quot;r&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
+</span><span id="write_vocab_version-756"><a href="#write_vocab_version-756"><span class="linenos">756</span></a>        <span class="n">omop_version</span> <span class="o">=</span> <span class="n">yaml</span><span class="o">.</span><span class="n">safe_load</span><span class="p">(</span><span class="n">file</span><span class="p">)</span>
+</span><span id="write_vocab_version-757"><a href="#write_vocab_version-757"><span class="linenos">757</span></a>
+</span><span id="write_vocab_version-758"><a href="#write_vocab_version-758"><span class="linenos">758</span></a>    <span class="c1"># Create the combined YAML structure</span>
+</span><span id="write_vocab_version-759"><a href="#write_vocab_version-759"><span class="linenos">759</span></a>    <span class="n">version_data</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="write_vocab_version-760"><a href="#write_vocab_version-760"><span class="linenos">760</span></a>        <span class="s2">&quot;versions&quot;</span><span class="p">:</span> <span class="p">{</span>
+</span><span id="write_vocab_version-761"><a href="#write_vocab_version-761"><span class="linenos">761</span></a>            <span class="s2">&quot;acmc&quot;</span><span class="p">:</span> <span class="n">acmc</span><span class="o">.</span><span class="n">__version__</span><span class="p">,</span>
+</span><span id="write_vocab_version-762"><a href="#write_vocab_version-762"><span class="linenos">762</span></a>            <span class="s2">&quot;trud&quot;</span><span class="p">:</span> <span class="n">trud_version</span><span class="p">,</span>
+</span><span id="write_vocab_version-763"><a href="#write_vocab_version-763"><span class="linenos">763</span></a>            <span class="s2">&quot;omop&quot;</span><span class="p">:</span> <span class="n">omop_version</span><span class="p">,</span>
+</span><span id="write_vocab_version-764"><a href="#write_vocab_version-764"><span class="linenos">764</span></a>        <span class="p">}</span>
+</span><span id="write_vocab_version-765"><a href="#write_vocab_version-765"><span class="linenos">765</span></a>    <span class="p">}</span>
+</span><span id="write_vocab_version-766"><a href="#write_vocab_version-766"><span class="linenos">766</span></a>
+</span><span id="write_vocab_version-767"><a href="#write_vocab_version-767"><span class="linenos">767</span></a>    <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">phen_path</span> <span class="o">/</span> <span class="n">VOCAB_VERSION_FILE</span><span class="p">,</span> <span class="s2">&quot;w&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
+</span><span id="write_vocab_version-768"><a href="#write_vocab_version-768"><span class="linenos">768</span></a>        <span class="n">yaml</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span>
+</span><span id="write_vocab_version-769"><a href="#write_vocab_version-769"><span class="linenos">769</span></a>            <span class="n">version_data</span><span class="p">,</span>
+</span><span id="write_vocab_version-770"><a href="#write_vocab_version-770"><span class="linenos">770</span></a>            <span class="n">file</span><span class="p">,</span>
+</span><span id="write_vocab_version-771"><a href="#write_vocab_version-771"><span class="linenos">771</span></a>            <span class="n">Dumper</span><span class="o">=</span><span class="n">util</span><span class="o">.</span><span class="n">QuotedDumper</span><span class="p">,</span>
+</span><span id="write_vocab_version-772"><a href="#write_vocab_version-772"><span class="linenos">772</span></a>            <span class="n">default_flow_style</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="write_vocab_version-773"><a href="#write_vocab_version-773"><span class="linenos">773</span></a>            <span class="n">sort_keys</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="write_vocab_version-774"><a href="#write_vocab_version-774"><span class="linenos">774</span></a>            <span class="n">default_style</span><span class="o">=</span><span class="s1">&#39;&quot;&#39;</span><span class="p">,</span>
+</span><span id="write_vocab_version-775"><a href="#write_vocab_version-775"><span class="linenos">775</span></a>        <span class="p">)</span>
 </span></pre></div>
 
 
@@ -2869,254 +2485,36 @@
 
     </div>
     <a class="headerlink" href="#map"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="map-768"><a href="#map-768"><span class="linenos">768</span></a><span class="k">def</span><span class="w"> </span><span class="nf">map</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">target_code_type</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
-</span><span id="map-769"><a href="#map-769"><span class="linenos">769</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Processing phenotype: </span><span class="si">{</span><span class="n">phen_dir</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="map-770"><a href="#map-770"><span class="linenos">770</span></a>
-</span><span id="map-771"><a href="#map-771"><span class="linenos">771</span></a>    <span class="c1"># Validate configuration</span>
-</span><span id="map-772"><a href="#map-772"><span class="linenos">772</span></a>    <span class="n">validate</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">)</span>
-</span><span id="map-773"><a href="#map-773"><span class="linenos">773</span></a>
-</span><span id="map-774"><a href="#map-774"><span class="linenos">774</span></a>    <span class="c1"># initialise paths</span>
-</span><span id="map-775"><a href="#map-775"><span class="linenos">775</span></a>    <span class="n">phen_path</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">)</span>
-</span><span id="map-776"><a href="#map-776"><span class="linenos">776</span></a>    <span class="n">config_path</span> <span class="o">=</span> <span class="n">phen_path</span> <span class="o">/</span> <span class="n">CONFIG_FILE</span>
-</span><span id="map-777"><a href="#map-777"><span class="linenos">777</span></a>
-</span><span id="map-778"><a href="#map-778"><span class="linenos">778</span></a>    <span class="c1"># load configuration</span>
-</span><span id="map-779"><a href="#map-779"><span class="linenos">779</span></a>    <span class="k">with</span> <span class="n">config_path</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="s2">&quot;r&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
-</span><span id="map-780"><a href="#map-780"><span class="linenos">780</span></a>        <span class="n">config</span> <span class="o">=</span> <span class="n">yaml</span><span class="o">.</span><span class="n">safe_load</span><span class="p">(</span><span class="n">file</span><span class="p">)</span>
-</span><span id="map-781"><a href="#map-781"><span class="linenos">781</span></a>    <span class="n">phenotype</span> <span class="o">=</span> <span class="n">config</span><span class="p">[</span><span class="s2">&quot;phenotype&quot;</span><span class="p">]</span>
-</span><span id="map-782"><a href="#map-782"><span class="linenos">782</span></a>
-</span><span id="map-783"><a href="#map-783"><span class="linenos">783</span></a>    <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">phenotype</span><span class="p">[</span><span class="s2">&quot;map&quot;</span><span class="p">])</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
-</span><span id="map-784"><a href="#map-784"><span class="linenos">784</span></a>        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;No map codes defined in the phenotype configuration&quot;</span><span class="p">)</span>
-</span><span id="map-785"><a href="#map-785"><span class="linenos">785</span></a>
-</span><span id="map-786"><a href="#map-786"><span class="linenos">786</span></a>    <span class="k">if</span> <span class="n">target_code_type</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">target_code_type</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">phenotype</span><span class="p">[</span><span class="s2">&quot;map&quot;</span><span class="p">]:</span>
-</span><span id="map-787"><a href="#map-787"><span class="linenos">787</span></a>        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
-</span><span id="map-788"><a href="#map-788"><span class="linenos">788</span></a>            <span class="sa">f</span><span class="s2">&quot;Target code type </span><span class="si">{</span><span class="n">target_code_type</span><span class="si">}</span><span class="s2"> not in phenotype configuration map </span><span class="si">{</span><span class="n">phenotype</span><span class="p">[</span><span class="s1">&#39;map&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="map-789"><a href="#map-789"><span class="linenos">789</span></a>        <span class="p">)</span>
-</span><span id="map-790"><a href="#map-790"><span class="linenos">790</span></a>
-</span><span id="map-791"><a href="#map-791"><span class="linenos">791</span></a>    <span class="k">if</span> <span class="n">target_code_type</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="map-792"><a href="#map-792"><span class="linenos">792</span></a>        <span class="n">map_target_code_type</span><span class="p">(</span><span class="n">phen_path</span><span class="p">,</span> <span class="n">phenotype</span><span class="p">,</span> <span class="n">target_code_type</span><span class="p">)</span>
-</span><span id="map-793"><a href="#map-793"><span class="linenos">793</span></a>    <span class="k">else</span><span class="p">:</span>
-</span><span id="map-794"><a href="#map-794"><span class="linenos">794</span></a>        <span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">phenotype</span><span class="p">[</span><span class="s2">&quot;map&quot;</span><span class="p">]:</span>
-</span><span id="map-795"><a href="#map-795"><span class="linenos">795</span></a>            <span class="n">map_target_code_type</span><span class="p">(</span><span class="n">phen_path</span><span class="p">,</span> <span class="n">phenotype</span><span class="p">,</span> <span class="n">t</span><span class="p">)</span>
-</span><span id="map-796"><a href="#map-796"><span class="linenos">796</span></a>
-</span><span id="map-797"><a href="#map-797"><span class="linenos">797</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Phenotype processed successfully&quot;</span><span class="p">)</span>
-</span></pre></div>
-
-
-    
-
-                </section>
-                <section id="map_target_code_type">
-                            <input id="map_target_code_type-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
-<div class="attr function">
-            
-        <span class="def">def</span>
-        <span class="name">map_target_code_type</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">phen_path</span><span class="p">:</span> <span class="n">pathlib</span><span class="o">.</span><span class="n">Path</span>, </span><span class="param"><span class="n">phenotype</span><span class="p">:</span> <span class="nb">dict</span>, </span><span class="param"><span class="n">target_code_type</span><span class="p">:</span> <span class="nb">str</span></span><span class="return-annotation">):</span></span>
-
-                <label class="view-source-button" for="map_target_code_type-view-source"><span>View Source</span></label>
-
-    </div>
-    <a class="headerlink" href="#map_target_code_type"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="map_target_code_type-800"><a href="#map_target_code_type-800"><span class="linenos">800</span></a><span class="k">def</span><span class="w"> </span><span class="nf">map_target_code_type</span><span class="p">(</span><span class="n">phen_path</span><span class="p">:</span> <span class="n">Path</span><span class="p">,</span> <span class="n">phenotype</span><span class="p">:</span> <span class="nb">dict</span><span class="p">,</span> <span class="n">target_code_type</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
-</span><span id="map_target_code_type-801"><a href="#map_target_code_type-801"><span class="linenos">801</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Target coding format: </span><span class="si">{</span><span class="n">target_code_type</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="map_target_code_type-802"><a href="#map_target_code_type-802"><span class="linenos">802</span></a>    <span class="n">concepts_path</span> <span class="o">=</span> <span class="n">phen_path</span> <span class="o">/</span> <span class="n">CONCEPTS_DIR</span>
-</span><span id="map_target_code_type-803"><a href="#map_target_code_type-803"><span class="linenos">803</span></a>    <span class="c1"># Create output dataframe</span>
-</span><span id="map_target_code_type-804"><a href="#map_target_code_type-804"><span class="linenos">804</span></a>    <span class="n">out</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">([])</span>
-</span><span id="map_target_code_type-805"><a href="#map_target_code_type-805"><span class="linenos">805</span></a>    <span class="n">code_errors</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="map_target_code_type-806"><a href="#map_target_code_type-806"><span class="linenos">806</span></a>
-</span><span id="map_target_code_type-807"><a href="#map_target_code_type-807"><span class="linenos">807</span></a>    <span class="c1"># Process each folder in codes section</span>
-</span><span id="map_target_code_type-808"><a href="#map_target_code_type-808"><span class="linenos">808</span></a>    <span class="k">for</span> <span class="n">concept_set</span> <span class="ow">in</span> <span class="n">phenotype</span><span class="p">[</span><span class="s2">&quot;concept_sets&quot;</span><span class="p">]:</span>
-</span><span id="map_target_code_type-809"><a href="#map_target_code_type-809"><span class="linenos">809</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;--- </span><span class="si">{</span><span class="n">concept_set</span><span class="p">[</span><span class="s1">&#39;file&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2"> ---&quot;</span><span class="p">)</span>
-</span><span id="map_target_code_type-810"><a href="#map_target_code_type-810"><span class="linenos">810</span></a>
-</span><span id="map_target_code_type-811"><a href="#map_target_code_type-811"><span class="linenos">811</span></a>        <span class="c1"># Load code file</span>
-</span><span id="map_target_code_type-812"><a href="#map_target_code_type-812"><span class="linenos">812</span></a>        <span class="n">codes_file_path</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="n">concepts_path</span> <span class="o">/</span> <span class="n">concept_set</span><span class="p">[</span><span class="s2">&quot;file&quot;</span><span class="p">][</span><span class="s2">&quot;path&quot;</span><span class="p">])</span>
-</span><span id="map_target_code_type-813"><a href="#map_target_code_type-813"><span class="linenos">813</span></a>        <span class="n">df</span> <span class="o">=</span> <span class="n">read_table_file</span><span class="p">(</span><span class="n">codes_file_path</span><span class="p">)</span>
-</span><span id="map_target_code_type-814"><a href="#map_target_code_type-814"><span class="linenos">814</span></a>
-</span><span id="map_target_code_type-815"><a href="#map_target_code_type-815"><span class="linenos">815</span></a>        <span class="c1"># process structural actions</span>
-</span><span id="map_target_code_type-816"><a href="#map_target_code_type-816"><span class="linenos">816</span></a>        <span class="n">df</span> <span class="o">=</span> <span class="n">process_actions</span><span class="p">(</span><span class="n">df</span><span class="p">,</span> <span class="n">concept_set</span><span class="p">)</span>
-</span><span id="map_target_code_type-817"><a href="#map_target_code_type-817"><span class="linenos">817</span></a>
-</span><span id="map_target_code_type-818"><a href="#map_target_code_type-818"><span class="linenos">818</span></a>        <span class="c1"># preprocessing and validate of source concepts</span>
-</span><span id="map_target_code_type-819"><a href="#map_target_code_type-819"><span class="linenos">819</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">&quot;Processing and validating source concept codes&quot;</span><span class="p">)</span>
-</span><span id="map_target_code_type-820"><a href="#map_target_code_type-820"><span class="linenos">820</span></a>        <span class="n">df</span><span class="p">,</span> <span class="n">errors</span> <span class="o">=</span> <span class="n">preprocess_source_concepts</span><span class="p">(</span>
-</span><span id="map_target_code_type-821"><a href="#map_target_code_type-821"><span class="linenos">821</span></a>            <span class="n">df</span><span class="p">,</span>
-</span><span id="map_target_code_type-822"><a href="#map_target_code_type-822"><span class="linenos">822</span></a>            <span class="n">concept_set</span><span class="p">,</span>
-</span><span id="map_target_code_type-823"><a href="#map_target_code_type-823"><span class="linenos">823</span></a>            <span class="n">codes_file_path</span><span class="p">,</span>
-</span><span id="map_target_code_type-824"><a href="#map_target_code_type-824"><span class="linenos">824</span></a>        <span class="p">)</span>
-</span><span id="map_target_code_type-825"><a href="#map_target_code_type-825"><span class="linenos">825</span></a>
-</span><span id="map_target_code_type-826"><a href="#map_target_code_type-826"><span class="linenos">826</span></a>        <span class="c1"># create df with just the source code columns</span>
-</span><span id="map_target_code_type-827"><a href="#map_target_code_type-827"><span class="linenos">827</span></a>        <span class="n">source_column_names</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">concept_set</span><span class="p">[</span><span class="s2">&quot;file&quot;</span><span class="p">][</span><span class="s2">&quot;columns&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span>
-</span><span id="map_target_code_type-828"><a href="#map_target_code_type-828"><span class="linenos">828</span></a>        <span class="n">source_df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="n">source_column_names</span><span class="p">]</span>
-</span><span id="map_target_code_type-829"><a href="#map_target_code_type-829"><span class="linenos">829</span></a>
-</span><span id="map_target_code_type-830"><a href="#map_target_code_type-830"><span class="linenos">830</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">source_df</span><span class="o">.</span><span class="n">columns</span><span class="p">)</span>
-</span><span id="map_target_code_type-831"><a href="#map_target_code_type-831"><span class="linenos">831</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">source_df</span><span class="o">.</span><span class="n">head</span><span class="p">())</span>
-</span><span id="map_target_code_type-832"><a href="#map_target_code_type-832"><span class="linenos">832</span></a>
-</span><span id="map_target_code_type-833"><a href="#map_target_code_type-833"><span class="linenos">833</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Length of errors from preprocess_source_concepts </span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="n">errors</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="map_target_code_type-834"><a href="#map_target_code_type-834"><span class="linenos">834</span></a>        <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">errors</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
-</span><span id="map_target_code_type-835"><a href="#map_target_code_type-835"><span class="linenos">835</span></a>            <span class="n">code_errors</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">errors</span><span class="p">)</span>
-</span><span id="map_target_code_type-836"><a href="#map_target_code_type-836"><span class="linenos">836</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot; Length of code_errors </span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="n">code_errors</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="map_target_code_type-837"><a href="#map_target_code_type-837"><span class="linenos">837</span></a>
-</span><span id="map_target_code_type-838"><a href="#map_target_code_type-838"><span class="linenos">838</span></a>        <span class="c1"># Map source concepts codes to target codes</span>
-</span><span id="map_target_code_type-839"><a href="#map_target_code_type-839"><span class="linenos">839</span></a>        <span class="c1"># if processing a source coding list with categorical data</span>
-</span><span id="map_target_code_type-840"><a href="#map_target_code_type-840"><span class="linenos">840</span></a>        <span class="k">if</span> <span class="p">(</span>
-</span><span id="map_target_code_type-841"><a href="#map_target_code_type-841"><span class="linenos">841</span></a>            <span class="s2">&quot;actions&quot;</span> <span class="ow">in</span> <span class="n">concept_set</span><span class="p">[</span><span class="s2">&quot;file&quot;</span><span class="p">]</span>
-</span><span id="map_target_code_type-842"><a href="#map_target_code_type-842"><span class="linenos">842</span></a>            <span class="ow">and</span> <span class="s2">&quot;divide_col&quot;</span> <span class="ow">in</span> <span class="n">concept_set</span><span class="p">[</span><span class="s2">&quot;file&quot;</span><span class="p">][</span><span class="s2">&quot;actions&quot;</span><span class="p">]</span>
-</span><span id="map_target_code_type-843"><a href="#map_target_code_type-843"><span class="linenos">843</span></a>            <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">df</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span>
-</span><span id="map_target_code_type-844"><a href="#map_target_code_type-844"><span class="linenos">844</span></a>        <span class="p">):</span>
-</span><span id="map_target_code_type-845"><a href="#map_target_code_type-845"><span class="linenos">845</span></a>            <span class="n">divide_col</span> <span class="o">=</span> <span class="n">concept_set</span><span class="p">[</span><span class="s2">&quot;file&quot;</span><span class="p">][</span><span class="s2">&quot;actions&quot;</span><span class="p">][</span><span class="s2">&quot;divide_col&quot;</span><span class="p">]</span>
-</span><span id="map_target_code_type-846"><a href="#map_target_code_type-846"><span class="linenos">846</span></a>            <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Action: Dividing Table by </span><span class="si">{</span><span class="n">divide_col</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="map_target_code_type-847"><a href="#map_target_code_type-847"><span class="linenos">847</span></a>            <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;column into: </span><span class="si">{</span><span class="n">df</span><span class="p">[</span><span class="n">divide_col</span><span class="p">]</span><span class="o">.</span><span class="n">unique</span><span class="p">()</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="map_target_code_type-848"><a href="#map_target_code_type-848"><span class="linenos">848</span></a>            <span class="n">df_grp</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">groupby</span><span class="p">(</span><span class="n">divide_col</span><span class="p">)</span>
-</span><span id="map_target_code_type-849"><a href="#map_target_code_type-849"><span class="linenos">849</span></a>            <span class="k">for</span> <span class="n">cat</span><span class="p">,</span> <span class="n">grp</span> <span class="ow">in</span> <span class="n">df_grp</span><span class="p">:</span>
-</span><span id="map_target_code_type-850"><a href="#map_target_code_type-850"><span class="linenos">850</span></a>                <span class="k">if</span> <span class="n">cat</span> <span class="o">==</span> <span class="n">concept_set</span><span class="p">[</span><span class="s2">&quot;file&quot;</span><span class="p">][</span><span class="s2">&quot;category&quot;</span><span class="p">]:</span>
-</span><span id="map_target_code_type-851"><a href="#map_target_code_type-851"><span class="linenos">851</span></a>                    <span class="n">grp</span> <span class="o">=</span> <span class="n">grp</span><span class="o">.</span><span class="n">drop</span><span class="p">(</span><span class="n">columns</span><span class="o">=</span><span class="p">[</span><span class="n">divide_col</span><span class="p">])</span>  <span class="c1"># delete categorical column</span>
-</span><span id="map_target_code_type-852"><a href="#map_target_code_type-852"><span class="linenos">852</span></a>                    <span class="n">source_df</span> <span class="o">=</span> <span class="n">grp</span><span class="p">[</span><span class="n">source_column_names</span><span class="p">]</span>
-</span><span id="map_target_code_type-853"><a href="#map_target_code_type-853"><span class="linenos">853</span></a>                    <span class="n">trans_out</span> <span class="o">=</span> <span class="n">translate_codes</span><span class="p">(</span>
-</span><span id="map_target_code_type-854"><a href="#map_target_code_type-854"><span class="linenos">854</span></a>                        <span class="n">source_df</span><span class="p">,</span>
-</span><span id="map_target_code_type-855"><a href="#map_target_code_type-855"><span class="linenos">855</span></a>                        <span class="n">target_code_type</span><span class="o">=</span><span class="n">target_code_type</span><span class="p">,</span>
-</span><span id="map_target_code_type-856"><a href="#map_target_code_type-856"><span class="linenos">856</span></a>                        <span class="n">concept_name</span><span class="o">=</span><span class="n">concept_set</span><span class="p">[</span><span class="s2">&quot;name&quot;</span><span class="p">],</span>
-</span><span id="map_target_code_type-857"><a href="#map_target_code_type-857"><span class="linenos">857</span></a>                    <span class="p">)</span>
-</span><span id="map_target_code_type-858"><a href="#map_target_code_type-858"><span class="linenos">858</span></a>                    <span class="n">out</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">concat</span><span class="p">([</span><span class="n">out</span><span class="p">,</span> <span class="n">trans_out</span><span class="p">])</span>
-</span><span id="map_target_code_type-859"><a href="#map_target_code_type-859"><span class="linenos">859</span></a>        <span class="k">else</span><span class="p">:</span>
-</span><span id="map_target_code_type-860"><a href="#map_target_code_type-860"><span class="linenos">860</span></a>            <span class="n">source_df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="n">source_column_names</span><span class="p">]</span>
-</span><span id="map_target_code_type-861"><a href="#map_target_code_type-861"><span class="linenos">861</span></a>            <span class="n">trans_out</span> <span class="o">=</span> <span class="n">translate_codes</span><span class="p">(</span>
-</span><span id="map_target_code_type-862"><a href="#map_target_code_type-862"><span class="linenos">862</span></a>                <span class="n">source_df</span><span class="p">,</span>
-</span><span id="map_target_code_type-863"><a href="#map_target_code_type-863"><span class="linenos">863</span></a>                <span class="n">target_code_type</span><span class="o">=</span><span class="n">target_code_type</span><span class="p">,</span>
-</span><span id="map_target_code_type-864"><a href="#map_target_code_type-864"><span class="linenos">864</span></a>                <span class="n">concept_name</span><span class="o">=</span><span class="n">concept_set</span><span class="p">[</span><span class="s2">&quot;name&quot;</span><span class="p">],</span>
-</span><span id="map_target_code_type-865"><a href="#map_target_code_type-865"><span class="linenos">865</span></a>            <span class="p">)</span>
-</span><span id="map_target_code_type-866"><a href="#map_target_code_type-866"><span class="linenos">866</span></a>            <span class="n">out</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">concat</span><span class="p">([</span><span class="n">out</span><span class="p">,</span> <span class="n">trans_out</span><span class="p">])</span>
-</span><span id="map_target_code_type-867"><a href="#map_target_code_type-867"><span class="linenos">867</span></a>
-</span><span id="map_target_code_type-868"><a href="#map_target_code_type-868"><span class="linenos">868</span></a>    <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">code_errors</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
-</span><span id="map_target_code_type-869"><a href="#map_target_code_type-869"><span class="linenos">869</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;The map processing has </span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="n">code_errors</span><span class="p">)</span><span class="si">}</span><span class="s2"> errors&quot;</span><span class="p">)</span>
-</span><span id="map_target_code_type-870"><a href="#map_target_code_type-870"><span class="linenos">870</span></a>        <span class="n">error_path</span> <span class="o">=</span> <span class="n">phen_path</span> <span class="o">/</span> <span class="n">MAP_DIR</span> <span class="o">/</span> <span class="s2">&quot;errors&quot;</span>
-</span><span id="map_target_code_type-871"><a href="#map_target_code_type-871"><span class="linenos">871</span></a>        <span class="n">error_path</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">parents</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="map_target_code_type-872"><a href="#map_target_code_type-872"><span class="linenos">872</span></a>        <span class="n">error_filename</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">target_code_type</span><span class="si">}</span><span class="s2">-code-errors.csv&quot;</span>
-</span><span id="map_target_code_type-873"><a href="#map_target_code_type-873"><span class="linenos">873</span></a>        <span class="n">write_code_errors</span><span class="p">(</span><span class="n">code_errors</span><span class="p">,</span> <span class="n">error_path</span> <span class="o">/</span> <span class="n">error_filename</span><span class="p">)</span>
-</span><span id="map_target_code_type-874"><a href="#map_target_code_type-874"><span class="linenos">874</span></a>
-</span><span id="map_target_code_type-875"><a href="#map_target_code_type-875"><span class="linenos">875</span></a>    <span class="c1"># Check there is output from processing</span>
-</span><span id="map_target_code_type-876"><a href="#map_target_code_type-876"><span class="linenos">876</span></a>    <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">out</span><span class="o">.</span><span class="n">index</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
-</span><span id="map_target_code_type-877"><a href="#map_target_code_type-877"><span class="linenos">877</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;No output after map processing&quot;</span><span class="p">)</span>
-</span><span id="map_target_code_type-878"><a href="#map_target_code_type-878"><span class="linenos">878</span></a>        <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span>
-</span><span id="map_target_code_type-879"><a href="#map_target_code_type-879"><span class="linenos">879</span></a>            <span class="sa">f</span><span class="s2">&quot;No output after map processing, check config </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">phen_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="map_target_code_type-880"><a href="#map_target_code_type-880"><span class="linenos">880</span></a>        <span class="p">)</span>
-</span><span id="map_target_code_type-881"><a href="#map_target_code_type-881"><span class="linenos">881</span></a>
-</span><span id="map_target_code_type-882"><a href="#map_target_code_type-882"><span class="linenos">882</span></a>    <span class="c1"># final processing</span>
-</span><span id="map_target_code_type-883"><a href="#map_target_code_type-883"><span class="linenos">883</span></a>    <span class="n">out</span> <span class="o">=</span> <span class="n">out</span><span class="o">.</span><span class="n">reset_index</span><span class="p">(</span><span class="n">drop</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="map_target_code_type-884"><a href="#map_target_code_type-884"><span class="linenos">884</span></a>    <span class="n">out</span> <span class="o">=</span> <span class="n">out</span><span class="o">.</span><span class="n">drop_duplicates</span><span class="p">(</span><span class="n">subset</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;CONCEPT_SET&quot;</span><span class="p">,</span> <span class="s2">&quot;CONCEPT&quot;</span><span class="p">])</span>
-</span><span id="map_target_code_type-885"><a href="#map_target_code_type-885"><span class="linenos">885</span></a>    <span class="n">out</span> <span class="o">=</span> <span class="n">out</span><span class="o">.</span><span class="n">sort_values</span><span class="p">(</span><span class="n">by</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;CONCEPT_SET&quot;</span><span class="p">,</span> <span class="s2">&quot;CONCEPT&quot;</span><span class="p">])</span>
-</span><span id="map_target_code_type-886"><a href="#map_target_code_type-886"><span class="linenos">886</span></a>
-</span><span id="map_target_code_type-887"><a href="#map_target_code_type-887"><span class="linenos">887</span></a>    <span class="n">out_count</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">out</span><span class="o">.</span><span class="n">index</span><span class="p">)</span>
-</span><span id="map_target_code_type-888"><a href="#map_target_code_type-888"><span class="linenos">888</span></a>    <span class="c1"># added metadata</span>
-</span><span id="map_target_code_type-889"><a href="#map_target_code_type-889"><span class="linenos">889</span></a>    <span class="c1"># Loop over each source_concept_type and perform the left join on all columns apart from source code columns</span>
-</span><span id="map_target_code_type-890"><a href="#map_target_code_type-890"><span class="linenos">890</span></a>    <span class="n">result_list</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="map_target_code_type-891"><a href="#map_target_code_type-891"><span class="linenos">891</span></a>    <span class="n">source_column_names</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">concept_set</span><span class="p">[</span><span class="s2">&quot;file&quot;</span><span class="p">][</span><span class="s2">&quot;columns&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span>
-</span><span id="map_target_code_type-892"><a href="#map_target_code_type-892"><span class="linenos">892</span></a>    <span class="k">for</span> <span class="n">source_concept_type</span> <span class="ow">in</span> <span class="n">source_column_names</span><span class="p">:</span>
-</span><span id="map_target_code_type-893"><a href="#map_target_code_type-893"><span class="linenos">893</span></a>        <span class="c1"># Filter output based on the current source_concept_type</span>
-</span><span id="map_target_code_type-894"><a href="#map_target_code_type-894"><span class="linenos">894</span></a>        <span class="n">out_filtered_df</span> <span class="o">=</span> <span class="n">out</span><span class="p">[</span><span class="n">out</span><span class="p">[</span><span class="s2">&quot;SOURCE_CONCEPT_TYPE&quot;</span><span class="p">]</span> <span class="o">==</span> <span class="n">source_concept_type</span><span class="p">]</span>
-</span><span id="map_target_code_type-895"><a href="#map_target_code_type-895"><span class="linenos">895</span></a>        <span class="n">filtered_count</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">out_filtered_df</span><span class="o">.</span><span class="n">index</span><span class="p">)</span>
-</span><span id="map_target_code_type-896"><a href="#map_target_code_type-896"><span class="linenos">896</span></a>
-</span><span id="map_target_code_type-897"><a href="#map_target_code_type-897"><span class="linenos">897</span></a>        <span class="c1"># Remove the source type columns except the current type will leave the metadata and the join</span>
-</span><span id="map_target_code_type-898"><a href="#map_target_code_type-898"><span class="linenos">898</span></a>        <span class="n">remove_types</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="map_target_code_type-899"><a href="#map_target_code_type-899"><span class="linenos">899</span></a>            <span class="nb">type</span> <span class="k">for</span> <span class="nb">type</span> <span class="ow">in</span> <span class="n">source_column_names</span> <span class="k">if</span> <span class="nb">type</span> <span class="o">!=</span> <span class="n">source_concept_type</span>
-</span><span id="map_target_code_type-900"><a href="#map_target_code_type-900"><span class="linenos">900</span></a>        <span class="p">]</span>
-</span><span id="map_target_code_type-901"><a href="#map_target_code_type-901"><span class="linenos">901</span></a>        <span class="n">metadata_df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">drop</span><span class="p">(</span><span class="n">columns</span><span class="o">=</span><span class="n">remove_types</span><span class="p">)</span>
-</span><span id="map_target_code_type-902"><a href="#map_target_code_type-902"><span class="linenos">902</span></a>        <span class="n">metadata_df</span> <span class="o">=</span> <span class="n">metadata_df</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span>
-</span><span id="map_target_code_type-903"><a href="#map_target_code_type-903"><span class="linenos">903</span></a>            <span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="n">source_concept_type</span><span class="p">:</span> <span class="s2">&quot;SOURCE_CONCEPT&quot;</span><span class="p">}</span>
-</span><span id="map_target_code_type-904"><a href="#map_target_code_type-904"><span class="linenos">904</span></a>        <span class="p">)</span>
-</span><span id="map_target_code_type-905"><a href="#map_target_code_type-905"><span class="linenos">905</span></a>        <span class="n">metadata_df_count</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">metadata_df</span><span class="o">.</span><span class="n">index</span><span class="p">)</span>
-</span><span id="map_target_code_type-906"><a href="#map_target_code_type-906"><span class="linenos">906</span></a>
-</span><span id="map_target_code_type-907"><a href="#map_target_code_type-907"><span class="linenos">907</span></a>        <span class="c1"># Perform the left join with df2 on SOURCE_CONCEPT to add the metadata</span>
-</span><span id="map_target_code_type-908"><a href="#map_target_code_type-908"><span class="linenos">908</span></a>        <span class="n">result</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">merge</span><span class="p">(</span><span class="n">out_filtered_df</span><span class="p">,</span> <span class="n">metadata_df</span><span class="p">,</span> <span class="n">how</span><span class="o">=</span><span class="s2">&quot;left&quot;</span><span class="p">,</span> <span class="n">on</span><span class="o">=</span><span class="s2">&quot;SOURCE_CONCEPT&quot;</span><span class="p">)</span>
-</span><span id="map_target_code_type-909"><a href="#map_target_code_type-909"><span class="linenos">909</span></a>        <span class="n">result_count</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">result</span><span class="o">.</span><span class="n">index</span><span class="p">)</span>
-</span><span id="map_target_code_type-910"><a href="#map_target_code_type-910"><span class="linenos">910</span></a>
-</span><span id="map_target_code_type-911"><a href="#map_target_code_type-911"><span class="linenos">911</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span>
-</span><span id="map_target_code_type-912"><a href="#map_target_code_type-912"><span class="linenos">912</span></a>            <span class="sa">f</span><span class="s2">&quot;Adding metadata for </span><span class="si">{</span><span class="n">source_concept_type</span><span class="si">}</span><span class="s2">: out_count </span><span class="si">{</span><span class="n">out_count</span><span class="si">}</span><span class="s2">, filtered_count </span><span class="si">{</span><span class="n">filtered_count</span><span class="si">}</span><span class="s2">, metadata_df_count </span><span class="si">{</span><span class="n">metadata_df_count</span><span class="si">}</span><span class="s2">, result_count </span><span class="si">{</span><span class="n">result_count</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="map_target_code_type-913"><a href="#map_target_code_type-913"><span class="linenos">913</span></a>        <span class="p">)</span>
-</span><span id="map_target_code_type-914"><a href="#map_target_code_type-914"><span class="linenos">914</span></a>
-</span><span id="map_target_code_type-915"><a href="#map_target_code_type-915"><span class="linenos">915</span></a>        <span class="c1"># Append the result to the result_list</span>
-</span><span id="map_target_code_type-916"><a href="#map_target_code_type-916"><span class="linenos">916</span></a>        <span class="n">result_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
-</span><span id="map_target_code_type-917"><a href="#map_target_code_type-917"><span class="linenos">917</span></a>
-</span><span id="map_target_code_type-918"><a href="#map_target_code_type-918"><span class="linenos">918</span></a>    <span class="c1"># Concatenate all the results into a single DataFrame</span>
-</span><span id="map_target_code_type-919"><a href="#map_target_code_type-919"><span class="linenos">919</span></a>    <span class="n">final_out</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">concat</span><span class="p">(</span><span class="n">result_list</span><span class="p">,</span> <span class="n">ignore_index</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="map_target_code_type-920"><a href="#map_target_code_type-920"><span class="linenos">920</span></a>    <span class="n">final_out</span> <span class="o">=</span> <span class="n">final_out</span><span class="o">.</span><span class="n">drop_duplicates</span><span class="p">(</span><span class="n">subset</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;CONCEPT_SET&quot;</span><span class="p">,</span> <span class="s2">&quot;CONCEPT&quot;</span><span class="p">])</span>
-</span><span id="map_target_code_type-921"><a href="#map_target_code_type-921"><span class="linenos">921</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span>
-</span><span id="map_target_code_type-922"><a href="#map_target_code_type-922"><span class="linenos">922</span></a>        <span class="sa">f</span><span class="s2">&quot;Check metadata processing counts: before </span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="n">out</span><span class="o">.</span><span class="n">index</span><span class="p">)</span><span class="si">}</span><span class="s2"> : after </span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="n">final_out</span><span class="o">.</span><span class="n">index</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="map_target_code_type-923"><a href="#map_target_code_type-923"><span class="linenos">923</span></a>    <span class="p">)</span>
-</span><span id="map_target_code_type-924"><a href="#map_target_code_type-924"><span class="linenos">924</span></a>
-</span><span id="map_target_code_type-925"><a href="#map_target_code_type-925"><span class="linenos">925</span></a>    <span class="c1"># Save output to map directory</span>
-</span><span id="map_target_code_type-926"><a href="#map_target_code_type-926"><span class="linenos">926</span></a>    <span class="n">output_filename</span> <span class="o">=</span> <span class="n">target_code_type</span> <span class="o">+</span> <span class="s2">&quot;.csv&quot;</span>
-</span><span id="map_target_code_type-927"><a href="#map_target_code_type-927"><span class="linenos">927</span></a>    <span class="n">map_path</span> <span class="o">=</span> <span class="n">phen_path</span> <span class="o">/</span> <span class="n">MAP_DIR</span> <span class="o">/</span> <span class="n">output_filename</span>
-</span><span id="map_target_code_type-928"><a href="#map_target_code_type-928"><span class="linenos">928</span></a>    <span class="n">final_out</span><span class="o">.</span><span class="n">to_csv</span><span class="p">(</span><span class="n">map_path</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="map_target_code_type-929"><a href="#map_target_code_type-929"><span class="linenos">929</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Saved mapped concepts to </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">map_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="map_target_code_type-930"><a href="#map_target_code_type-930"><span class="linenos">930</span></a>
-</span><span id="map_target_code_type-931"><a href="#map_target_code_type-931"><span class="linenos">931</span></a>    <span class="c1"># save concept sets as separate files</span>
-</span><span id="map_target_code_type-932"><a href="#map_target_code_type-932"><span class="linenos">932</span></a>    <span class="n">concept_set_path</span> <span class="o">=</span> <span class="n">phen_path</span> <span class="o">/</span> <span class="n">CSV_PATH</span> <span class="o">/</span> <span class="n">target_code_type</span>
-</span><span id="map_target_code_type-933"><a href="#map_target_code_type-933"><span class="linenos">933</span></a>
-</span><span id="map_target_code_type-934"><a href="#map_target_code_type-934"><span class="linenos">934</span></a>    <span class="c1"># empty the concept-set directory except for hiddle files, e.g. .git</span>
-</span><span id="map_target_code_type-935"><a href="#map_target_code_type-935"><span class="linenos">935</span></a>    <span class="k">if</span> <span class="n">concept_set_path</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
-</span><span id="map_target_code_type-936"><a href="#map_target_code_type-936"><span class="linenos">936</span></a>        <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">concept_set_path</span><span class="o">.</span><span class="n">iterdir</span><span class="p">():</span>
-</span><span id="map_target_code_type-937"><a href="#map_target_code_type-937"><span class="linenos">937</span></a>            <span class="k">if</span> <span class="ow">not</span> <span class="n">item</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;.&quot;</span><span class="p">):</span>
-</span><span id="map_target_code_type-938"><a href="#map_target_code_type-938"><span class="linenos">938</span></a>                <span class="n">item</span><span class="o">.</span><span class="n">unlink</span><span class="p">()</span>
-</span><span id="map_target_code_type-939"><a href="#map_target_code_type-939"><span class="linenos">939</span></a>    <span class="k">else</span><span class="p">:</span>
-</span><span id="map_target_code_type-940"><a href="#map_target_code_type-940"><span class="linenos">940</span></a>        <span class="n">concept_set_path</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">parents</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="map_target_code_type-941"><a href="#map_target_code_type-941"><span class="linenos">941</span></a>
-</span><span id="map_target_code_type-942"><a href="#map_target_code_type-942"><span class="linenos">942</span></a>    <span class="c1"># write each concept as a separate file</span>
-</span><span id="map_target_code_type-943"><a href="#map_target_code_type-943"><span class="linenos">943</span></a>    <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">concept</span> <span class="ow">in</span> <span class="n">final_out</span><span class="o">.</span><span class="n">groupby</span><span class="p">(</span><span class="s2">&quot;CONCEPT_SET&quot;</span><span class="p">):</span>
-</span><span id="map_target_code_type-944"><a href="#map_target_code_type-944"><span class="linenos">944</span></a>        <span class="n">concept</span> <span class="o">=</span> <span class="n">concept</span><span class="o">.</span><span class="n">sort_values</span><span class="p">(</span><span class="n">by</span><span class="o">=</span><span class="s2">&quot;CONCEPT&quot;</span><span class="p">)</span>  <span class="c1"># sort rows</span>
-</span><span id="map_target_code_type-945"><a href="#map_target_code_type-945"><span class="linenos">945</span></a>        <span class="n">concept</span> <span class="o">=</span> <span class="n">concept</span><span class="o">.</span><span class="n">dropna</span><span class="p">(</span><span class="n">how</span><span class="o">=</span><span class="s2">&quot;all&quot;</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>  <span class="c1"># remove empty cols</span>
-</span><span id="map_target_code_type-946"><a href="#map_target_code_type-946"><span class="linenos">946</span></a>        <span class="n">concept</span> <span class="o">=</span> <span class="n">concept</span><span class="o">.</span><span class="n">reindex</span><span class="p">(</span>
-</span><span id="map_target_code_type-947"><a href="#map_target_code_type-947"><span class="linenos">947</span></a>            <span class="nb">sorted</span><span class="p">(</span><span class="n">concept</span><span class="o">.</span><span class="n">columns</span><span class="p">),</span> <span class="n">axis</span><span class="o">=</span><span class="mi">1</span>
-</span><span id="map_target_code_type-948"><a href="#map_target_code_type-948"><span class="linenos">948</span></a>        <span class="p">)</span>  <span class="c1"># sort cols alphabetically</span>
-</span><span id="map_target_code_type-949"><a href="#map_target_code_type-949"><span class="linenos">949</span></a>        <span class="n">filename</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">.csv&quot;</span>
-</span><span id="map_target_code_type-950"><a href="#map_target_code_type-950"><span class="linenos">950</span></a>        <span class="n">concept_path</span> <span class="o">=</span> <span class="n">concept_set_path</span> <span class="o">/</span> <span class="n">filename</span>
-</span><span id="map_target_code_type-951"><a href="#map_target_code_type-951"><span class="linenos">951</span></a>        <span class="n">concept</span><span class="o">.</span><span class="n">to_csv</span><span class="p">(</span><span class="n">concept_path</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="map_target_code_type-952"><a href="#map_target_code_type-952"><span class="linenos">952</span></a>
-</span><span id="map_target_code_type-953"><a href="#map_target_code_type-953"><span class="linenos">953</span></a>    <span class="n">write_vocab_version</span><span class="p">(</span><span class="n">phen_path</span><span class="p">)</span>
-</span><span id="map_target_code_type-954"><a href="#map_target_code_type-954"><span class="linenos">954</span></a>
-</span><span id="map_target_code_type-955"><a href="#map_target_code_type-955"><span class="linenos">955</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Phenotype processed target code type </span><span class="si">{</span><span class="n">target_code_type</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span></pre></div>
-
-
-    
-
-                </section>
-                <section id="generate_version_tag">
-                            <input id="generate_version_tag-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
-<div class="attr function">
-            
-        <span class="def">def</span>
-        <span class="name">generate_version_tag</span><span class="signature pdoc-code multiline">(<span class="param">	<span class="n">repo</span><span class="p">:</span> <span class="n">git</span><span class="o">.</span><span class="n">repo</span><span class="o">.</span><span class="n">base</span><span class="o">.</span><span class="n">Repo</span>,</span><span class="param">	<span class="n">increment</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s1">&#39;patch&#39;</span>,</span><span class="param">	<span class="n">use_v_prefix</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
-
-                <label class="view-source-button" for="generate_version_tag-view-source"><span>View Source</span></label>
-
-    </div>
-    <a class="headerlink" href="#generate_version_tag"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="generate_version_tag-958"><a href="#generate_version_tag-958"><span class="linenos">958</span></a><span class="k">def</span><span class="w"> </span><span class="nf">generate_version_tag</span><span class="p">(</span>
-</span><span id="generate_version_tag-959"><a href="#generate_version_tag-959"><span class="linenos">959</span></a>    <span class="n">repo</span><span class="p">:</span> <span class="n">git</span><span class="o">.</span><span class="n">Repo</span><span class="p">,</span> <span class="n">increment</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="n">DEFAULT_VERSION_INC</span><span class="p">,</span> <span class="n">use_v_prefix</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="generate_version_tag-960"><a href="#generate_version_tag-960"><span class="linenos">960</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="generate_version_tag-961"><a href="#generate_version_tag-961"><span class="linenos">961</span></a>    <span class="c1"># Get all valid semantic version tags</span>
-</span><span id="generate_version_tag-962"><a href="#generate_version_tag-962"><span class="linenos">962</span></a>    <span class="n">versions</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="generate_version_tag-963"><a href="#generate_version_tag-963"><span class="linenos">963</span></a>    <span class="k">for</span> <span class="n">tag</span> <span class="ow">in</span> <span class="n">repo</span><span class="o">.</span><span class="n">tags</span><span class="p">:</span>
-</span><span id="generate_version_tag-964"><a href="#generate_version_tag-964"><span class="linenos">964</span></a>        <span class="n">tag_name</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="generate_version_tag-965"><a href="#generate_version_tag-965"><span class="linenos">965</span></a>            <span class="n">tag</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">lstrip</span><span class="p">(</span><span class="s2">&quot;v&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">use_v_prefix</span> <span class="k">else</span> <span class="n">tag</span><span class="o">.</span><span class="n">name</span>
-</span><span id="generate_version_tag-966"><a href="#generate_version_tag-966"><span class="linenos">966</span></a>        <span class="p">)</span>  <span class="c1"># Remove &#39;v&#39; if needed</span>
-</span><span id="generate_version_tag-967"><a href="#generate_version_tag-967"><span class="linenos">967</span></a>        <span class="k">if</span> <span class="n">semver</span><span class="o">.</span><span class="n">Version</span><span class="o">.</span><span class="n">is_valid</span><span class="p">(</span><span class="n">tag_name</span><span class="p">):</span>
-</span><span id="generate_version_tag-968"><a href="#generate_version_tag-968"><span class="linenos">968</span></a>            <span class="n">versions</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">semver</span><span class="o">.</span><span class="n">Version</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">tag_name</span><span class="p">))</span>
-</span><span id="generate_version_tag-969"><a href="#generate_version_tag-969"><span class="linenos">969</span></a>
-</span><span id="generate_version_tag-970"><a href="#generate_version_tag-970"><span class="linenos">970</span></a>    <span class="c1"># Determine the next version</span>
-</span><span id="generate_version_tag-971"><a href="#generate_version_tag-971"><span class="linenos">971</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">versions</span><span class="p">:</span>
-</span><span id="generate_version_tag-972"><a href="#generate_version_tag-972"><span class="linenos">972</span></a>        <span class="n">new_version</span> <span class="o">=</span> <span class="n">semver</span><span class="o">.</span><span class="n">Version</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
-</span><span id="generate_version_tag-973"><a href="#generate_version_tag-973"><span class="linenos">973</span></a>    <span class="k">else</span><span class="p">:</span>
-</span><span id="generate_version_tag-974"><a href="#generate_version_tag-974"><span class="linenos">974</span></a>        <span class="n">latest_version</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">versions</span><span class="p">)</span>
-</span><span id="generate_version_tag-975"><a href="#generate_version_tag-975"><span class="linenos">975</span></a>        <span class="k">if</span> <span class="n">increment</span> <span class="o">==</span> <span class="s2">&quot;major&quot;</span><span class="p">:</span>
-</span><span id="generate_version_tag-976"><a href="#generate_version_tag-976"><span class="linenos">976</span></a>            <span class="n">new_version</span> <span class="o">=</span> <span class="n">latest_version</span><span class="o">.</span><span class="n">bump_major</span><span class="p">()</span>
-</span><span id="generate_version_tag-977"><a href="#generate_version_tag-977"><span class="linenos">977</span></a>        <span class="k">elif</span> <span class="n">increment</span> <span class="o">==</span> <span class="s2">&quot;minor&quot;</span><span class="p">:</span>
-</span><span id="generate_version_tag-978"><a href="#generate_version_tag-978"><span class="linenos">978</span></a>            <span class="n">new_version</span> <span class="o">=</span> <span class="n">latest_version</span><span class="o">.</span><span class="n">bump_minor</span><span class="p">()</span>
-</span><span id="generate_version_tag-979"><a href="#generate_version_tag-979"><span class="linenos">979</span></a>        <span class="k">else</span><span class="p">:</span>
-</span><span id="generate_version_tag-980"><a href="#generate_version_tag-980"><span class="linenos">980</span></a>            <span class="n">new_version</span> <span class="o">=</span> <span class="n">latest_version</span><span class="o">.</span><span class="n">bump_patch</span><span class="p">()</span>
-</span><span id="generate_version_tag-981"><a href="#generate_version_tag-981"><span class="linenos">981</span></a>
-</span><span id="generate_version_tag-982"><a href="#generate_version_tag-982"><span class="linenos">982</span></a>    <span class="c1"># Create the new tag</span>
-</span><span id="generate_version_tag-983"><a href="#generate_version_tag-983"><span class="linenos">983</span></a>    <span class="n">new_version_str</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;v</span><span class="si">{</span><span class="n">new_version</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">use_v_prefix</span> <span class="k">else</span> <span class="nb">str</span><span class="p">(</span><span class="n">new_version</span><span class="p">)</span>
-</span><span id="generate_version_tag-984"><a href="#generate_version_tag-984"><span class="linenos">984</span></a>
-</span><span id="generate_version_tag-985"><a href="#generate_version_tag-985"><span class="linenos">985</span></a>    <span class="k">return</span> <span class="n">new_version_str</span>
+            <div class="pdoc-code codehilite"><pre><span></span><span id="map-778"><a href="#map-778"><span class="linenos">778</span></a><span class="k">def</span><span class="w"> </span><span class="nf">map</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">target_code_type</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
+</span><span id="map-779"><a href="#map-779"><span class="linenos">779</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Processing phenotype: </span><span class="si">{</span><span class="n">phen_dir</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="map-780"><a href="#map-780"><span class="linenos">780</span></a>
+</span><span id="map-781"><a href="#map-781"><span class="linenos">781</span></a>    <span class="c1"># Validate configuration</span>
+</span><span id="map-782"><a href="#map-782"><span class="linenos">782</span></a>    <span class="n">validate</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">)</span>
+</span><span id="map-783"><a href="#map-783"><span class="linenos">783</span></a>
+</span><span id="map-784"><a href="#map-784"><span class="linenos">784</span></a>    <span class="c1"># initialise paths</span>
+</span><span id="map-785"><a href="#map-785"><span class="linenos">785</span></a>    <span class="n">phen_path</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">)</span>
+</span><span id="map-786"><a href="#map-786"><span class="linenos">786</span></a>    <span class="n">config_path</span> <span class="o">=</span> <span class="n">phen_path</span> <span class="o">/</span> <span class="n">CONFIG_FILE</span>
+</span><span id="map-787"><a href="#map-787"><span class="linenos">787</span></a>
+</span><span id="map-788"><a href="#map-788"><span class="linenos">788</span></a>    <span class="c1"># load configuration</span>
+</span><span id="map-789"><a href="#map-789"><span class="linenos">789</span></a>    <span class="k">with</span> <span class="n">config_path</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="s2">&quot;r&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
+</span><span id="map-790"><a href="#map-790"><span class="linenos">790</span></a>        <span class="n">config</span> <span class="o">=</span> <span class="n">yaml</span><span class="o">.</span><span class="n">safe_load</span><span class="p">(</span><span class="n">file</span><span class="p">)</span>
+</span><span id="map-791"><a href="#map-791"><span class="linenos">791</span></a>    <span class="n">phenotype</span> <span class="o">=</span> <span class="n">config</span><span class="p">[</span><span class="s2">&quot;phenotype&quot;</span><span class="p">]</span>
+</span><span id="map-792"><a href="#map-792"><span class="linenos">792</span></a>
+</span><span id="map-793"><a href="#map-793"><span class="linenos">793</span></a>    <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">phenotype</span><span class="p">[</span><span class="s2">&quot;map&quot;</span><span class="p">])</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
+</span><span id="map-794"><a href="#map-794"><span class="linenos">794</span></a>        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;No map codes defined in the phenotype configuration&quot;</span><span class="p">)</span>
+</span><span id="map-795"><a href="#map-795"><span class="linenos">795</span></a>
+</span><span id="map-796"><a href="#map-796"><span class="linenos">796</span></a>    <span class="k">if</span> <span class="n">target_code_type</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">target_code_type</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">phenotype</span><span class="p">[</span><span class="s2">&quot;map&quot;</span><span class="p">]:</span>
+</span><span id="map-797"><a href="#map-797"><span class="linenos">797</span></a>        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
+</span><span id="map-798"><a href="#map-798"><span class="linenos">798</span></a>            <span class="sa">f</span><span class="s2">&quot;Target code type </span><span class="si">{</span><span class="n">target_code_type</span><span class="si">}</span><span class="s2"> not in phenotype configuration map </span><span class="si">{</span><span class="n">phenotype</span><span class="p">[</span><span class="s1">&#39;map&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="map-799"><a href="#map-799"><span class="linenos">799</span></a>        <span class="p">)</span>
+</span><span id="map-800"><a href="#map-800"><span class="linenos">800</span></a>
+</span><span id="map-801"><a href="#map-801"><span class="linenos">801</span></a>    <span class="k">if</span> <span class="n">target_code_type</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="map-802"><a href="#map-802"><span class="linenos">802</span></a>        <span class="n">_map_target_code_type</span><span class="p">(</span><span class="n">phen_path</span><span class="p">,</span> <span class="n">phenotype</span><span class="p">,</span> <span class="n">target_code_type</span><span class="p">)</span>
+</span><span id="map-803"><a href="#map-803"><span class="linenos">803</span></a>    <span class="k">else</span><span class="p">:</span>
+</span><span id="map-804"><a href="#map-804"><span class="linenos">804</span></a>        <span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">phenotype</span><span class="p">[</span><span class="s2">&quot;map&quot;</span><span class="p">]:</span>
+</span><span id="map-805"><a href="#map-805"><span class="linenos">805</span></a>            <span class="n">_map_target_code_type</span><span class="p">(</span><span class="n">phen_path</span><span class="p">,</span> <span class="n">phenotype</span><span class="p">,</span> <span class="n">t</span><span class="p">)</span>
+</span><span id="map-806"><a href="#map-806"><span class="linenos">806</span></a>
+</span><span id="map-807"><a href="#map-807"><span class="linenos">807</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Phenotype processed successfully&quot;</span><span class="p">)</span>
 </span></pre></div>
 
 
@@ -3134,84 +2532,84 @@
 
     </div>
     <a class="headerlink" href="#publish"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="publish-988"><a href="#publish-988"><span class="linenos"> 988</span></a><span class="k">def</span><span class="w"> </span><span class="nf">publish</span><span class="p">(</span>
-</span><span id="publish-989"><a href="#publish-989"><span class="linenos"> 989</span></a>    <span class="n">phen_dir</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">msg</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">remote_url</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">increment</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="n">DEFAULT_VERSION_INC</span>
-</span><span id="publish-990"><a href="#publish-990"><span class="linenos"> 990</span></a><span class="p">):</span>
-</span><span id="publish-991"><a href="#publish-991"><span class="linenos"> 991</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Publishes updates to the phenotype by commiting all changes to the repo directory&quot;&quot;&quot;</span>
-</span><span id="publish-992"><a href="#publish-992"><span class="linenos"> 992</span></a>
-</span><span id="publish-993"><a href="#publish-993"><span class="linenos"> 993</span></a>    <span class="c1"># Validate config</span>
-</span><span id="publish-994"><a href="#publish-994"><span class="linenos"> 994</span></a>    <span class="n">validate</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">)</span>
-</span><span id="publish-995"><a href="#publish-995"><span class="linenos"> 995</span></a>    <span class="n">phen_path</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">)</span>
-</span><span id="publish-996"><a href="#publish-996"><span class="linenos"> 996</span></a>
-</span><span id="publish-997"><a href="#publish-997"><span class="linenos"> 997</span></a>    <span class="c1"># load git repo and set the branch</span>
-</span><span id="publish-998"><a href="#publish-998"><span class="linenos"> 998</span></a>    <span class="n">repo</span> <span class="o">=</span> <span class="n">git</span><span class="o">.</span><span class="n">Repo</span><span class="p">(</span><span class="n">phen_path</span><span class="p">)</span>
-</span><span id="publish-999"><a href="#publish-999"><span class="linenos"> 999</span></a>    <span class="k">if</span> <span class="n">DEFAULT_GIT_BRANCH</span> <span class="ow">in</span> <span class="n">repo</span><span class="o">.</span><span class="n">branches</span><span class="p">:</span>
-</span><span id="publish-1000"><a href="#publish-1000"><span class="linenos">1000</span></a>        <span class="n">main_branch</span> <span class="o">=</span> <span class="n">repo</span><span class="o">.</span><span class="n">heads</span><span class="p">[</span><span class="n">DEFAULT_GIT_BRANCH</span><span class="p">]</span>
-</span><span id="publish-1001"><a href="#publish-1001"><span class="linenos">1001</span></a>        <span class="n">main_branch</span><span class="o">.</span><span class="n">checkout</span><span class="p">()</span>
-</span><span id="publish-1002"><a href="#publish-1002"><span class="linenos">1002</span></a>    <span class="k">else</span><span class="p">:</span>
-</span><span id="publish-1003"><a href="#publish-1003"><span class="linenos">1003</span></a>        <span class="k">raise</span> <span class="ne">AttributeError</span><span class="p">(</span>
-</span><span id="publish-1004"><a href="#publish-1004"><span class="linenos">1004</span></a>            <span class="sa">f</span><span class="s2">&quot;Phen repo does not contain the default branch </span><span class="si">{</span><span class="n">DEFAULT_GIT_BRANCH</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="publish-1005"><a href="#publish-1005"><span class="linenos">1005</span></a>        <span class="p">)</span>
-</span><span id="publish-1006"><a href="#publish-1006"><span class="linenos">1006</span></a>
-</span><span id="publish-1007"><a href="#publish-1007"><span class="linenos">1007</span></a>    <span class="c1"># check if any changes to publish</span>
-</span><span id="publish-1008"><a href="#publish-1008"><span class="linenos">1008</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">repo</span><span class="o">.</span><span class="n">is_dirty</span><span class="p">()</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">repo</span><span class="o">.</span><span class="n">untracked_files</span><span class="p">:</span>
-</span><span id="publish-1009"><a href="#publish-1009"><span class="linenos">1009</span></a>        <span class="k">if</span> <span class="n">remote_url</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="s2">&quot;origin&quot;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">repo</span><span class="o">.</span><span class="n">remotes</span><span class="p">:</span>
-</span><span id="publish-1010"><a href="#publish-1010"><span class="linenos">1010</span></a>            <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;First publish to remote url </span><span class="si">{</span><span class="n">remote_url</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="publish-1011"><a href="#publish-1011"><span class="linenos">1011</span></a>        <span class="k">else</span><span class="p">:</span>
-</span><span id="publish-1012"><a href="#publish-1012"><span class="linenos">1012</span></a>            <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Nothing to publish, no changes to the repo&quot;</span><span class="p">)</span>
-</span><span id="publish-1013"><a href="#publish-1013"><span class="linenos">1013</span></a>            <span class="k">return</span>
-</span><span id="publish-1014"><a href="#publish-1014"><span class="linenos">1014</span></a>
-</span><span id="publish-1015"><a href="#publish-1015"><span class="linenos">1015</span></a>    <span class="c1"># get next version</span>
-</span><span id="publish-1016"><a href="#publish-1016"><span class="linenos">1016</span></a>    <span class="n">new_version_str</span> <span class="o">=</span> <span class="n">generate_version_tag</span><span class="p">(</span><span class="n">repo</span><span class="p">,</span> <span class="n">increment</span><span class="p">)</span>
-</span><span id="publish-1017"><a href="#publish-1017"><span class="linenos">1017</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;New version: </span><span class="si">{</span><span class="n">new_version_str</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+            <div class="pdoc-code codehilite"><pre><span></span><span id="publish-1000"><a href="#publish-1000"><span class="linenos">1000</span></a><span class="k">def</span><span class="w"> </span><span class="nf">publish</span><span class="p">(</span>
+</span><span id="publish-1001"><a href="#publish-1001"><span class="linenos">1001</span></a>    <span class="n">phen_dir</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">msg</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">remote_url</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">increment</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="n">DEFAULT_VERSION_INC</span>
+</span><span id="publish-1002"><a href="#publish-1002"><span class="linenos">1002</span></a><span class="p">):</span>
+</span><span id="publish-1003"><a href="#publish-1003"><span class="linenos">1003</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Publishes updates to the phenotype by commiting all changes to the repo directory&quot;&quot;&quot;</span>
+</span><span id="publish-1004"><a href="#publish-1004"><span class="linenos">1004</span></a>
+</span><span id="publish-1005"><a href="#publish-1005"><span class="linenos">1005</span></a>    <span class="c1"># Validate config</span>
+</span><span id="publish-1006"><a href="#publish-1006"><span class="linenos">1006</span></a>    <span class="n">validate</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">)</span>
+</span><span id="publish-1007"><a href="#publish-1007"><span class="linenos">1007</span></a>    <span class="n">phen_path</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">)</span>
+</span><span id="publish-1008"><a href="#publish-1008"><span class="linenos">1008</span></a>
+</span><span id="publish-1009"><a href="#publish-1009"><span class="linenos">1009</span></a>    <span class="c1"># load git repo and set the branch</span>
+</span><span id="publish-1010"><a href="#publish-1010"><span class="linenos">1010</span></a>    <span class="n">repo</span> <span class="o">=</span> <span class="n">git</span><span class="o">.</span><span class="n">Repo</span><span class="p">(</span><span class="n">phen_path</span><span class="p">)</span>
+</span><span id="publish-1011"><a href="#publish-1011"><span class="linenos">1011</span></a>    <span class="k">if</span> <span class="n">DEFAULT_GIT_BRANCH</span> <span class="ow">in</span> <span class="n">repo</span><span class="o">.</span><span class="n">branches</span><span class="p">:</span>
+</span><span id="publish-1012"><a href="#publish-1012"><span class="linenos">1012</span></a>        <span class="n">main_branch</span> <span class="o">=</span> <span class="n">repo</span><span class="o">.</span><span class="n">heads</span><span class="p">[</span><span class="n">DEFAULT_GIT_BRANCH</span><span class="p">]</span>
+</span><span id="publish-1013"><a href="#publish-1013"><span class="linenos">1013</span></a>        <span class="n">main_branch</span><span class="o">.</span><span class="n">checkout</span><span class="p">()</span>
+</span><span id="publish-1014"><a href="#publish-1014"><span class="linenos">1014</span></a>    <span class="k">else</span><span class="p">:</span>
+</span><span id="publish-1015"><a href="#publish-1015"><span class="linenos">1015</span></a>        <span class="k">raise</span> <span class="ne">AttributeError</span><span class="p">(</span>
+</span><span id="publish-1016"><a href="#publish-1016"><span class="linenos">1016</span></a>            <span class="sa">f</span><span class="s2">&quot;Phen repo does not contain the default branch </span><span class="si">{</span><span class="n">DEFAULT_GIT_BRANCH</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="publish-1017"><a href="#publish-1017"><span class="linenos">1017</span></a>        <span class="p">)</span>
 </span><span id="publish-1018"><a href="#publish-1018"><span class="linenos">1018</span></a>
-</span><span id="publish-1019"><a href="#publish-1019"><span class="linenos">1019</span></a>    <span class="c1"># Write version in configuration file</span>
-</span><span id="publish-1020"><a href="#publish-1020"><span class="linenos">1020</span></a>    <span class="n">config_path</span> <span class="o">=</span> <span class="n">phen_path</span> <span class="o">/</span> <span class="n">CONFIG_FILE</span>
-</span><span id="publish-1021"><a href="#publish-1021"><span class="linenos">1021</span></a>    <span class="k">with</span> <span class="n">config_path</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="s2">&quot;r&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
-</span><span id="publish-1022"><a href="#publish-1022"><span class="linenos">1022</span></a>        <span class="n">config</span> <span class="o">=</span> <span class="n">yaml</span><span class="o">.</span><span class="n">safe_load</span><span class="p">(</span><span class="n">file</span><span class="p">)</span>
-</span><span id="publish-1023"><a href="#publish-1023"><span class="linenos">1023</span></a>
-</span><span id="publish-1024"><a href="#publish-1024"><span class="linenos">1024</span></a>    <span class="n">config</span><span class="p">[</span><span class="s2">&quot;phenotype&quot;</span><span class="p">][</span><span class="s2">&quot;version&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">new_version_str</span>
-</span><span id="publish-1025"><a href="#publish-1025"><span class="linenos">1025</span></a>    <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">config_path</span><span class="p">,</span> <span class="s2">&quot;w&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
-</span><span id="publish-1026"><a href="#publish-1026"><span class="linenos">1026</span></a>        <span class="n">yaml</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span>
-</span><span id="publish-1027"><a href="#publish-1027"><span class="linenos">1027</span></a>            <span class="n">config</span><span class="p">,</span>
-</span><span id="publish-1028"><a href="#publish-1028"><span class="linenos">1028</span></a>            <span class="n">file</span><span class="p">,</span>
-</span><span id="publish-1029"><a href="#publish-1029"><span class="linenos">1029</span></a>            <span class="n">Dumper</span><span class="o">=</span><span class="n">util</span><span class="o">.</span><span class="n">QuotedDumper</span><span class="p">,</span>
-</span><span id="publish-1030"><a href="#publish-1030"><span class="linenos">1030</span></a>            <span class="n">default_flow_style</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-</span><span id="publish-1031"><a href="#publish-1031"><span class="linenos">1031</span></a>            <span class="n">sort_keys</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-</span><span id="publish-1032"><a href="#publish-1032"><span class="linenos">1032</span></a>            <span class="n">default_style</span><span class="o">=</span><span class="s1">&#39;&quot;&#39;</span><span class="p">,</span>
-</span><span id="publish-1033"><a href="#publish-1033"><span class="linenos">1033</span></a>        <span class="p">)</span>
-</span><span id="publish-1034"><a href="#publish-1034"><span class="linenos">1034</span></a>
-</span><span id="publish-1035"><a href="#publish-1035"><span class="linenos">1035</span></a>    <span class="c1"># Add and commit changes to repo including version updates</span>
-</span><span id="publish-1036"><a href="#publish-1036"><span class="linenos">1036</span></a>    <span class="n">commit_message</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;Committing updates to phenotype </span><span class="si">{</span><span class="n">phen_path</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="publish-1037"><a href="#publish-1037"><span class="linenos">1037</span></a>    <span class="n">repo</span><span class="o">.</span><span class="n">git</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="s2">&quot;--all&quot;</span><span class="p">)</span>
-</span><span id="publish-1038"><a href="#publish-1038"><span class="linenos">1038</span></a>    <span class="n">repo</span><span class="o">.</span><span class="n">index</span><span class="o">.</span><span class="n">commit</span><span class="p">(</span><span class="n">commit_message</span><span class="p">)</span>
-</span><span id="publish-1039"><a href="#publish-1039"><span class="linenos">1039</span></a>
-</span><span id="publish-1040"><a href="#publish-1040"><span class="linenos">1040</span></a>    <span class="c1"># Add tag to the repo</span>
-</span><span id="publish-1041"><a href="#publish-1041"><span class="linenos">1041</span></a>    <span class="n">repo</span><span class="o">.</span><span class="n">create_tag</span><span class="p">(</span><span class="n">new_version_str</span><span class="p">)</span>
-</span><span id="publish-1042"><a href="#publish-1042"><span class="linenos">1042</span></a>
-</span><span id="publish-1043"><a href="#publish-1043"><span class="linenos">1043</span></a>    <span class="c1"># push to origin if a remote repo</span>
-</span><span id="publish-1044"><a href="#publish-1044"><span class="linenos">1044</span></a>    <span class="k">if</span> <span class="n">remote_url</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="s2">&quot;origin&quot;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">repo</span><span class="o">.</span><span class="n">remotes</span><span class="p">:</span>
-</span><span id="publish-1045"><a href="#publish-1045"><span class="linenos">1045</span></a>        <span class="n">git_url</span> <span class="o">=</span> <span class="n">construct_git_url</span><span class="p">(</span><span class="n">remote_url</span><span class="p">)</span>
-</span><span id="publish-1046"><a href="#publish-1046"><span class="linenos">1046</span></a>        <span class="n">repo</span><span class="o">.</span><span class="n">create_remote</span><span class="p">(</span><span class="s2">&quot;origin&quot;</span><span class="p">,</span> <span class="n">git_url</span><span class="p">)</span>
-</span><span id="publish-1047"><a href="#publish-1047"><span class="linenos">1047</span></a>
-</span><span id="publish-1048"><a href="#publish-1048"><span class="linenos">1048</span></a>    <span class="k">try</span><span class="p">:</span>
-</span><span id="publish-1049"><a href="#publish-1049"><span class="linenos">1049</span></a>        <span class="k">if</span> <span class="s2">&quot;origin&quot;</span> <span class="ow">in</span> <span class="n">repo</span><span class="o">.</span><span class="n">remotes</span><span class="p">:</span>
-</span><span id="publish-1050"><a href="#publish-1050"><span class="linenos">1050</span></a>            <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Remote &#39;origin&#39; is set </span><span class="si">{</span><span class="n">repo</span><span class="o">.</span><span class="n">remotes</span><span class="o">.</span><span class="n">origin</span><span class="o">.</span><span class="n">url</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="publish-1051"><a href="#publish-1051"><span class="linenos">1051</span></a>            <span class="n">origin</span> <span class="o">=</span> <span class="n">repo</span><span class="o">.</span><span class="n">remotes</span><span class="o">.</span><span class="n">origin</span>
-</span><span id="publish-1052"><a href="#publish-1052"><span class="linenos">1052</span></a>            <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Pushing main branch to remote repo&quot;</span><span class="p">)</span>
-</span><span id="publish-1053"><a href="#publish-1053"><span class="linenos">1053</span></a>            <span class="n">repo</span><span class="o">.</span><span class="n">git</span><span class="o">.</span><span class="n">push</span><span class="p">(</span><span class="s2">&quot;--set-upstream&quot;</span><span class="p">,</span> <span class="s2">&quot;origin&quot;</span><span class="p">,</span> <span class="s2">&quot;main&quot;</span><span class="p">)</span>
-</span><span id="publish-1054"><a href="#publish-1054"><span class="linenos">1054</span></a>            <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Pushing version tags to remote git repo&quot;</span><span class="p">)</span>
-</span><span id="publish-1055"><a href="#publish-1055"><span class="linenos">1055</span></a>            <span class="n">origin</span><span class="o">.</span><span class="n">push</span><span class="p">(</span><span class="n">tags</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="publish-1056"><a href="#publish-1056"><span class="linenos">1056</span></a>            <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">&quot;Changes pushed to &#39;origin&#39;&quot;</span><span class="p">)</span>
-</span><span id="publish-1057"><a href="#publish-1057"><span class="linenos">1057</span></a>        <span class="k">else</span><span class="p">:</span>
-</span><span id="publish-1058"><a href="#publish-1058"><span class="linenos">1058</span></a>            <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">&quot;Remote &#39;origin&#39; is not set&quot;</span><span class="p">)</span>
-</span><span id="publish-1059"><a href="#publish-1059"><span class="linenos">1059</span></a>    <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
-</span><span id="publish-1060"><a href="#publish-1060"><span class="linenos">1060</span></a>        <span class="n">tag_ref</span> <span class="o">=</span> <span class="n">repo</span><span class="o">.</span><span class="n">tags</span><span class="p">[</span><span class="n">new_version_str</span><span class="p">]</span>
-</span><span id="publish-1061"><a href="#publish-1061"><span class="linenos">1061</span></a>        <span class="n">repo</span><span class="o">.</span><span class="n">delete_tag</span><span class="p">(</span><span class="n">tag_ref</span><span class="p">)</span>
-</span><span id="publish-1062"><a href="#publish-1062"><span class="linenos">1062</span></a>        <span class="n">repo</span><span class="o">.</span><span class="n">git</span><span class="o">.</span><span class="n">reset</span><span class="p">(</span><span class="s2">&quot;--soft&quot;</span><span class="p">,</span> <span class="s2">&quot;HEAD~1&quot;</span><span class="p">)</span>
-</span><span id="publish-1063"><a href="#publish-1063"><span class="linenos">1063</span></a>        <span class="k">raise</span> <span class="n">e</span>
-</span><span id="publish-1064"><a href="#publish-1064"><span class="linenos">1064</span></a>
-</span><span id="publish-1065"><a href="#publish-1065"><span class="linenos">1065</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Phenotype published successfully&quot;</span><span class="p">)</span>
+</span><span id="publish-1019"><a href="#publish-1019"><span class="linenos">1019</span></a>    <span class="c1"># check if any changes to publish</span>
+</span><span id="publish-1020"><a href="#publish-1020"><span class="linenos">1020</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">repo</span><span class="o">.</span><span class="n">is_dirty</span><span class="p">()</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">repo</span><span class="o">.</span><span class="n">untracked_files</span><span class="p">:</span>
+</span><span id="publish-1021"><a href="#publish-1021"><span class="linenos">1021</span></a>        <span class="k">if</span> <span class="n">remote_url</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="s2">&quot;origin&quot;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">repo</span><span class="o">.</span><span class="n">remotes</span><span class="p">:</span>
+</span><span id="publish-1022"><a href="#publish-1022"><span class="linenos">1022</span></a>            <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;First publish to remote url </span><span class="si">{</span><span class="n">remote_url</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="publish-1023"><a href="#publish-1023"><span class="linenos">1023</span></a>        <span class="k">else</span><span class="p">:</span>
+</span><span id="publish-1024"><a href="#publish-1024"><span class="linenos">1024</span></a>            <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Nothing to publish, no changes to the repo&quot;</span><span class="p">)</span>
+</span><span id="publish-1025"><a href="#publish-1025"><span class="linenos">1025</span></a>            <span class="k">return</span>
+</span><span id="publish-1026"><a href="#publish-1026"><span class="linenos">1026</span></a>
+</span><span id="publish-1027"><a href="#publish-1027"><span class="linenos">1027</span></a>    <span class="c1"># get next version</span>
+</span><span id="publish-1028"><a href="#publish-1028"><span class="linenos">1028</span></a>    <span class="n">new_version_str</span> <span class="o">=</span> <span class="n">_generate_version_tag</span><span class="p">(</span><span class="n">repo</span><span class="p">,</span> <span class="n">increment</span><span class="p">)</span>
+</span><span id="publish-1029"><a href="#publish-1029"><span class="linenos">1029</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;New version: </span><span class="si">{</span><span class="n">new_version_str</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="publish-1030"><a href="#publish-1030"><span class="linenos">1030</span></a>
+</span><span id="publish-1031"><a href="#publish-1031"><span class="linenos">1031</span></a>    <span class="c1"># Write version in configuration file</span>
+</span><span id="publish-1032"><a href="#publish-1032"><span class="linenos">1032</span></a>    <span class="n">config_path</span> <span class="o">=</span> <span class="n">phen_path</span> <span class="o">/</span> <span class="n">CONFIG_FILE</span>
+</span><span id="publish-1033"><a href="#publish-1033"><span class="linenos">1033</span></a>    <span class="k">with</span> <span class="n">config_path</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="s2">&quot;r&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
+</span><span id="publish-1034"><a href="#publish-1034"><span class="linenos">1034</span></a>        <span class="n">config</span> <span class="o">=</span> <span class="n">yaml</span><span class="o">.</span><span class="n">safe_load</span><span class="p">(</span><span class="n">file</span><span class="p">)</span>
+</span><span id="publish-1035"><a href="#publish-1035"><span class="linenos">1035</span></a>
+</span><span id="publish-1036"><a href="#publish-1036"><span class="linenos">1036</span></a>    <span class="n">config</span><span class="p">[</span><span class="s2">&quot;phenotype&quot;</span><span class="p">][</span><span class="s2">&quot;version&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">new_version_str</span>
+</span><span id="publish-1037"><a href="#publish-1037"><span class="linenos">1037</span></a>    <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">config_path</span><span class="p">,</span> <span class="s2">&quot;w&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
+</span><span id="publish-1038"><a href="#publish-1038"><span class="linenos">1038</span></a>        <span class="n">yaml</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span>
+</span><span id="publish-1039"><a href="#publish-1039"><span class="linenos">1039</span></a>            <span class="n">config</span><span class="p">,</span>
+</span><span id="publish-1040"><a href="#publish-1040"><span class="linenos">1040</span></a>            <span class="n">file</span><span class="p">,</span>
+</span><span id="publish-1041"><a href="#publish-1041"><span class="linenos">1041</span></a>            <span class="n">Dumper</span><span class="o">=</span><span class="n">util</span><span class="o">.</span><span class="n">QuotedDumper</span><span class="p">,</span>
+</span><span id="publish-1042"><a href="#publish-1042"><span class="linenos">1042</span></a>            <span class="n">default_flow_style</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="publish-1043"><a href="#publish-1043"><span class="linenos">1043</span></a>            <span class="n">sort_keys</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="publish-1044"><a href="#publish-1044"><span class="linenos">1044</span></a>            <span class="n">default_style</span><span class="o">=</span><span class="s1">&#39;&quot;&#39;</span><span class="p">,</span>
+</span><span id="publish-1045"><a href="#publish-1045"><span class="linenos">1045</span></a>        <span class="p">)</span>
+</span><span id="publish-1046"><a href="#publish-1046"><span class="linenos">1046</span></a>
+</span><span id="publish-1047"><a href="#publish-1047"><span class="linenos">1047</span></a>    <span class="c1"># Add and commit changes to repo including version updates</span>
+</span><span id="publish-1048"><a href="#publish-1048"><span class="linenos">1048</span></a>    <span class="n">commit_message</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;Committing updates to phenotype </span><span class="si">{</span><span class="n">phen_path</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="publish-1049"><a href="#publish-1049"><span class="linenos">1049</span></a>    <span class="n">repo</span><span class="o">.</span><span class="n">git</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="s2">&quot;--all&quot;</span><span class="p">)</span>
+</span><span id="publish-1050"><a href="#publish-1050"><span class="linenos">1050</span></a>    <span class="n">repo</span><span class="o">.</span><span class="n">index</span><span class="o">.</span><span class="n">commit</span><span class="p">(</span><span class="n">commit_message</span><span class="p">)</span>
+</span><span id="publish-1051"><a href="#publish-1051"><span class="linenos">1051</span></a>
+</span><span id="publish-1052"><a href="#publish-1052"><span class="linenos">1052</span></a>    <span class="c1"># Add tag to the repo</span>
+</span><span id="publish-1053"><a href="#publish-1053"><span class="linenos">1053</span></a>    <span class="n">repo</span><span class="o">.</span><span class="n">create_tag</span><span class="p">(</span><span class="n">new_version_str</span><span class="p">)</span>
+</span><span id="publish-1054"><a href="#publish-1054"><span class="linenos">1054</span></a>
+</span><span id="publish-1055"><a href="#publish-1055"><span class="linenos">1055</span></a>    <span class="c1"># push to origin if a remote repo</span>
+</span><span id="publish-1056"><a href="#publish-1056"><span class="linenos">1056</span></a>    <span class="k">if</span> <span class="n">remote_url</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="s2">&quot;origin&quot;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">repo</span><span class="o">.</span><span class="n">remotes</span><span class="p">:</span>
+</span><span id="publish-1057"><a href="#publish-1057"><span class="linenos">1057</span></a>        <span class="n">git_url</span> <span class="o">=</span> <span class="n">_construct_git_url</span><span class="p">(</span><span class="n">remote_url</span><span class="p">)</span>
+</span><span id="publish-1058"><a href="#publish-1058"><span class="linenos">1058</span></a>        <span class="n">repo</span><span class="o">.</span><span class="n">create_remote</span><span class="p">(</span><span class="s2">&quot;origin&quot;</span><span class="p">,</span> <span class="n">git_url</span><span class="p">)</span>
+</span><span id="publish-1059"><a href="#publish-1059"><span class="linenos">1059</span></a>
+</span><span id="publish-1060"><a href="#publish-1060"><span class="linenos">1060</span></a>    <span class="k">try</span><span class="p">:</span>
+</span><span id="publish-1061"><a href="#publish-1061"><span class="linenos">1061</span></a>        <span class="k">if</span> <span class="s2">&quot;origin&quot;</span> <span class="ow">in</span> <span class="n">repo</span><span class="o">.</span><span class="n">remotes</span><span class="p">:</span>
+</span><span id="publish-1062"><a href="#publish-1062"><span class="linenos">1062</span></a>            <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Remote &#39;origin&#39; is set </span><span class="si">{</span><span class="n">repo</span><span class="o">.</span><span class="n">remotes</span><span class="o">.</span><span class="n">origin</span><span class="o">.</span><span class="n">url</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="publish-1063"><a href="#publish-1063"><span class="linenos">1063</span></a>            <span class="n">origin</span> <span class="o">=</span> <span class="n">repo</span><span class="o">.</span><span class="n">remotes</span><span class="o">.</span><span class="n">origin</span>
+</span><span id="publish-1064"><a href="#publish-1064"><span class="linenos">1064</span></a>            <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Pushing main branch to remote repo&quot;</span><span class="p">)</span>
+</span><span id="publish-1065"><a href="#publish-1065"><span class="linenos">1065</span></a>            <span class="n">repo</span><span class="o">.</span><span class="n">git</span><span class="o">.</span><span class="n">push</span><span class="p">(</span><span class="s2">&quot;--set-upstream&quot;</span><span class="p">,</span> <span class="s2">&quot;origin&quot;</span><span class="p">,</span> <span class="s2">&quot;main&quot;</span><span class="p">)</span>
+</span><span id="publish-1066"><a href="#publish-1066"><span class="linenos">1066</span></a>            <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Pushing version tags to remote git repo&quot;</span><span class="p">)</span>
+</span><span id="publish-1067"><a href="#publish-1067"><span class="linenos">1067</span></a>            <span class="n">origin</span><span class="o">.</span><span class="n">push</span><span class="p">(</span><span class="n">tags</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="publish-1068"><a href="#publish-1068"><span class="linenos">1068</span></a>            <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">&quot;Changes pushed to &#39;origin&#39;&quot;</span><span class="p">)</span>
+</span><span id="publish-1069"><a href="#publish-1069"><span class="linenos">1069</span></a>        <span class="k">else</span><span class="p">:</span>
+</span><span id="publish-1070"><a href="#publish-1070"><span class="linenos">1070</span></a>            <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">&quot;Remote &#39;origin&#39; is not set&quot;</span><span class="p">)</span>
+</span><span id="publish-1071"><a href="#publish-1071"><span class="linenos">1071</span></a>    <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
+</span><span id="publish-1072"><a href="#publish-1072"><span class="linenos">1072</span></a>        <span class="n">tag_ref</span> <span class="o">=</span> <span class="n">repo</span><span class="o">.</span><span class="n">tags</span><span class="p">[</span><span class="n">new_version_str</span><span class="p">]</span>
+</span><span id="publish-1073"><a href="#publish-1073"><span class="linenos">1073</span></a>        <span class="n">repo</span><span class="o">.</span><span class="n">delete_tag</span><span class="p">(</span><span class="n">tag_ref</span><span class="p">)</span>
+</span><span id="publish-1074"><a href="#publish-1074"><span class="linenos">1074</span></a>        <span class="n">repo</span><span class="o">.</span><span class="n">git</span><span class="o">.</span><span class="n">reset</span><span class="p">(</span><span class="s2">&quot;--soft&quot;</span><span class="p">,</span> <span class="s2">&quot;HEAD~1&quot;</span><span class="p">)</span>
+</span><span id="publish-1075"><a href="#publish-1075"><span class="linenos">1075</span></a>        <span class="k">raise</span> <span class="n">e</span>
+</span><span id="publish-1076"><a href="#publish-1076"><span class="linenos">1076</span></a>
+</span><span id="publish-1077"><a href="#publish-1077"><span class="linenos">1077</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Phenotype published successfully&quot;</span><span class="p">)</span>
 </span></pre></div>
 
 
@@ -3231,40 +2629,40 @@
 
     </div>
     <a class="headerlink" href="#export"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="export-1068"><a href="#export-1068"><span class="linenos">1068</span></a><span class="k">def</span><span class="w"> </span><span class="nf">export</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">version</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
-</span><span id="export-1069"><a href="#export-1069"><span class="linenos">1069</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Exports a phen repo at a specific tagged version into a target directory&quot;&quot;&quot;</span>
-</span><span id="export-1070"><a href="#export-1070"><span class="linenos">1070</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Exporting phenotype </span><span class="si">{</span><span class="n">phen_dir</span><span class="si">}</span><span class="s2"> at version </span><span class="si">{</span><span class="n">version</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="export-1071"><a href="#export-1071"><span class="linenos">1071</span></a>
-</span><span id="export-1072"><a href="#export-1072"><span class="linenos">1072</span></a>    <span class="c1"># validate configuration</span>
-</span><span id="export-1073"><a href="#export-1073"><span class="linenos">1073</span></a>    <span class="n">validate</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">)</span>
-</span><span id="export-1074"><a href="#export-1074"><span class="linenos">1074</span></a>    <span class="n">phen_path</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">)</span>
-</span><span id="export-1075"><a href="#export-1075"><span class="linenos">1075</span></a>
-</span><span id="export-1076"><a href="#export-1076"><span class="linenos">1076</span></a>    <span class="c1"># load configuration</span>
-</span><span id="export-1077"><a href="#export-1077"><span class="linenos">1077</span></a>    <span class="n">config_path</span> <span class="o">=</span> <span class="n">phen_path</span> <span class="o">/</span> <span class="n">CONFIG_FILE</span>
-</span><span id="export-1078"><a href="#export-1078"><span class="linenos">1078</span></a>    <span class="k">with</span> <span class="n">config_path</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="s2">&quot;r&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
-</span><span id="export-1079"><a href="#export-1079"><span class="linenos">1079</span></a>        <span class="n">config</span> <span class="o">=</span> <span class="n">yaml</span><span class="o">.</span><span class="n">safe_load</span><span class="p">(</span><span class="n">file</span><span class="p">)</span>
-</span><span id="export-1080"><a href="#export-1080"><span class="linenos">1080</span></a>
-</span><span id="export-1081"><a href="#export-1081"><span class="linenos">1081</span></a>    <span class="n">map_path</span> <span class="o">=</span> <span class="n">phen_path</span> <span class="o">/</span> <span class="n">MAP_DIR</span>
-</span><span id="export-1082"><a href="#export-1082"><span class="linenos">1082</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">map_path</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
-</span><span id="export-1083"><a href="#export-1083"><span class="linenos">1083</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Map path does not exist &#39;</span><span class="si">{</span><span class="n">map_path</span><span class="si">}</span><span class="s2">&#39;&quot;</span><span class="p">)</span>
-</span><span id="export-1084"><a href="#export-1084"><span class="linenos">1084</span></a>
-</span><span id="export-1085"><a href="#export-1085"><span class="linenos">1085</span></a>    <span class="n">export_path</span> <span class="o">=</span> <span class="n">phen_path</span> <span class="o">/</span> <span class="n">OMOP_PATH</span>
-</span><span id="export-1086"><a href="#export-1086"><span class="linenos">1086</span></a>    <span class="c1"># check export directory exists and if not create it</span>
-</span><span id="export-1087"><a href="#export-1087"><span class="linenos">1087</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">export_path</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
-</span><span id="export-1088"><a href="#export-1088"><span class="linenos">1088</span></a>        <span class="n">export_path</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">parents</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="export-1089"><a href="#export-1089"><span class="linenos">1089</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;OMOP export directory &#39;</span><span class="si">{</span><span class="n">export_path</span><span class="si">}</span><span class="s2">&#39; created.&quot;</span><span class="p">)</span>
-</span><span id="export-1090"><a href="#export-1090"><span class="linenos">1090</span></a>
-</span><span id="export-1091"><a href="#export-1091"><span class="linenos">1091</span></a>    <span class="c1"># omop export db</span>
-</span><span id="export-1092"><a href="#export-1092"><span class="linenos">1092</span></a>    <span class="n">export_db_path</span> <span class="o">=</span> <span class="n">omop</span><span class="o">.</span><span class="n">export</span><span class="p">(</span>
-</span><span id="export-1093"><a href="#export-1093"><span class="linenos">1093</span></a>        <span class="n">map_path</span><span class="p">,</span>
-</span><span id="export-1094"><a href="#export-1094"><span class="linenos">1094</span></a>        <span class="n">export_path</span><span class="p">,</span>
-</span><span id="export-1095"><a href="#export-1095"><span class="linenos">1095</span></a>        <span class="n">config</span><span class="p">[</span><span class="s2">&quot;phenotype&quot;</span><span class="p">][</span><span class="s2">&quot;version&quot;</span><span class="p">],</span>
-</span><span id="export-1096"><a href="#export-1096"><span class="linenos">1096</span></a>        <span class="n">config</span><span class="p">[</span><span class="s2">&quot;phenotype&quot;</span><span class="p">][</span><span class="s2">&quot;omop&quot;</span><span class="p">],</span>
-</span><span id="export-1097"><a href="#export-1097"><span class="linenos">1097</span></a>    <span class="p">)</span>
-</span><span id="export-1098"><a href="#export-1098"><span class="linenos">1098</span></a>
-</span><span id="export-1099"><a href="#export-1099"><span class="linenos">1099</span></a>    <span class="c1"># write to tables</span>
-</span><span id="export-1100"><a href="#export-1100"><span class="linenos">1100</span></a>    <span class="c1"># export as csv</span>
-</span><span id="export-1101"><a href="#export-1101"><span class="linenos">1101</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Phenotype exported successfully&quot;</span><span class="p">)</span>
+            <div class="pdoc-code codehilite"><pre><span></span><span id="export-1080"><a href="#export-1080"><span class="linenos">1080</span></a><span class="k">def</span><span class="w"> </span><span class="nf">export</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">version</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
+</span><span id="export-1081"><a href="#export-1081"><span class="linenos">1081</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Exports a phen repo at a specific tagged version into a target directory&quot;&quot;&quot;</span>
+</span><span id="export-1082"><a href="#export-1082"><span class="linenos">1082</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Exporting phenotype </span><span class="si">{</span><span class="n">phen_dir</span><span class="si">}</span><span class="s2"> at version </span><span class="si">{</span><span class="n">version</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="export-1083"><a href="#export-1083"><span class="linenos">1083</span></a>
+</span><span id="export-1084"><a href="#export-1084"><span class="linenos">1084</span></a>    <span class="c1"># validate configuration</span>
+</span><span id="export-1085"><a href="#export-1085"><span class="linenos">1085</span></a>    <span class="n">validate</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">)</span>
+</span><span id="export-1086"><a href="#export-1086"><span class="linenos">1086</span></a>    <span class="n">phen_path</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">)</span>
+</span><span id="export-1087"><a href="#export-1087"><span class="linenos">1087</span></a>
+</span><span id="export-1088"><a href="#export-1088"><span class="linenos">1088</span></a>    <span class="c1"># load configuration</span>
+</span><span id="export-1089"><a href="#export-1089"><span class="linenos">1089</span></a>    <span class="n">config_path</span> <span class="o">=</span> <span class="n">phen_path</span> <span class="o">/</span> <span class="n">CONFIG_FILE</span>
+</span><span id="export-1090"><a href="#export-1090"><span class="linenos">1090</span></a>    <span class="k">with</span> <span class="n">config_path</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="s2">&quot;r&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
+</span><span id="export-1091"><a href="#export-1091"><span class="linenos">1091</span></a>        <span class="n">config</span> <span class="o">=</span> <span class="n">yaml</span><span class="o">.</span><span class="n">safe_load</span><span class="p">(</span><span class="n">file</span><span class="p">)</span>
+</span><span id="export-1092"><a href="#export-1092"><span class="linenos">1092</span></a>
+</span><span id="export-1093"><a href="#export-1093"><span class="linenos">1093</span></a>    <span class="n">map_path</span> <span class="o">=</span> <span class="n">phen_path</span> <span class="o">/</span> <span class="n">MAP_DIR</span>
+</span><span id="export-1094"><a href="#export-1094"><span class="linenos">1094</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">map_path</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
+</span><span id="export-1095"><a href="#export-1095"><span class="linenos">1095</span></a>        <span class="n">_logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Map path does not exist &#39;</span><span class="si">{</span><span class="n">map_path</span><span class="si">}</span><span class="s2">&#39;&quot;</span><span class="p">)</span>
+</span><span id="export-1096"><a href="#export-1096"><span class="linenos">1096</span></a>
+</span><span id="export-1097"><a href="#export-1097"><span class="linenos">1097</span></a>    <span class="n">export_path</span> <span class="o">=</span> <span class="n">phen_path</span> <span class="o">/</span> <span class="n">OMOP_PATH</span>
+</span><span id="export-1098"><a href="#export-1098"><span class="linenos">1098</span></a>    <span class="c1"># check export directory exists and if not create it</span>
+</span><span id="export-1099"><a href="#export-1099"><span class="linenos">1099</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">export_path</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
+</span><span id="export-1100"><a href="#export-1100"><span class="linenos">1100</span></a>        <span class="n">export_path</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">parents</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="export-1101"><a href="#export-1101"><span class="linenos">1101</span></a>        <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;OMOP export directory &#39;</span><span class="si">{</span><span class="n">export_path</span><span class="si">}</span><span class="s2">&#39; created.&quot;</span><span class="p">)</span>
+</span><span id="export-1102"><a href="#export-1102"><span class="linenos">1102</span></a>
+</span><span id="export-1103"><a href="#export-1103"><span class="linenos">1103</span></a>    <span class="c1"># omop export db</span>
+</span><span id="export-1104"><a href="#export-1104"><span class="linenos">1104</span></a>    <span class="n">export_db_path</span> <span class="o">=</span> <span class="n">omop</span><span class="o">.</span><span class="n">export</span><span class="p">(</span>
+</span><span id="export-1105"><a href="#export-1105"><span class="linenos">1105</span></a>        <span class="n">map_path</span><span class="p">,</span>
+</span><span id="export-1106"><a href="#export-1106"><span class="linenos">1106</span></a>        <span class="n">export_path</span><span class="p">,</span>
+</span><span id="export-1107"><a href="#export-1107"><span class="linenos">1107</span></a>        <span class="n">config</span><span class="p">[</span><span class="s2">&quot;phenotype&quot;</span><span class="p">][</span><span class="s2">&quot;version&quot;</span><span class="p">],</span>
+</span><span id="export-1108"><a href="#export-1108"><span class="linenos">1108</span></a>        <span class="n">config</span><span class="p">[</span><span class="s2">&quot;phenotype&quot;</span><span class="p">][</span><span class="s2">&quot;omop&quot;</span><span class="p">],</span>
+</span><span id="export-1109"><a href="#export-1109"><span class="linenos">1109</span></a>    <span class="p">)</span>
+</span><span id="export-1110"><a href="#export-1110"><span class="linenos">1110</span></a>
+</span><span id="export-1111"><a href="#export-1111"><span class="linenos">1111</span></a>    <span class="c1"># write to tables</span>
+</span><span id="export-1112"><a href="#export-1112"><span class="linenos">1112</span></a>    <span class="c1"># export as csv</span>
+</span><span id="export-1113"><a href="#export-1113"><span class="linenos">1113</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Phenotype exported successfully&quot;</span><span class="p">)</span>
 </span></pre></div>
 
 
@@ -3284,52 +2682,52 @@
 
     </div>
     <a class="headerlink" href="#copy"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="copy-1104"><a href="#copy-1104"><span class="linenos">1104</span></a><span class="k">def</span><span class="w"> </span><span class="nf">copy</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">target_dir</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">version</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
-</span><span id="copy-1105"><a href="#copy-1105"><span class="linenos">1105</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Copys a phen repo at a specific tagged version into a target directory&quot;&quot;&quot;</span>
-</span><span id="copy-1106"><a href="#copy-1106"><span class="linenos">1106</span></a>
-</span><span id="copy-1107"><a href="#copy-1107"><span class="linenos">1107</span></a>    <span class="c1"># Validate</span>
-</span><span id="copy-1108"><a href="#copy-1108"><span class="linenos">1108</span></a>    <span class="n">validate</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">)</span>
-</span><span id="copy-1109"><a href="#copy-1109"><span class="linenos">1109</span></a>    <span class="n">phen_path</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">)</span>
-</span><span id="copy-1110"><a href="#copy-1110"><span class="linenos">1110</span></a>
-</span><span id="copy-1111"><a href="#copy-1111"><span class="linenos">1111</span></a>    <span class="c1"># Check target directory exists</span>
-</span><span id="copy-1112"><a href="#copy-1112"><span class="linenos">1112</span></a>    <span class="n">target_path</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="n">target_dir</span><span class="p">)</span>
-</span><span id="copy-1113"><a href="#copy-1113"><span class="linenos">1113</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">target_path</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
-</span><span id="copy-1114"><a href="#copy-1114"><span class="linenos">1114</span></a>        <span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;The target directory </span><span class="si">{</span><span class="n">target_path</span><span class="si">}</span><span class="s2"> does not exist&quot;</span><span class="p">)</span>
-</span><span id="copy-1115"><a href="#copy-1115"><span class="linenos">1115</span></a>
-</span><span id="copy-1116"><a href="#copy-1116"><span class="linenos">1116</span></a>    <span class="c1"># Set copy directory</span>
-</span><span id="copy-1117"><a href="#copy-1117"><span class="linenos">1117</span></a>    <span class="n">copy_path</span> <span class="o">=</span> <span class="n">target_path</span> <span class="o">/</span> <span class="n">version</span>
-</span><span id="copy-1118"><a href="#copy-1118"><span class="linenos">1118</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Copying repo </span><span class="si">{</span><span class="n">phen_path</span><span class="si">}</span><span class="s2"> to </span><span class="si">{</span><span class="n">copy_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="copy-1119"><a href="#copy-1119"><span class="linenos">1119</span></a>
-</span><span id="copy-1120"><a href="#copy-1120"><span class="linenos">1120</span></a>    <span class="k">if</span> <span class="p">(</span>
-</span><span id="copy-1121"><a href="#copy-1121"><span class="linenos">1121</span></a>        <span class="n">copy_path</span><span class="o">.</span><span class="n">exists</span><span class="p">()</span> <span class="ow">and</span> <span class="n">copy_path</span><span class="o">.</span><span class="n">is_dir</span><span class="p">()</span>
-</span><span id="copy-1122"><a href="#copy-1122"><span class="linenos">1122</span></a>    <span class="p">):</span>  <span class="c1"># Check if it exists and is a directory</span>
-</span><span id="copy-1123"><a href="#copy-1123"><span class="linenos">1123</span></a>        <span class="n">copy</span> <span class="o">=</span> <span class="n">check_delete_dir</span><span class="p">(</span>
-</span><span id="copy-1124"><a href="#copy-1124"><span class="linenos">1124</span></a>            <span class="n">copy_path</span><span class="p">,</span>
-</span><span id="copy-1125"><a href="#copy-1125"><span class="linenos">1125</span></a>            <span class="sa">f</span><span class="s2">&quot;The directory </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">copy_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="s2"> already exists. Do you want to overwrite? (yes/no): &quot;</span><span class="p">,</span>
-</span><span id="copy-1126"><a href="#copy-1126"><span class="linenos">1126</span></a>        <span class="p">)</span>
-</span><span id="copy-1127"><a href="#copy-1127"><span class="linenos">1127</span></a>    <span class="k">else</span><span class="p">:</span>
-</span><span id="copy-1128"><a href="#copy-1128"><span class="linenos">1128</span></a>        <span class="n">copy</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="copy-1129"><a href="#copy-1129"><span class="linenos">1129</span></a>
-</span><span id="copy-1130"><a href="#copy-1130"><span class="linenos">1130</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">copy</span><span class="p">:</span>
-</span><span id="copy-1131"><a href="#copy-1131"><span class="linenos">1131</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Not copying the version </span><span class="si">{</span><span class="n">version</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="copy-1132"><a href="#copy-1132"><span class="linenos">1132</span></a>        <span class="k">return</span>
-</span><span id="copy-1133"><a href="#copy-1133"><span class="linenos">1133</span></a>
-</span><span id="copy-1134"><a href="#copy-1134"><span class="linenos">1134</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Cloning repo from </span><span class="si">{</span><span class="n">phen_path</span><span class="si">}</span><span class="s2"> into </span><span class="si">{</span><span class="n">copy_path</span><span class="si">}</span><span class="s2">...&quot;</span><span class="p">)</span>
-</span><span id="copy-1135"><a href="#copy-1135"><span class="linenos">1135</span></a>    <span class="n">repo</span> <span class="o">=</span> <span class="n">git</span><span class="o">.</span><span class="n">Repo</span><span class="o">.</span><span class="n">clone_from</span><span class="p">(</span><span class="n">phen_path</span><span class="p">,</span> <span class="n">copy_path</span><span class="p">)</span>
-</span><span id="copy-1136"><a href="#copy-1136"><span class="linenos">1136</span></a>
-</span><span id="copy-1137"><a href="#copy-1137"><span class="linenos">1137</span></a>    <span class="c1"># Check out the latest commit or specified version</span>
-</span><span id="copy-1138"><a href="#copy-1138"><span class="linenos">1138</span></a>    <span class="k">if</span> <span class="n">version</span><span class="p">:</span>
-</span><span id="copy-1139"><a href="#copy-1139"><span class="linenos">1139</span></a>        <span class="c1"># Checkout a specific version (e.g., branch, tag, or commit hash)</span>
-</span><span id="copy-1140"><a href="#copy-1140"><span class="linenos">1140</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Checking out version </span><span class="si">{</span><span class="n">version</span><span class="si">}</span><span class="s2">...&quot;</span><span class="p">)</span>
-</span><span id="copy-1141"><a href="#copy-1141"><span class="linenos">1141</span></a>        <span class="n">repo</span><span class="o">.</span><span class="n">git</span><span class="o">.</span><span class="n">checkout</span><span class="p">(</span><span class="n">version</span><span class="p">)</span>
-</span><span id="copy-1142"><a href="#copy-1142"><span class="linenos">1142</span></a>    <span class="k">else</span><span class="p">:</span>
-</span><span id="copy-1143"><a href="#copy-1143"><span class="linenos">1143</span></a>        <span class="c1"># Checkout the latest commit (HEAD)</span>
-</span><span id="copy-1144"><a href="#copy-1144"><span class="linenos">1144</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Checking out the latest commit...&quot;</span><span class="p">)</span>
-</span><span id="copy-1145"><a href="#copy-1145"><span class="linenos">1145</span></a>        <span class="n">repo</span><span class="o">.</span><span class="n">git</span><span class="o">.</span><span class="n">checkout</span><span class="p">(</span><span class="s2">&quot;HEAD&quot;</span><span class="p">)</span>
-</span><span id="copy-1146"><a href="#copy-1146"><span class="linenos">1146</span></a>
-</span><span id="copy-1147"><a href="#copy-1147"><span class="linenos">1147</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Copied </span><span class="si">{</span><span class="n">phen_path</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">repo</span><span class="o">.</span><span class="n">head</span><span class="o">.</span><span class="n">commit</span><span class="o">.</span><span class="n">hexsha</span><span class="p">[:</span><span class="mi">7</span><span class="p">]</span><span class="si">}</span><span class="s2"> in </span><span class="si">{</span><span class="n">copy_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+            <div class="pdoc-code codehilite"><pre><span></span><span id="copy-1116"><a href="#copy-1116"><span class="linenos">1116</span></a><span class="k">def</span><span class="w"> </span><span class="nf">copy</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">target_dir</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">version</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
+</span><span id="copy-1117"><a href="#copy-1117"><span class="linenos">1117</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Copys a phen repo at a specific tagged version into a target directory&quot;&quot;&quot;</span>
+</span><span id="copy-1118"><a href="#copy-1118"><span class="linenos">1118</span></a>
+</span><span id="copy-1119"><a href="#copy-1119"><span class="linenos">1119</span></a>    <span class="c1"># Validate</span>
+</span><span id="copy-1120"><a href="#copy-1120"><span class="linenos">1120</span></a>    <span class="n">validate</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">)</span>
+</span><span id="copy-1121"><a href="#copy-1121"><span class="linenos">1121</span></a>    <span class="n">phen_path</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">)</span>
+</span><span id="copy-1122"><a href="#copy-1122"><span class="linenos">1122</span></a>
+</span><span id="copy-1123"><a href="#copy-1123"><span class="linenos">1123</span></a>    <span class="c1"># Check target directory exists</span>
+</span><span id="copy-1124"><a href="#copy-1124"><span class="linenos">1124</span></a>    <span class="n">target_path</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="n">target_dir</span><span class="p">)</span>
+</span><span id="copy-1125"><a href="#copy-1125"><span class="linenos">1125</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">target_path</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
+</span><span id="copy-1126"><a href="#copy-1126"><span class="linenos">1126</span></a>        <span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;The target directory </span><span class="si">{</span><span class="n">target_path</span><span class="si">}</span><span class="s2"> does not exist&quot;</span><span class="p">)</span>
+</span><span id="copy-1127"><a href="#copy-1127"><span class="linenos">1127</span></a>
+</span><span id="copy-1128"><a href="#copy-1128"><span class="linenos">1128</span></a>    <span class="c1"># Set copy directory</span>
+</span><span id="copy-1129"><a href="#copy-1129"><span class="linenos">1129</span></a>    <span class="n">copy_path</span> <span class="o">=</span> <span class="n">target_path</span> <span class="o">/</span> <span class="n">version</span>
+</span><span id="copy-1130"><a href="#copy-1130"><span class="linenos">1130</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Copying repo </span><span class="si">{</span><span class="n">phen_path</span><span class="si">}</span><span class="s2"> to </span><span class="si">{</span><span class="n">copy_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="copy-1131"><a href="#copy-1131"><span class="linenos">1131</span></a>
+</span><span id="copy-1132"><a href="#copy-1132"><span class="linenos">1132</span></a>    <span class="k">if</span> <span class="p">(</span>
+</span><span id="copy-1133"><a href="#copy-1133"><span class="linenos">1133</span></a>        <span class="n">copy_path</span><span class="o">.</span><span class="n">exists</span><span class="p">()</span> <span class="ow">and</span> <span class="n">copy_path</span><span class="o">.</span><span class="n">is_dir</span><span class="p">()</span>
+</span><span id="copy-1134"><a href="#copy-1134"><span class="linenos">1134</span></a>    <span class="p">):</span>  <span class="c1"># Check if it exists and is a directory</span>
+</span><span id="copy-1135"><a href="#copy-1135"><span class="linenos">1135</span></a>        <span class="n">copy</span> <span class="o">=</span> <span class="n">_check_delete_dir</span><span class="p">(</span>
+</span><span id="copy-1136"><a href="#copy-1136"><span class="linenos">1136</span></a>            <span class="n">copy_path</span><span class="p">,</span>
+</span><span id="copy-1137"><a href="#copy-1137"><span class="linenos">1137</span></a>            <span class="sa">f</span><span class="s2">&quot;The directory </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">copy_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="s2"> already exists. Do you want to overwrite? (yes/no): &quot;</span><span class="p">,</span>
+</span><span id="copy-1138"><a href="#copy-1138"><span class="linenos">1138</span></a>        <span class="p">)</span>
+</span><span id="copy-1139"><a href="#copy-1139"><span class="linenos">1139</span></a>    <span class="k">else</span><span class="p">:</span>
+</span><span id="copy-1140"><a href="#copy-1140"><span class="linenos">1140</span></a>        <span class="n">copy</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="copy-1141"><a href="#copy-1141"><span class="linenos">1141</span></a>
+</span><span id="copy-1142"><a href="#copy-1142"><span class="linenos">1142</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">copy</span><span class="p">:</span>
+</span><span id="copy-1143"><a href="#copy-1143"><span class="linenos">1143</span></a>        <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Not copying the version </span><span class="si">{</span><span class="n">version</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="copy-1144"><a href="#copy-1144"><span class="linenos">1144</span></a>        <span class="k">return</span>
+</span><span id="copy-1145"><a href="#copy-1145"><span class="linenos">1145</span></a>
+</span><span id="copy-1146"><a href="#copy-1146"><span class="linenos">1146</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Cloning repo from </span><span class="si">{</span><span class="n">phen_path</span><span class="si">}</span><span class="s2"> into </span><span class="si">{</span><span class="n">copy_path</span><span class="si">}</span><span class="s2">...&quot;</span><span class="p">)</span>
+</span><span id="copy-1147"><a href="#copy-1147"><span class="linenos">1147</span></a>    <span class="n">repo</span> <span class="o">=</span> <span class="n">git</span><span class="o">.</span><span class="n">Repo</span><span class="o">.</span><span class="n">clone_from</span><span class="p">(</span><span class="n">phen_path</span><span class="p">,</span> <span class="n">copy_path</span><span class="p">)</span>
 </span><span id="copy-1148"><a href="#copy-1148"><span class="linenos">1148</span></a>
-</span><span id="copy-1149"><a href="#copy-1149"><span class="linenos">1149</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Phenotype copied successfully&quot;</span><span class="p">)</span>
+</span><span id="copy-1149"><a href="#copy-1149"><span class="linenos">1149</span></a>    <span class="c1"># Check out the latest commit or specified version</span>
+</span><span id="copy-1150"><a href="#copy-1150"><span class="linenos">1150</span></a>    <span class="k">if</span> <span class="n">version</span><span class="p">:</span>
+</span><span id="copy-1151"><a href="#copy-1151"><span class="linenos">1151</span></a>        <span class="c1"># Checkout a specific version (e.g., branch, tag, or commit hash)</span>
+</span><span id="copy-1152"><a href="#copy-1152"><span class="linenos">1152</span></a>        <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Checking out version </span><span class="si">{</span><span class="n">version</span><span class="si">}</span><span class="s2">...&quot;</span><span class="p">)</span>
+</span><span id="copy-1153"><a href="#copy-1153"><span class="linenos">1153</span></a>        <span class="n">repo</span><span class="o">.</span><span class="n">git</span><span class="o">.</span><span class="n">checkout</span><span class="p">(</span><span class="n">version</span><span class="p">)</span>
+</span><span id="copy-1154"><a href="#copy-1154"><span class="linenos">1154</span></a>    <span class="k">else</span><span class="p">:</span>
+</span><span id="copy-1155"><a href="#copy-1155"><span class="linenos">1155</span></a>        <span class="c1"># Checkout the latest commit (HEAD)</span>
+</span><span id="copy-1156"><a href="#copy-1156"><span class="linenos">1156</span></a>        <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Checking out the latest commit...&quot;</span><span class="p">)</span>
+</span><span id="copy-1157"><a href="#copy-1157"><span class="linenos">1157</span></a>        <span class="n">repo</span><span class="o">.</span><span class="n">git</span><span class="o">.</span><span class="n">checkout</span><span class="p">(</span><span class="s2">&quot;HEAD&quot;</span><span class="p">)</span>
+</span><span id="copy-1158"><a href="#copy-1158"><span class="linenos">1158</span></a>
+</span><span id="copy-1159"><a href="#copy-1159"><span class="linenos">1159</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Copied </span><span class="si">{</span><span class="n">phen_path</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">repo</span><span class="o">.</span><span class="n">head</span><span class="o">.</span><span class="n">commit</span><span class="o">.</span><span class="n">hexsha</span><span class="p">[:</span><span class="mi">7</span><span class="p">]</span><span class="si">}</span><span class="s2"> in </span><span class="si">{</span><span class="n">copy_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="copy-1160"><a href="#copy-1160"><span class="linenos">1160</span></a>
+</span><span id="copy-1161"><a href="#copy-1161"><span class="linenos">1161</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Phenotype copied successfully&quot;</span><span class="p">)</span>
 </span></pre></div>
 
 
@@ -3349,14 +2747,14 @@
 
     </div>
     <a class="headerlink" href="#extract_concepts"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="extract_concepts-1153"><a href="#extract_concepts-1153"><span class="linenos">1153</span></a><span class="k">def</span><span class="w"> </span><span class="nf">extract_concepts</span><span class="p">(</span><span class="n">config_data</span><span class="p">:</span> <span class="nb">dict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Tuple</span><span class="p">[</span><span class="nb">dict</span><span class="p">,</span> <span class="n">Set</span><span class="p">[</span><span class="nb">str</span><span class="p">]]:</span>
-</span><span id="extract_concepts-1154"><a href="#extract_concepts-1154"><span class="linenos">1154</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Extracts concepts as {name: file_path} dictionary and a name set.&quot;&quot;&quot;</span>
-</span><span id="extract_concepts-1155"><a href="#extract_concepts-1155"><span class="linenos">1155</span></a>    <span class="n">concepts_dict</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="extract_concepts-1156"><a href="#extract_concepts-1156"><span class="linenos">1156</span></a>        <span class="n">item</span><span class="p">[</span><span class="s2">&quot;name&quot;</span><span class="p">]:</span> <span class="n">item</span><span class="p">[</span><span class="s2">&quot;file&quot;</span><span class="p">][</span><span class="s2">&quot;path&quot;</span><span class="p">]</span>
-</span><span id="extract_concepts-1157"><a href="#extract_concepts-1157"><span class="linenos">1157</span></a>        <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">config_data</span><span class="p">[</span><span class="s2">&quot;phenotype&quot;</span><span class="p">][</span><span class="s2">&quot;concept_sets&quot;</span><span class="p">]</span>
-</span><span id="extract_concepts-1158"><a href="#extract_concepts-1158"><span class="linenos">1158</span></a>    <span class="p">}</span>
-</span><span id="extract_concepts-1159"><a href="#extract_concepts-1159"><span class="linenos">1159</span></a>    <span class="n">name_set</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">concepts_dict</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span>
-</span><span id="extract_concepts-1160"><a href="#extract_concepts-1160"><span class="linenos">1160</span></a>    <span class="k">return</span> <span class="n">concepts_dict</span><span class="p">,</span> <span class="n">name_set</span>
+            <div class="pdoc-code codehilite"><pre><span></span><span id="extract_concepts-1165"><a href="#extract_concepts-1165"><span class="linenos">1165</span></a><span class="k">def</span><span class="w"> </span><span class="nf">extract_concepts</span><span class="p">(</span><span class="n">config_data</span><span class="p">:</span> <span class="nb">dict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Tuple</span><span class="p">[</span><span class="nb">dict</span><span class="p">,</span> <span class="n">Set</span><span class="p">[</span><span class="nb">str</span><span class="p">]]:</span>
+</span><span id="extract_concepts-1166"><a href="#extract_concepts-1166"><span class="linenos">1166</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Extracts concepts as {name: file_path} dictionary and a name set.&quot;&quot;&quot;</span>
+</span><span id="extract_concepts-1167"><a href="#extract_concepts-1167"><span class="linenos">1167</span></a>    <span class="n">concepts_dict</span> <span class="o">=</span> <span class="p">{</span>
+</span><span id="extract_concepts-1168"><a href="#extract_concepts-1168"><span class="linenos">1168</span></a>        <span class="n">item</span><span class="p">[</span><span class="s2">&quot;name&quot;</span><span class="p">]:</span> <span class="n">item</span><span class="p">[</span><span class="s2">&quot;file&quot;</span><span class="p">][</span><span class="s2">&quot;path&quot;</span><span class="p">]</span>
+</span><span id="extract_concepts-1169"><a href="#extract_concepts-1169"><span class="linenos">1169</span></a>        <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">config_data</span><span class="p">[</span><span class="s2">&quot;phenotype&quot;</span><span class="p">][</span><span class="s2">&quot;concept_sets&quot;</span><span class="p">]</span>
+</span><span id="extract_concepts-1170"><a href="#extract_concepts-1170"><span class="linenos">1170</span></a>    <span class="p">}</span>
+</span><span id="extract_concepts-1171"><a href="#extract_concepts-1171"><span class="linenos">1171</span></a>    <span class="n">name_set</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">concepts_dict</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span>
+</span><span id="extract_concepts-1172"><a href="#extract_concepts-1172"><span class="linenos">1172</span></a>    <span class="k">return</span> <span class="n">concepts_dict</span><span class="p">,</span> <span class="n">name_set</span>
 </span></pre></div>
 
 
@@ -3364,47 +2762,6 @@
 </div>
 
 
-                </section>
-                <section id="extract_clean_deepdiff_keys">
-                            <input id="extract_clean_deepdiff_keys-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
-<div class="attr function">
-            
-        <span class="def">def</span>
-        <span class="name">extract_clean_deepdiff_keys</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">diff</span><span class="p">:</span> <span class="nb">dict</span>, </span><span class="param"><span class="n">key_type</span><span class="p">:</span> <span class="nb">str</span></span><span class="return-annotation">) -> <span class="n">Set</span><span class="p">[</span><span class="n">Any</span><span class="p">]</span>:</span></span>
-
-                <label class="view-source-button" for="extract_clean_deepdiff_keys-view-source"><span>View Source</span></label>
-
-    </div>
-    <a class="headerlink" href="#extract_clean_deepdiff_keys"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="extract_clean_deepdiff_keys-1163"><a href="#extract_clean_deepdiff_keys-1163"><span class="linenos">1163</span></a><span class="k">def</span><span class="w"> </span><span class="nf">extract_clean_deepdiff_keys</span><span class="p">(</span><span class="n">diff</span><span class="p">:</span> <span class="nb">dict</span><span class="p">,</span> <span class="n">key_type</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Set</span><span class="p">[</span><span class="n">Any</span><span class="p">]:</span>
-</span><span id="extract_clean_deepdiff_keys-1164"><a href="#extract_clean_deepdiff_keys-1164"><span class="linenos">1164</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="extract_clean_deepdiff_keys-1165"><a href="#extract_clean_deepdiff_keys-1165"><span class="linenos">1165</span></a><span class="sd">    Extracts clean keys from a DeepDiff dictionary.</span>
-</span><span id="extract_clean_deepdiff_keys-1166"><a href="#extract_clean_deepdiff_keys-1166"><span class="linenos">1166</span></a>
-</span><span id="extract_clean_deepdiff_keys-1167"><a href="#extract_clean_deepdiff_keys-1167"><span class="linenos">1167</span></a><span class="sd">    :param diff: DeepDiff result dictionary</span>
-</span><span id="extract_clean_deepdiff_keys-1168"><a href="#extract_clean_deepdiff_keys-1168"><span class="linenos">1168</span></a><span class="sd">    :param key_type: The type of change to extract (e.g., &quot;dictionary_item_added&quot;, &quot;dictionary_item_removed&quot;)</span>
-</span><span id="extract_clean_deepdiff_keys-1169"><a href="#extract_clean_deepdiff_keys-1169"><span class="linenos">1169</span></a><span class="sd">    :return: A set of clean key names</span>
-</span><span id="extract_clean_deepdiff_keys-1170"><a href="#extract_clean_deepdiff_keys-1170"><span class="linenos">1170</span></a><span class="sd">    &quot;&quot;&quot;</span>
-</span><span id="extract_clean_deepdiff_keys-1171"><a href="#extract_clean_deepdiff_keys-1171"><span class="linenos">1171</span></a>    <span class="k">return</span> <span class="p">{</span><span class="n">key</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;root[&#39;&quot;</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;&#39;]&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">diff</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">key_type</span><span class="p">,</span> <span class="p">[])}</span>
-</span></pre></div>
-
-
-            <div class="docstring"><p>Extracts clean keys from a DeepDiff dictionary.</p>
-
-<h6 id="parameters">Parameters</h6>
-
-<ul>
-<li><strong>diff</strong>:  DeepDiff result dictionary</li>
-<li><strong>key_type</strong>:  The type of change to extract (e.g., "dictionary_item_added", "dictionary_item_removed")</li>
-</ul>
-
-<h6 id="returns">Returns</h6>
-
-<blockquote>
-  <p>A set of clean key names</p>
-</blockquote>
-</div>
-
-
                 </section>
                 <section id="diff_config">
                             <input id="diff_config-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
@@ -3417,79 +2774,79 @@
 
     </div>
     <a class="headerlink" href="#diff_config"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="diff_config-1174"><a href="#diff_config-1174"><span class="linenos">1174</span></a><span class="k">def</span><span class="w"> </span><span class="nf">diff_config</span><span class="p">(</span><span class="n">old_config</span><span class="p">:</span> <span class="nb">dict</span><span class="p">,</span> <span class="n">new_config</span><span class="p">:</span> <span class="nb">dict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="diff_config-1175"><a href="#diff_config-1175"><span class="linenos">1175</span></a>    <span class="n">report</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2"># Changes to phenotype configuration</span><span class="se">\n</span><span class="s2">&quot;</span>
-</span><span id="diff_config-1176"><a href="#diff_config-1176"><span class="linenos">1176</span></a>    <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;This compares changes in the phenotype configuration including added, removed and renamed concept sets and changes to concept set source concept code file paths</span><span class="se">\n\n</span><span class="s2">&quot;</span>
-</span><span id="diff_config-1177"><a href="#diff_config-1177"><span class="linenos">1177</span></a>
-</span><span id="diff_config-1178"><a href="#diff_config-1178"><span class="linenos">1178</span></a>    <span class="n">old_concepts</span><span class="p">,</span> <span class="n">old_names</span> <span class="o">=</span> <span class="n">extract_concepts</span><span class="p">(</span><span class="n">old_config</span><span class="p">)</span>
-</span><span id="diff_config-1179"><a href="#diff_config-1179"><span class="linenos">1179</span></a>    <span class="n">new_concepts</span><span class="p">,</span> <span class="n">new_names</span> <span class="o">=</span> <span class="n">extract_concepts</span><span class="p">(</span><span class="n">new_config</span><span class="p">)</span>
-</span><span id="diff_config-1180"><a href="#diff_config-1180"><span class="linenos">1180</span></a>
-</span><span id="diff_config-1181"><a href="#diff_config-1181"><span class="linenos">1181</span></a>    <span class="c1"># Check added and removed names</span>
-</span><span id="diff_config-1182"><a href="#diff_config-1182"><span class="linenos">1182</span></a>    <span class="n">added_names</span> <span class="o">=</span> <span class="n">new_names</span> <span class="o">-</span> <span class="n">old_names</span>  <span class="c1"># Names that appear in new but not in old</span>
-</span><span id="diff_config-1183"><a href="#diff_config-1183"><span class="linenos">1183</span></a>    <span class="n">removed_names</span> <span class="o">=</span> <span class="n">old_names</span> <span class="o">-</span> <span class="n">new_names</span>  <span class="c1"># Names that were in old but not in new</span>
-</span><span id="diff_config-1184"><a href="#diff_config-1184"><span class="linenos">1184</span></a>
-</span><span id="diff_config-1185"><a href="#diff_config-1185"><span class="linenos">1185</span></a>    <span class="c1"># find file path changes for unchanged names</span>
-</span><span id="diff_config-1186"><a href="#diff_config-1186"><span class="linenos">1186</span></a>    <span class="n">unchanged_names</span> <span class="o">=</span> <span class="n">old_names</span> <span class="o">&amp;</span> <span class="n">new_names</span>  <span class="c1"># Names that exist in both</span>
-</span><span id="diff_config-1187"><a href="#diff_config-1187"><span class="linenos">1187</span></a>    <span class="n">file_diff</span> <span class="o">=</span> <span class="n">DeepDiff</span><span class="p">(</span>
-</span><span id="diff_config-1188"><a href="#diff_config-1188"><span class="linenos">1188</span></a>        <span class="p">{</span><span class="n">name</span><span class="p">:</span> <span class="n">old_concepts</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">unchanged_names</span><span class="p">},</span>
-</span><span id="diff_config-1189"><a href="#diff_config-1189"><span class="linenos">1189</span></a>        <span class="p">{</span><span class="n">name</span><span class="p">:</span> <span class="n">new_concepts</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">unchanged_names</span><span class="p">},</span>
-</span><span id="diff_config-1190"><a href="#diff_config-1190"><span class="linenos">1190</span></a>    <span class="p">)</span>
-</span><span id="diff_config-1191"><a href="#diff_config-1191"><span class="linenos">1191</span></a>
-</span><span id="diff_config-1192"><a href="#diff_config-1192"><span class="linenos">1192</span></a>    <span class="c1"># Find renamed concepts (same file, different name)</span>
-</span><span id="diff_config-1193"><a href="#diff_config-1193"><span class="linenos">1193</span></a>    <span class="n">renamed_concepts</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="diff_config-1194"><a href="#diff_config-1194"><span class="linenos">1194</span></a>    <span class="k">for</span> <span class="n">removed</span> <span class="ow">in</span> <span class="n">removed_names</span><span class="p">:</span>
-</span><span id="diff_config-1195"><a href="#diff_config-1195"><span class="linenos">1195</span></a>        <span class="n">old_path</span> <span class="o">=</span> <span class="n">old_concepts</span><span class="p">[</span><span class="n">removed</span><span class="p">]</span>
-</span><span id="diff_config-1196"><a href="#diff_config-1196"><span class="linenos">1196</span></a>        <span class="k">for</span> <span class="n">added</span> <span class="ow">in</span> <span class="n">added_names</span><span class="p">:</span>
-</span><span id="diff_config-1197"><a href="#diff_config-1197"><span class="linenos">1197</span></a>            <span class="n">new_path</span> <span class="o">=</span> <span class="n">new_concepts</span><span class="p">[</span><span class="n">added</span><span class="p">]</span>
-</span><span id="diff_config-1198"><a href="#diff_config-1198"><span class="linenos">1198</span></a>            <span class="k">if</span> <span class="n">old_path</span> <span class="o">==</span> <span class="n">new_path</span><span class="p">:</span>
-</span><span id="diff_config-1199"><a href="#diff_config-1199"><span class="linenos">1199</span></a>                <span class="n">renamed_concepts</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">removed</span><span class="p">,</span> <span class="n">added</span><span class="p">))</span>
-</span><span id="diff_config-1200"><a href="#diff_config-1200"><span class="linenos">1200</span></a>
-</span><span id="diff_config-1201"><a href="#diff_config-1201"><span class="linenos">1201</span></a>    <span class="c1"># Remove renamed concepts from added and removed sets</span>
-</span><span id="diff_config-1202"><a href="#diff_config-1202"><span class="linenos">1202</span></a>    <span class="k">for</span> <span class="n">old_name</span><span class="p">,</span> <span class="n">new_name</span> <span class="ow">in</span> <span class="n">renamed_concepts</span><span class="p">:</span>
-</span><span id="diff_config-1203"><a href="#diff_config-1203"><span class="linenos">1203</span></a>        <span class="n">added_names</span><span class="o">.</span><span class="n">discard</span><span class="p">(</span><span class="n">new_name</span><span class="p">)</span>
-</span><span id="diff_config-1204"><a href="#diff_config-1204"><span class="linenos">1204</span></a>        <span class="n">removed_names</span><span class="o">.</span><span class="n">discard</span><span class="p">(</span><span class="n">old_name</span><span class="p">)</span>
-</span><span id="diff_config-1205"><a href="#diff_config-1205"><span class="linenos">1205</span></a>
-</span><span id="diff_config-1206"><a href="#diff_config-1206"><span class="linenos">1206</span></a>    <span class="c1"># generate config report</span>
-</span><span id="diff_config-1207"><a href="#diff_config-1207"><span class="linenos">1207</span></a>    <span class="k">if</span> <span class="n">added_names</span><span class="p">:</span>
-</span><span id="diff_config-1208"><a href="#diff_config-1208"><span class="linenos">1208</span></a>        <span class="n">report</span> <span class="o">+=</span> <span class="s2">&quot;## Added Concepts</span><span class="se">\n</span><span class="s2">&quot;</span>
-</span><span id="diff_config-1209"><a href="#diff_config-1209"><span class="linenos">1209</span></a>        <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">added_names</span><span class="p">:</span>
-</span><span id="diff_config-1210"><a href="#diff_config-1210"><span class="linenos">1210</span></a>            <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;- `</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">` (File: `</span><span class="si">{</span><span class="n">new_concepts</span><span class="p">[</span><span class="n">name</span><span class="p">]</span><span class="si">}</span><span class="s2">`)</span><span class="se">\n</span><span class="s2">&quot;</span>
-</span><span id="diff_config-1211"><a href="#diff_config-1211"><span class="linenos">1211</span></a>        <span class="n">report</span> <span class="o">+=</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span>
+            <div class="pdoc-code codehilite"><pre><span></span><span id="diff_config-1186"><a href="#diff_config-1186"><span class="linenos">1186</span></a><span class="k">def</span><span class="w"> </span><span class="nf">diff_config</span><span class="p">(</span><span class="n">old_config</span><span class="p">:</span> <span class="nb">dict</span><span class="p">,</span> <span class="n">new_config</span><span class="p">:</span> <span class="nb">dict</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="diff_config-1187"><a href="#diff_config-1187"><span class="linenos">1187</span></a>    <span class="n">report</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2"># Changes to phenotype configuration</span><span class="se">\n</span><span class="s2">&quot;</span>
+</span><span id="diff_config-1188"><a href="#diff_config-1188"><span class="linenos">1188</span></a>    <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;This compares changes in the phenotype configuration including added, removed and renamed concept sets and changes to concept set source concept code file paths</span><span class="se">\n\n</span><span class="s2">&quot;</span>
+</span><span id="diff_config-1189"><a href="#diff_config-1189"><span class="linenos">1189</span></a>
+</span><span id="diff_config-1190"><a href="#diff_config-1190"><span class="linenos">1190</span></a>    <span class="n">old_concepts</span><span class="p">,</span> <span class="n">old_names</span> <span class="o">=</span> <span class="n">extract_concepts</span><span class="p">(</span><span class="n">old_config</span><span class="p">)</span>
+</span><span id="diff_config-1191"><a href="#diff_config-1191"><span class="linenos">1191</span></a>    <span class="n">new_concepts</span><span class="p">,</span> <span class="n">new_names</span> <span class="o">=</span> <span class="n">extract_concepts</span><span class="p">(</span><span class="n">new_config</span><span class="p">)</span>
+</span><span id="diff_config-1192"><a href="#diff_config-1192"><span class="linenos">1192</span></a>
+</span><span id="diff_config-1193"><a href="#diff_config-1193"><span class="linenos">1193</span></a>    <span class="c1"># Check added and removed names</span>
+</span><span id="diff_config-1194"><a href="#diff_config-1194"><span class="linenos">1194</span></a>    <span class="n">added_names</span> <span class="o">=</span> <span class="n">new_names</span> <span class="o">-</span> <span class="n">old_names</span>  <span class="c1"># Names that appear in new but not in old</span>
+</span><span id="diff_config-1195"><a href="#diff_config-1195"><span class="linenos">1195</span></a>    <span class="n">removed_names</span> <span class="o">=</span> <span class="n">old_names</span> <span class="o">-</span> <span class="n">new_names</span>  <span class="c1"># Names that were in old but not in new</span>
+</span><span id="diff_config-1196"><a href="#diff_config-1196"><span class="linenos">1196</span></a>
+</span><span id="diff_config-1197"><a href="#diff_config-1197"><span class="linenos">1197</span></a>    <span class="c1"># find file path changes for unchanged names</span>
+</span><span id="diff_config-1198"><a href="#diff_config-1198"><span class="linenos">1198</span></a>    <span class="n">unchanged_names</span> <span class="o">=</span> <span class="n">old_names</span> <span class="o">&amp;</span> <span class="n">new_names</span>  <span class="c1"># Names that exist in both</span>
+</span><span id="diff_config-1199"><a href="#diff_config-1199"><span class="linenos">1199</span></a>    <span class="n">file_diff</span> <span class="o">=</span> <span class="n">DeepDiff</span><span class="p">(</span>
+</span><span id="diff_config-1200"><a href="#diff_config-1200"><span class="linenos">1200</span></a>        <span class="p">{</span><span class="n">name</span><span class="p">:</span> <span class="n">old_concepts</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">unchanged_names</span><span class="p">},</span>
+</span><span id="diff_config-1201"><a href="#diff_config-1201"><span class="linenos">1201</span></a>        <span class="p">{</span><span class="n">name</span><span class="p">:</span> <span class="n">new_concepts</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">unchanged_names</span><span class="p">},</span>
+</span><span id="diff_config-1202"><a href="#diff_config-1202"><span class="linenos">1202</span></a>    <span class="p">)</span>
+</span><span id="diff_config-1203"><a href="#diff_config-1203"><span class="linenos">1203</span></a>
+</span><span id="diff_config-1204"><a href="#diff_config-1204"><span class="linenos">1204</span></a>    <span class="c1"># Find renamed concepts (same file, different name)</span>
+</span><span id="diff_config-1205"><a href="#diff_config-1205"><span class="linenos">1205</span></a>    <span class="n">renamed_concepts</span> <span class="o">=</span> <span class="p">[]</span>
+</span><span id="diff_config-1206"><a href="#diff_config-1206"><span class="linenos">1206</span></a>    <span class="k">for</span> <span class="n">removed</span> <span class="ow">in</span> <span class="n">removed_names</span><span class="p">:</span>
+</span><span id="diff_config-1207"><a href="#diff_config-1207"><span class="linenos">1207</span></a>        <span class="n">old_path</span> <span class="o">=</span> <span class="n">old_concepts</span><span class="p">[</span><span class="n">removed</span><span class="p">]</span>
+</span><span id="diff_config-1208"><a href="#diff_config-1208"><span class="linenos">1208</span></a>        <span class="k">for</span> <span class="n">added</span> <span class="ow">in</span> <span class="n">added_names</span><span class="p">:</span>
+</span><span id="diff_config-1209"><a href="#diff_config-1209"><span class="linenos">1209</span></a>            <span class="n">new_path</span> <span class="o">=</span> <span class="n">new_concepts</span><span class="p">[</span><span class="n">added</span><span class="p">]</span>
+</span><span id="diff_config-1210"><a href="#diff_config-1210"><span class="linenos">1210</span></a>            <span class="k">if</span> <span class="n">old_path</span> <span class="o">==</span> <span class="n">new_path</span><span class="p">:</span>
+</span><span id="diff_config-1211"><a href="#diff_config-1211"><span class="linenos">1211</span></a>                <span class="n">renamed_concepts</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">removed</span><span class="p">,</span> <span class="n">added</span><span class="p">))</span>
 </span><span id="diff_config-1212"><a href="#diff_config-1212"><span class="linenos">1212</span></a>
-</span><span id="diff_config-1213"><a href="#diff_config-1213"><span class="linenos">1213</span></a>    <span class="k">if</span> <span class="n">removed_names</span><span class="p">:</span>
-</span><span id="diff_config-1214"><a href="#diff_config-1214"><span class="linenos">1214</span></a>        <span class="n">report</span> <span class="o">+=</span> <span class="s2">&quot;## Removed Concepts</span><span class="se">\n</span><span class="s2">&quot;</span>
-</span><span id="diff_config-1215"><a href="#diff_config-1215"><span class="linenos">1215</span></a>        <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">removed_names</span><span class="p">:</span>
-</span><span id="diff_config-1216"><a href="#diff_config-1216"><span class="linenos">1216</span></a>            <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;- `</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">` (File: `</span><span class="si">{</span><span class="n">old_concepts</span><span class="p">[</span><span class="n">name</span><span class="p">]</span><span class="si">}</span><span class="s2">`)</span><span class="se">\n</span><span class="s2">&quot;</span>
-</span><span id="diff_config-1217"><a href="#diff_config-1217"><span class="linenos">1217</span></a>        <span class="n">report</span> <span class="o">+=</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span>
-</span><span id="diff_config-1218"><a href="#diff_config-1218"><span class="linenos">1218</span></a>
-</span><span id="diff_config-1219"><a href="#diff_config-1219"><span class="linenos">1219</span></a>    <span class="k">if</span> <span class="n">renamed_concepts</span><span class="p">:</span>
-</span><span id="diff_config-1220"><a href="#diff_config-1220"><span class="linenos">1220</span></a>        <span class="n">report</span> <span class="o">+=</span> <span class="s2">&quot;## Renamed Concepts</span><span class="se">\n</span><span class="s2">&quot;</span>
-</span><span id="diff_config-1221"><a href="#diff_config-1221"><span class="linenos">1221</span></a>        <span class="k">for</span> <span class="n">old_name</span><span class="p">,</span> <span class="n">new_name</span> <span class="ow">in</span> <span class="n">renamed_concepts</span><span class="p">:</span>
-</span><span id="diff_config-1222"><a href="#diff_config-1222"><span class="linenos">1222</span></a>            <span class="n">report</span> <span class="o">+=</span> <span class="p">(</span>
-</span><span id="diff_config-1223"><a href="#diff_config-1223"><span class="linenos">1223</span></a>                <span class="sa">f</span><span class="s2">&quot;- `</span><span class="si">{</span><span class="n">old_name</span><span class="si">}</span><span class="s2">` ➝ `</span><span class="si">{</span><span class="n">new_name</span><span class="si">}</span><span class="s2">` (File: `</span><span class="si">{</span><span class="n">old_concepts</span><span class="p">[</span><span class="n">old_name</span><span class="p">]</span><span class="si">}</span><span class="s2">`)</span><span class="se">\n</span><span class="s2">&quot;</span>
-</span><span id="diff_config-1224"><a href="#diff_config-1224"><span class="linenos">1224</span></a>            <span class="p">)</span>
-</span><span id="diff_config-1225"><a href="#diff_config-1225"><span class="linenos">1225</span></a>        <span class="n">report</span> <span class="o">+=</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span>
-</span><span id="diff_config-1226"><a href="#diff_config-1226"><span class="linenos">1226</span></a>
-</span><span id="diff_config-1227"><a href="#diff_config-1227"><span class="linenos">1227</span></a>    <span class="k">if</span> <span class="s2">&quot;values_changed&quot;</span> <span class="ow">in</span> <span class="n">file_diff</span><span class="p">:</span>
-</span><span id="diff_config-1228"><a href="#diff_config-1228"><span class="linenos">1228</span></a>        <span class="n">report</span> <span class="o">+=</span> <span class="s2">&quot;## Updated File Paths</span><span class="se">\n</span><span class="s2">&quot;</span>
-</span><span id="diff_config-1229"><a href="#diff_config-1229"><span class="linenos">1229</span></a>        <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">change</span> <span class="ow">in</span> <span class="n">file_diff</span><span class="p">[</span><span class="s2">&quot;values_changed&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
-</span><span id="diff_config-1230"><a href="#diff_config-1230"><span class="linenos">1230</span></a>            <span class="n">old_file</span> <span class="o">=</span> <span class="n">change</span><span class="p">[</span><span class="s2">&quot;old_value&quot;</span><span class="p">]</span>
-</span><span id="diff_config-1231"><a href="#diff_config-1231"><span class="linenos">1231</span></a>            <span class="n">new_file</span> <span class="o">=</span> <span class="n">change</span><span class="p">[</span><span class="s2">&quot;new_value&quot;</span><span class="p">]</span>
-</span><span id="diff_config-1232"><a href="#diff_config-1232"><span class="linenos">1232</span></a>            <span class="n">clean_name</span> <span class="o">=</span> <span class="n">name</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;root[&#39;&quot;</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;&#39;]&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
-</span><span id="diff_config-1233"><a href="#diff_config-1233"><span class="linenos">1233</span></a>            <span class="n">report</span> <span class="o">+=</span> <span class="p">(</span>
-</span><span id="diff_config-1234"><a href="#diff_config-1234"><span class="linenos">1234</span></a>                <span class="sa">f</span><span class="s2">&quot;- `</span><span class="si">{</span><span class="n">clean_name</span><span class="si">}</span><span class="s2">` changed file from `</span><span class="si">{</span><span class="n">old_file</span><span class="si">}</span><span class="s2">` ➝ `</span><span class="si">{</span><span class="n">new_file</span><span class="si">}</span><span class="s2">`</span><span class="se">\n</span><span class="s2">&quot;</span>
-</span><span id="diff_config-1235"><a href="#diff_config-1235"><span class="linenos">1235</span></a>            <span class="p">)</span>
-</span><span id="diff_config-1236"><a href="#diff_config-1236"><span class="linenos">1236</span></a>        <span class="n">report</span> <span class="o">+=</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span>
-</span><span id="diff_config-1237"><a href="#diff_config-1237"><span class="linenos">1237</span></a>
-</span><span id="diff_config-1238"><a href="#diff_config-1238"><span class="linenos">1238</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span>
-</span><span id="diff_config-1239"><a href="#diff_config-1239"><span class="linenos">1239</span></a>        <span class="n">added_names</span>
-</span><span id="diff_config-1240"><a href="#diff_config-1240"><span class="linenos">1240</span></a>        <span class="ow">or</span> <span class="n">removed_names</span>
-</span><span id="diff_config-1241"><a href="#diff_config-1241"><span class="linenos">1241</span></a>        <span class="ow">or</span> <span class="n">renamed_concepts</span>
-</span><span id="diff_config-1242"><a href="#diff_config-1242"><span class="linenos">1242</span></a>        <span class="ow">or</span> <span class="n">file_diff</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;values_changed&quot;</span><span class="p">)</span>
-</span><span id="diff_config-1243"><a href="#diff_config-1243"><span class="linenos">1243</span></a>    <span class="p">):</span>
-</span><span id="diff_config-1244"><a href="#diff_config-1244"><span class="linenos">1244</span></a>        <span class="n">report</span> <span class="o">+=</span> <span class="s2">&quot;No changes in concept sets.</span><span class="se">\n</span><span class="s2">&quot;</span>
-</span><span id="diff_config-1245"><a href="#diff_config-1245"><span class="linenos">1245</span></a>
-</span><span id="diff_config-1246"><a href="#diff_config-1246"><span class="linenos">1246</span></a>    <span class="k">return</span> <span class="n">report</span>
+</span><span id="diff_config-1213"><a href="#diff_config-1213"><span class="linenos">1213</span></a>    <span class="c1"># Remove renamed concepts from added and removed sets</span>
+</span><span id="diff_config-1214"><a href="#diff_config-1214"><span class="linenos">1214</span></a>    <span class="k">for</span> <span class="n">old_name</span><span class="p">,</span> <span class="n">new_name</span> <span class="ow">in</span> <span class="n">renamed_concepts</span><span class="p">:</span>
+</span><span id="diff_config-1215"><a href="#diff_config-1215"><span class="linenos">1215</span></a>        <span class="n">added_names</span><span class="o">.</span><span class="n">discard</span><span class="p">(</span><span class="n">new_name</span><span class="p">)</span>
+</span><span id="diff_config-1216"><a href="#diff_config-1216"><span class="linenos">1216</span></a>        <span class="n">removed_names</span><span class="o">.</span><span class="n">discard</span><span class="p">(</span><span class="n">old_name</span><span class="p">)</span>
+</span><span id="diff_config-1217"><a href="#diff_config-1217"><span class="linenos">1217</span></a>
+</span><span id="diff_config-1218"><a href="#diff_config-1218"><span class="linenos">1218</span></a>    <span class="c1"># generate config report</span>
+</span><span id="diff_config-1219"><a href="#diff_config-1219"><span class="linenos">1219</span></a>    <span class="k">if</span> <span class="n">added_names</span><span class="p">:</span>
+</span><span id="diff_config-1220"><a href="#diff_config-1220"><span class="linenos">1220</span></a>        <span class="n">report</span> <span class="o">+=</span> <span class="s2">&quot;## Added Concepts</span><span class="se">\n</span><span class="s2">&quot;</span>
+</span><span id="diff_config-1221"><a href="#diff_config-1221"><span class="linenos">1221</span></a>        <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">added_names</span><span class="p">:</span>
+</span><span id="diff_config-1222"><a href="#diff_config-1222"><span class="linenos">1222</span></a>            <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;- `</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">` (File: `</span><span class="si">{</span><span class="n">new_concepts</span><span class="p">[</span><span class="n">name</span><span class="p">]</span><span class="si">}</span><span class="s2">`)</span><span class="se">\n</span><span class="s2">&quot;</span>
+</span><span id="diff_config-1223"><a href="#diff_config-1223"><span class="linenos">1223</span></a>        <span class="n">report</span> <span class="o">+=</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span>
+</span><span id="diff_config-1224"><a href="#diff_config-1224"><span class="linenos">1224</span></a>
+</span><span id="diff_config-1225"><a href="#diff_config-1225"><span class="linenos">1225</span></a>    <span class="k">if</span> <span class="n">removed_names</span><span class="p">:</span>
+</span><span id="diff_config-1226"><a href="#diff_config-1226"><span class="linenos">1226</span></a>        <span class="n">report</span> <span class="o">+=</span> <span class="s2">&quot;## Removed Concepts</span><span class="se">\n</span><span class="s2">&quot;</span>
+</span><span id="diff_config-1227"><a href="#diff_config-1227"><span class="linenos">1227</span></a>        <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">removed_names</span><span class="p">:</span>
+</span><span id="diff_config-1228"><a href="#diff_config-1228"><span class="linenos">1228</span></a>            <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;- `</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2">` (File: `</span><span class="si">{</span><span class="n">old_concepts</span><span class="p">[</span><span class="n">name</span><span class="p">]</span><span class="si">}</span><span class="s2">`)</span><span class="se">\n</span><span class="s2">&quot;</span>
+</span><span id="diff_config-1229"><a href="#diff_config-1229"><span class="linenos">1229</span></a>        <span class="n">report</span> <span class="o">+=</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span>
+</span><span id="diff_config-1230"><a href="#diff_config-1230"><span class="linenos">1230</span></a>
+</span><span id="diff_config-1231"><a href="#diff_config-1231"><span class="linenos">1231</span></a>    <span class="k">if</span> <span class="n">renamed_concepts</span><span class="p">:</span>
+</span><span id="diff_config-1232"><a href="#diff_config-1232"><span class="linenos">1232</span></a>        <span class="n">report</span> <span class="o">+=</span> <span class="s2">&quot;## Renamed Concepts</span><span class="se">\n</span><span class="s2">&quot;</span>
+</span><span id="diff_config-1233"><a href="#diff_config-1233"><span class="linenos">1233</span></a>        <span class="k">for</span> <span class="n">old_name</span><span class="p">,</span> <span class="n">new_name</span> <span class="ow">in</span> <span class="n">renamed_concepts</span><span class="p">:</span>
+</span><span id="diff_config-1234"><a href="#diff_config-1234"><span class="linenos">1234</span></a>            <span class="n">report</span> <span class="o">+=</span> <span class="p">(</span>
+</span><span id="diff_config-1235"><a href="#diff_config-1235"><span class="linenos">1235</span></a>                <span class="sa">f</span><span class="s2">&quot;- `</span><span class="si">{</span><span class="n">old_name</span><span class="si">}</span><span class="s2">` ➝ `</span><span class="si">{</span><span class="n">new_name</span><span class="si">}</span><span class="s2">` (File: `</span><span class="si">{</span><span class="n">old_concepts</span><span class="p">[</span><span class="n">old_name</span><span class="p">]</span><span class="si">}</span><span class="s2">`)</span><span class="se">\n</span><span class="s2">&quot;</span>
+</span><span id="diff_config-1236"><a href="#diff_config-1236"><span class="linenos">1236</span></a>            <span class="p">)</span>
+</span><span id="diff_config-1237"><a href="#diff_config-1237"><span class="linenos">1237</span></a>        <span class="n">report</span> <span class="o">+=</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span>
+</span><span id="diff_config-1238"><a href="#diff_config-1238"><span class="linenos">1238</span></a>
+</span><span id="diff_config-1239"><a href="#diff_config-1239"><span class="linenos">1239</span></a>    <span class="k">if</span> <span class="s2">&quot;values_changed&quot;</span> <span class="ow">in</span> <span class="n">file_diff</span><span class="p">:</span>
+</span><span id="diff_config-1240"><a href="#diff_config-1240"><span class="linenos">1240</span></a>        <span class="n">report</span> <span class="o">+=</span> <span class="s2">&quot;## Updated File Paths</span><span class="se">\n</span><span class="s2">&quot;</span>
+</span><span id="diff_config-1241"><a href="#diff_config-1241"><span class="linenos">1241</span></a>        <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">change</span> <span class="ow">in</span> <span class="n">file_diff</span><span class="p">[</span><span class="s2">&quot;values_changed&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
+</span><span id="diff_config-1242"><a href="#diff_config-1242"><span class="linenos">1242</span></a>            <span class="n">old_file</span> <span class="o">=</span> <span class="n">change</span><span class="p">[</span><span class="s2">&quot;old_value&quot;</span><span class="p">]</span>
+</span><span id="diff_config-1243"><a href="#diff_config-1243"><span class="linenos">1243</span></a>            <span class="n">new_file</span> <span class="o">=</span> <span class="n">change</span><span class="p">[</span><span class="s2">&quot;new_value&quot;</span><span class="p">]</span>
+</span><span id="diff_config-1244"><a href="#diff_config-1244"><span class="linenos">1244</span></a>            <span class="n">clean_name</span> <span class="o">=</span> <span class="n">name</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;root[&#39;&quot;</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;&#39;]&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
+</span><span id="diff_config-1245"><a href="#diff_config-1245"><span class="linenos">1245</span></a>            <span class="n">report</span> <span class="o">+=</span> <span class="p">(</span>
+</span><span id="diff_config-1246"><a href="#diff_config-1246"><span class="linenos">1246</span></a>                <span class="sa">f</span><span class="s2">&quot;- `</span><span class="si">{</span><span class="n">clean_name</span><span class="si">}</span><span class="s2">` changed file from `</span><span class="si">{</span><span class="n">old_file</span><span class="si">}</span><span class="s2">` ➝ `</span><span class="si">{</span><span class="n">new_file</span><span class="si">}</span><span class="s2">`</span><span class="se">\n</span><span class="s2">&quot;</span>
+</span><span id="diff_config-1247"><a href="#diff_config-1247"><span class="linenos">1247</span></a>            <span class="p">)</span>
+</span><span id="diff_config-1248"><a href="#diff_config-1248"><span class="linenos">1248</span></a>        <span class="n">report</span> <span class="o">+=</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span>
+</span><span id="diff_config-1249"><a href="#diff_config-1249"><span class="linenos">1249</span></a>
+</span><span id="diff_config-1250"><a href="#diff_config-1250"><span class="linenos">1250</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span>
+</span><span id="diff_config-1251"><a href="#diff_config-1251"><span class="linenos">1251</span></a>        <span class="n">added_names</span>
+</span><span id="diff_config-1252"><a href="#diff_config-1252"><span class="linenos">1252</span></a>        <span class="ow">or</span> <span class="n">removed_names</span>
+</span><span id="diff_config-1253"><a href="#diff_config-1253"><span class="linenos">1253</span></a>        <span class="ow">or</span> <span class="n">renamed_concepts</span>
+</span><span id="diff_config-1254"><a href="#diff_config-1254"><span class="linenos">1254</span></a>        <span class="ow">or</span> <span class="n">file_diff</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;values_changed&quot;</span><span class="p">)</span>
+</span><span id="diff_config-1255"><a href="#diff_config-1255"><span class="linenos">1255</span></a>    <span class="p">):</span>
+</span><span id="diff_config-1256"><a href="#diff_config-1256"><span class="linenos">1256</span></a>        <span class="n">report</span> <span class="o">+=</span> <span class="s2">&quot;No changes in concept sets.</span><span class="se">\n</span><span class="s2">&quot;</span>
+</span><span id="diff_config-1257"><a href="#diff_config-1257"><span class="linenos">1257</span></a>
+</span><span id="diff_config-1258"><a href="#diff_config-1258"><span class="linenos">1258</span></a>    <span class="k">return</span> <span class="n">report</span>
 </span></pre></div>
 
 
@@ -3507,71 +2864,71 @@
 
     </div>
     <a class="headerlink" href="#diff_map_files"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="diff_map_files-1249"><a href="#diff_map_files-1249"><span class="linenos">1249</span></a><span class="k">def</span><span class="w"> </span><span class="nf">diff_map_files</span><span class="p">(</span><span class="n">old_map_path</span><span class="p">:</span> <span class="n">Path</span><span class="p">,</span> <span class="n">new_map_path</span><span class="p">:</span> <span class="n">Path</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="diff_map_files-1250"><a href="#diff_map_files-1250"><span class="linenos">1250</span></a>    <span class="n">old_output_files</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="diff_map_files-1251"><a href="#diff_map_files-1251"><span class="linenos">1251</span></a>        <span class="n">file</span><span class="o">.</span><span class="n">name</span>
-</span><span id="diff_map_files-1252"><a href="#diff_map_files-1252"><span class="linenos">1252</span></a>        <span class="k">for</span> <span class="n">file</span> <span class="ow">in</span> <span class="n">old_map_path</span><span class="o">.</span><span class="n">iterdir</span><span class="p">()</span>
-</span><span id="diff_map_files-1253"><a href="#diff_map_files-1253"><span class="linenos">1253</span></a>        <span class="k">if</span> <span class="n">file</span><span class="o">.</span><span class="n">is_file</span><span class="p">()</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">file</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;.&quot;</span><span class="p">)</span>
-</span><span id="diff_map_files-1254"><a href="#diff_map_files-1254"><span class="linenos">1254</span></a>    <span class="p">]</span>
-</span><span id="diff_map_files-1255"><a href="#diff_map_files-1255"><span class="linenos">1255</span></a>    <span class="n">new_output_files</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="diff_map_files-1256"><a href="#diff_map_files-1256"><span class="linenos">1256</span></a>        <span class="n">file</span><span class="o">.</span><span class="n">name</span>
-</span><span id="diff_map_files-1257"><a href="#diff_map_files-1257"><span class="linenos">1257</span></a>        <span class="k">for</span> <span class="n">file</span> <span class="ow">in</span> <span class="n">new_map_path</span><span class="o">.</span><span class="n">iterdir</span><span class="p">()</span>
-</span><span id="diff_map_files-1258"><a href="#diff_map_files-1258"><span class="linenos">1258</span></a>        <span class="k">if</span> <span class="n">file</span><span class="o">.</span><span class="n">is_file</span><span class="p">()</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">file</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;.&quot;</span><span class="p">)</span>
-</span><span id="diff_map_files-1259"><a href="#diff_map_files-1259"><span class="linenos">1259</span></a>    <span class="p">]</span>
-</span><span id="diff_map_files-1260"><a href="#diff_map_files-1260"><span class="linenos">1260</span></a>
-</span><span id="diff_map_files-1261"><a href="#diff_map_files-1261"><span class="linenos">1261</span></a>    <span class="c1"># Convert the lists to sets for easy comparison</span>
-</span><span id="diff_map_files-1262"><a href="#diff_map_files-1262"><span class="linenos">1262</span></a>    <span class="n">old_output_set</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">old_output_files</span><span class="p">)</span>
-</span><span id="diff_map_files-1263"><a href="#diff_map_files-1263"><span class="linenos">1263</span></a>    <span class="n">new_output_set</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">new_output_files</span><span class="p">)</span>
-</span><span id="diff_map_files-1264"><a href="#diff_map_files-1264"><span class="linenos">1264</span></a>
-</span><span id="diff_map_files-1265"><a href="#diff_map_files-1265"><span class="linenos">1265</span></a>    <span class="c1"># Outputs that are in old_output_set but not in new_output_set (removed files)</span>
-</span><span id="diff_map_files-1266"><a href="#diff_map_files-1266"><span class="linenos">1266</span></a>    <span class="n">removed_outputs</span> <span class="o">=</span> <span class="n">old_output_set</span> <span class="o">-</span> <span class="n">new_output_set</span>
-</span><span id="diff_map_files-1267"><a href="#diff_map_files-1267"><span class="linenos">1267</span></a>    <span class="c1"># Outputs that are in new_output_set but not in old_output_set (added files)</span>
-</span><span id="diff_map_files-1268"><a href="#diff_map_files-1268"><span class="linenos">1268</span></a>    <span class="n">added_outputs</span> <span class="o">=</span> <span class="n">new_output_set</span> <span class="o">-</span> <span class="n">old_output_set</span>
-</span><span id="diff_map_files-1269"><a href="#diff_map_files-1269"><span class="linenos">1269</span></a>    <span class="c1"># Outputs that are the intersection of old_output_set and new_output_set</span>
-</span><span id="diff_map_files-1270"><a href="#diff_map_files-1270"><span class="linenos">1270</span></a>    <span class="n">common_outputs</span> <span class="o">=</span> <span class="n">old_output_set</span> <span class="o">&amp;</span> <span class="n">new_output_set</span>
-</span><span id="diff_map_files-1271"><a href="#diff_map_files-1271"><span class="linenos">1271</span></a>
-</span><span id="diff_map_files-1272"><a href="#diff_map_files-1272"><span class="linenos">1272</span></a>    <span class="n">report</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2"># Changes to available translations</span><span class="se">\n</span><span class="s2">&quot;</span>
-</span><span id="diff_map_files-1273"><a href="#diff_map_files-1273"><span class="linenos">1273</span></a>    <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;This compares the coding translations files available.</span><span class="se">\n\n</span><span class="s2">&quot;</span>
-</span><span id="diff_map_files-1274"><a href="#diff_map_files-1274"><span class="linenos">1274</span></a>    <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;- Removed outputs: </span><span class="si">{</span><span class="nb">sorted</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">removed_outputs</span><span class="p">))</span><span class="si">}</span><span class="se">\n</span><span class="s2">&quot;</span>
-</span><span id="diff_map_files-1275"><a href="#diff_map_files-1275"><span class="linenos">1275</span></a>    <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;- Added outputs: </span><span class="si">{</span><span class="nb">sorted</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">added_outputs</span><span class="p">))</span><span class="si">}</span><span class="se">\n</span><span class="s2">&quot;</span>
-</span><span id="diff_map_files-1276"><a href="#diff_map_files-1276"><span class="linenos">1276</span></a>    <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;- Common outputs: </span><span class="si">{</span><span class="nb">sorted</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">common_outputs</span><span class="p">))</span><span class="si">}</span><span class="se">\n\n</span><span class="s2">&quot;</span>
-</span><span id="diff_map_files-1277"><a href="#diff_map_files-1277"><span class="linenos">1277</span></a>
-</span><span id="diff_map_files-1278"><a href="#diff_map_files-1278"><span class="linenos">1278</span></a>    <span class="c1"># Step N: Compare common outputs between versions</span>
-</span><span id="diff_map_files-1279"><a href="#diff_map_files-1279"><span class="linenos">1279</span></a>    <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;# Changes to concepts in translation files</span><span class="se">\n\n</span><span class="s2">&quot;</span>
-</span><span id="diff_map_files-1280"><a href="#diff_map_files-1280"><span class="linenos">1280</span></a>    <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;This compares the added and removed concepts in each of the coding translation files. Note that this might be different to the config.yaml if the translations have not been run for the current config.</span><span class="se">\n\n</span><span class="s2">&quot;</span>
-</span><span id="diff_map_files-1281"><a href="#diff_map_files-1281"><span class="linenos">1281</span></a>    <span class="k">for</span> <span class="n">file</span> <span class="ow">in</span> <span class="n">common_outputs</span><span class="p">:</span>
-</span><span id="diff_map_files-1282"><a href="#diff_map_files-1282"><span class="linenos">1282</span></a>        <span class="n">old_output</span> <span class="o">=</span> <span class="n">old_map_path</span> <span class="o">/</span> <span class="n">file</span>
-</span><span id="diff_map_files-1283"><a href="#diff_map_files-1283"><span class="linenos">1283</span></a>        <span class="n">new_output</span> <span class="o">=</span> <span class="n">new_map_path</span> <span class="o">/</span> <span class="n">file</span>
-</span><span id="diff_map_files-1284"><a href="#diff_map_files-1284"><span class="linenos">1284</span></a>
-</span><span id="diff_map_files-1285"><a href="#diff_map_files-1285"><span class="linenos">1285</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Old ouptput: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">old_output</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="diff_map_files-1286"><a href="#diff_map_files-1286"><span class="linenos">1286</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;New ouptput: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">new_output</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="diff_map_files-1287"><a href="#diff_map_files-1287"><span class="linenos">1287</span></a>
-</span><span id="diff_map_files-1288"><a href="#diff_map_files-1288"><span class="linenos">1288</span></a>        <span class="n">df1</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_csv</span><span class="p">(</span><span class="n">old_output</span><span class="p">)</span>
-</span><span id="diff_map_files-1289"><a href="#diff_map_files-1289"><span class="linenos">1289</span></a>        <span class="n">df1</span> <span class="o">=</span> <span class="n">df1</span><span class="p">[[</span><span class="s2">&quot;CONCEPT&quot;</span><span class="p">,</span> <span class="s2">&quot;CONCEPT_SET&quot;</span><span class="p">]]</span><span class="o">.</span><span class="n">groupby</span><span class="p">(</span><span class="s2">&quot;CONCEPT_SET&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">count</span><span class="p">()</span>
-</span><span id="diff_map_files-1290"><a href="#diff_map_files-1290"><span class="linenos">1290</span></a>        <span class="n">df2</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_csv</span><span class="p">(</span><span class="n">new_output</span><span class="p">)</span>
-</span><span id="diff_map_files-1291"><a href="#diff_map_files-1291"><span class="linenos">1291</span></a>        <span class="n">df2</span> <span class="o">=</span> <span class="n">df2</span><span class="p">[[</span><span class="s2">&quot;CONCEPT&quot;</span><span class="p">,</span> <span class="s2">&quot;CONCEPT_SET&quot;</span><span class="p">]]</span><span class="o">.</span><span class="n">groupby</span><span class="p">(</span><span class="s2">&quot;CONCEPT_SET&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">count</span><span class="p">()</span>
-</span><span id="diff_map_files-1292"><a href="#diff_map_files-1292"><span class="linenos">1292</span></a>
-</span><span id="diff_map_files-1293"><a href="#diff_map_files-1293"><span class="linenos">1293</span></a>        <span class="c1"># Check for added and removed concepts</span>
-</span><span id="diff_map_files-1294"><a href="#diff_map_files-1294"><span class="linenos">1294</span></a>        <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;- File </span><span class="si">{</span><span class="n">file</span><span class="si">}</span><span class="se">\n</span><span class="s2">&quot;</span>
-</span><span id="diff_map_files-1295"><a href="#diff_map_files-1295"><span class="linenos">1295</span></a>        <span class="n">sorted_list</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">df1</span><span class="o">.</span><span class="n">index</span><span class="p">)</span> <span class="o">-</span> <span class="nb">set</span><span class="p">(</span><span class="n">df2</span><span class="o">.</span><span class="n">index</span><span class="p">)))</span>
-</span><span id="diff_map_files-1296"><a href="#diff_map_files-1296"><span class="linenos">1296</span></a>        <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;- Removed concepts </span><span class="si">{</span><span class="n">sorted_list</span><span class="si">}</span><span class="se">\n</span><span class="s2">&quot;</span>
-</span><span id="diff_map_files-1297"><a href="#diff_map_files-1297"><span class="linenos">1297</span></a>        <span class="n">sorted_list</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">df2</span><span class="o">.</span><span class="n">index</span><span class="p">)</span> <span class="o">-</span> <span class="nb">set</span><span class="p">(</span><span class="n">df1</span><span class="o">.</span><span class="n">index</span><span class="p">)))</span>
-</span><span id="diff_map_files-1298"><a href="#diff_map_files-1298"><span class="linenos">1298</span></a>        <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;- Added concepts </span><span class="si">{</span><span class="n">sorted_list</span><span class="si">}</span><span class="se">\n</span><span class="s2">&quot;</span>
+            <div class="pdoc-code codehilite"><pre><span></span><span id="diff_map_files-1261"><a href="#diff_map_files-1261"><span class="linenos">1261</span></a><span class="k">def</span><span class="w"> </span><span class="nf">diff_map_files</span><span class="p">(</span><span class="n">old_map_path</span><span class="p">:</span> <span class="n">Path</span><span class="p">,</span> <span class="n">new_map_path</span><span class="p">:</span> <span class="n">Path</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
+</span><span id="diff_map_files-1262"><a href="#diff_map_files-1262"><span class="linenos">1262</span></a>    <span class="n">old_output_files</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="diff_map_files-1263"><a href="#diff_map_files-1263"><span class="linenos">1263</span></a>        <span class="n">file</span><span class="o">.</span><span class="n">name</span>
+</span><span id="diff_map_files-1264"><a href="#diff_map_files-1264"><span class="linenos">1264</span></a>        <span class="k">for</span> <span class="n">file</span> <span class="ow">in</span> <span class="n">old_map_path</span><span class="o">.</span><span class="n">iterdir</span><span class="p">()</span>
+</span><span id="diff_map_files-1265"><a href="#diff_map_files-1265"><span class="linenos">1265</span></a>        <span class="k">if</span> <span class="n">file</span><span class="o">.</span><span class="n">is_file</span><span class="p">()</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">file</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;.&quot;</span><span class="p">)</span>
+</span><span id="diff_map_files-1266"><a href="#diff_map_files-1266"><span class="linenos">1266</span></a>    <span class="p">]</span>
+</span><span id="diff_map_files-1267"><a href="#diff_map_files-1267"><span class="linenos">1267</span></a>    <span class="n">new_output_files</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="diff_map_files-1268"><a href="#diff_map_files-1268"><span class="linenos">1268</span></a>        <span class="n">file</span><span class="o">.</span><span class="n">name</span>
+</span><span id="diff_map_files-1269"><a href="#diff_map_files-1269"><span class="linenos">1269</span></a>        <span class="k">for</span> <span class="n">file</span> <span class="ow">in</span> <span class="n">new_map_path</span><span class="o">.</span><span class="n">iterdir</span><span class="p">()</span>
+</span><span id="diff_map_files-1270"><a href="#diff_map_files-1270"><span class="linenos">1270</span></a>        <span class="k">if</span> <span class="n">file</span><span class="o">.</span><span class="n">is_file</span><span class="p">()</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">file</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;.&quot;</span><span class="p">)</span>
+</span><span id="diff_map_files-1271"><a href="#diff_map_files-1271"><span class="linenos">1271</span></a>    <span class="p">]</span>
+</span><span id="diff_map_files-1272"><a href="#diff_map_files-1272"><span class="linenos">1272</span></a>
+</span><span id="diff_map_files-1273"><a href="#diff_map_files-1273"><span class="linenos">1273</span></a>    <span class="c1"># Convert the lists to sets for easy comparison</span>
+</span><span id="diff_map_files-1274"><a href="#diff_map_files-1274"><span class="linenos">1274</span></a>    <span class="n">old_output_set</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">old_output_files</span><span class="p">)</span>
+</span><span id="diff_map_files-1275"><a href="#diff_map_files-1275"><span class="linenos">1275</span></a>    <span class="n">new_output_set</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">new_output_files</span><span class="p">)</span>
+</span><span id="diff_map_files-1276"><a href="#diff_map_files-1276"><span class="linenos">1276</span></a>
+</span><span id="diff_map_files-1277"><a href="#diff_map_files-1277"><span class="linenos">1277</span></a>    <span class="c1"># Outputs that are in old_output_set but not in new_output_set (removed files)</span>
+</span><span id="diff_map_files-1278"><a href="#diff_map_files-1278"><span class="linenos">1278</span></a>    <span class="n">removed_outputs</span> <span class="o">=</span> <span class="n">old_output_set</span> <span class="o">-</span> <span class="n">new_output_set</span>
+</span><span id="diff_map_files-1279"><a href="#diff_map_files-1279"><span class="linenos">1279</span></a>    <span class="c1"># Outputs that are in new_output_set but not in old_output_set (added files)</span>
+</span><span id="diff_map_files-1280"><a href="#diff_map_files-1280"><span class="linenos">1280</span></a>    <span class="n">added_outputs</span> <span class="o">=</span> <span class="n">new_output_set</span> <span class="o">-</span> <span class="n">old_output_set</span>
+</span><span id="diff_map_files-1281"><a href="#diff_map_files-1281"><span class="linenos">1281</span></a>    <span class="c1"># Outputs that are the intersection of old_output_set and new_output_set</span>
+</span><span id="diff_map_files-1282"><a href="#diff_map_files-1282"><span class="linenos">1282</span></a>    <span class="n">common_outputs</span> <span class="o">=</span> <span class="n">old_output_set</span> <span class="o">&amp;</span> <span class="n">new_output_set</span>
+</span><span id="diff_map_files-1283"><a href="#diff_map_files-1283"><span class="linenos">1283</span></a>
+</span><span id="diff_map_files-1284"><a href="#diff_map_files-1284"><span class="linenos">1284</span></a>    <span class="n">report</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2"># Changes to available translations</span><span class="se">\n</span><span class="s2">&quot;</span>
+</span><span id="diff_map_files-1285"><a href="#diff_map_files-1285"><span class="linenos">1285</span></a>    <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;This compares the coding translations files available.</span><span class="se">\n\n</span><span class="s2">&quot;</span>
+</span><span id="diff_map_files-1286"><a href="#diff_map_files-1286"><span class="linenos">1286</span></a>    <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;- Removed outputs: </span><span class="si">{</span><span class="nb">sorted</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">removed_outputs</span><span class="p">))</span><span class="si">}</span><span class="se">\n</span><span class="s2">&quot;</span>
+</span><span id="diff_map_files-1287"><a href="#diff_map_files-1287"><span class="linenos">1287</span></a>    <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;- Added outputs: </span><span class="si">{</span><span class="nb">sorted</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">added_outputs</span><span class="p">))</span><span class="si">}</span><span class="se">\n</span><span class="s2">&quot;</span>
+</span><span id="diff_map_files-1288"><a href="#diff_map_files-1288"><span class="linenos">1288</span></a>    <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;- Common outputs: </span><span class="si">{</span><span class="nb">sorted</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">common_outputs</span><span class="p">))</span><span class="si">}</span><span class="se">\n\n</span><span class="s2">&quot;</span>
+</span><span id="diff_map_files-1289"><a href="#diff_map_files-1289"><span class="linenos">1289</span></a>
+</span><span id="diff_map_files-1290"><a href="#diff_map_files-1290"><span class="linenos">1290</span></a>    <span class="c1"># Step N: Compare common outputs between versions</span>
+</span><span id="diff_map_files-1291"><a href="#diff_map_files-1291"><span class="linenos">1291</span></a>    <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;# Changes to concepts in translation files</span><span class="se">\n\n</span><span class="s2">&quot;</span>
+</span><span id="diff_map_files-1292"><a href="#diff_map_files-1292"><span class="linenos">1292</span></a>    <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;This compares the added and removed concepts in each of the coding translation files. Note that this might be different to the config.yaml if the translations have not been run for the current config.</span><span class="se">\n\n</span><span class="s2">&quot;</span>
+</span><span id="diff_map_files-1293"><a href="#diff_map_files-1293"><span class="linenos">1293</span></a>    <span class="k">for</span> <span class="n">file</span> <span class="ow">in</span> <span class="n">common_outputs</span><span class="p">:</span>
+</span><span id="diff_map_files-1294"><a href="#diff_map_files-1294"><span class="linenos">1294</span></a>        <span class="n">old_output</span> <span class="o">=</span> <span class="n">old_map_path</span> <span class="o">/</span> <span class="n">file</span>
+</span><span id="diff_map_files-1295"><a href="#diff_map_files-1295"><span class="linenos">1295</span></a>        <span class="n">new_output</span> <span class="o">=</span> <span class="n">new_map_path</span> <span class="o">/</span> <span class="n">file</span>
+</span><span id="diff_map_files-1296"><a href="#diff_map_files-1296"><span class="linenos">1296</span></a>
+</span><span id="diff_map_files-1297"><a href="#diff_map_files-1297"><span class="linenos">1297</span></a>        <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Old ouptput: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">old_output</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="diff_map_files-1298"><a href="#diff_map_files-1298"><span class="linenos">1298</span></a>        <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;New ouptput: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">new_output</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
 </span><span id="diff_map_files-1299"><a href="#diff_map_files-1299"><span class="linenos">1299</span></a>
-</span><span id="diff_map_files-1300"><a href="#diff_map_files-1300"><span class="linenos">1300</span></a>        <span class="c1"># Check for changed concepts</span>
-</span><span id="diff_map_files-1301"><a href="#diff_map_files-1301"><span class="linenos">1301</span></a>        <span class="n">diff</span> <span class="o">=</span> <span class="n">df2</span> <span class="o">-</span> <span class="n">df1</span>  <span class="c1"># diff in counts</span>
-</span><span id="diff_map_files-1302"><a href="#diff_map_files-1302"><span class="linenos">1302</span></a>        <span class="n">diff</span> <span class="o">=</span> <span class="n">diff</span><span class="p">[</span>
-</span><span id="diff_map_files-1303"><a href="#diff_map_files-1303"><span class="linenos">1303</span></a>            <span class="p">(</span><span class="o">~</span><span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">&quot;CONCEPT&quot;</span><span class="p">]</span> <span class="o">==</span> <span class="mf">0.0</span><span class="p">))</span> <span class="o">&amp;</span> <span class="n">diff</span><span class="p">[</span><span class="s2">&quot;CONCEPT&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">notna</span><span class="p">()</span>
-</span><span id="diff_map_files-1304"><a href="#diff_map_files-1304"><span class="linenos">1304</span></a>        <span class="p">]</span>  <span class="c1"># get non-zero counts</span>
-</span><span id="diff_map_files-1305"><a href="#diff_map_files-1305"><span class="linenos">1305</span></a>        <span class="n">s</span> <span class="o">=</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span>
-</span><span id="diff_map_files-1306"><a href="#diff_map_files-1306"><span class="linenos">1306</span></a>        <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">diff</span><span class="o">.</span><span class="n">index</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
-</span><span id="diff_map_files-1307"><a href="#diff_map_files-1307"><span class="linenos">1307</span></a>            <span class="k">for</span> <span class="n">concept</span><span class="p">,</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">diff</span><span class="o">.</span><span class="n">iterrows</span><span class="p">():</span>
-</span><span id="diff_map_files-1308"><a href="#diff_map_files-1308"><span class="linenos">1308</span></a>                <span class="n">s</span> <span class="o">+=</span> <span class="s2">&quot;</span><span class="se">\t</span><span class="s2"> - </span><span class="si">{}</span><span class="s2"> </span><span class="si">{}</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">concept</span><span class="p">,</span> <span class="n">row</span><span class="p">[</span><span class="s2">&quot;CONCEPT&quot;</span><span class="p">])</span>
-</span><span id="diff_map_files-1309"><a href="#diff_map_files-1309"><span class="linenos">1309</span></a>            <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;- Changed concepts </span><span class="si">{</span><span class="n">s</span><span class="si">}</span><span class="se">\n\n</span><span class="s2">&quot;</span>
-</span><span id="diff_map_files-1310"><a href="#diff_map_files-1310"><span class="linenos">1310</span></a>        <span class="k">else</span><span class="p">:</span>
-</span><span id="diff_map_files-1311"><a href="#diff_map_files-1311"><span class="linenos">1311</span></a>            <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;- Changed concepts []</span><span class="se">\n\n</span><span class="s2">&quot;</span>
-</span><span id="diff_map_files-1312"><a href="#diff_map_files-1312"><span class="linenos">1312</span></a>
-</span><span id="diff_map_files-1313"><a href="#diff_map_files-1313"><span class="linenos">1313</span></a>    <span class="k">return</span> <span class="n">report</span>
+</span><span id="diff_map_files-1300"><a href="#diff_map_files-1300"><span class="linenos">1300</span></a>        <span class="n">df1</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_csv</span><span class="p">(</span><span class="n">old_output</span><span class="p">)</span>
+</span><span id="diff_map_files-1301"><a href="#diff_map_files-1301"><span class="linenos">1301</span></a>        <span class="n">df1</span> <span class="o">=</span> <span class="n">df1</span><span class="p">[[</span><span class="s2">&quot;CONCEPT&quot;</span><span class="p">,</span> <span class="s2">&quot;CONCEPT_SET&quot;</span><span class="p">]]</span><span class="o">.</span><span class="n">groupby</span><span class="p">(</span><span class="s2">&quot;CONCEPT_SET&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">count</span><span class="p">()</span>
+</span><span id="diff_map_files-1302"><a href="#diff_map_files-1302"><span class="linenos">1302</span></a>        <span class="n">df2</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_csv</span><span class="p">(</span><span class="n">new_output</span><span class="p">)</span>
+</span><span id="diff_map_files-1303"><a href="#diff_map_files-1303"><span class="linenos">1303</span></a>        <span class="n">df2</span> <span class="o">=</span> <span class="n">df2</span><span class="p">[[</span><span class="s2">&quot;CONCEPT&quot;</span><span class="p">,</span> <span class="s2">&quot;CONCEPT_SET&quot;</span><span class="p">]]</span><span class="o">.</span><span class="n">groupby</span><span class="p">(</span><span class="s2">&quot;CONCEPT_SET&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">count</span><span class="p">()</span>
+</span><span id="diff_map_files-1304"><a href="#diff_map_files-1304"><span class="linenos">1304</span></a>
+</span><span id="diff_map_files-1305"><a href="#diff_map_files-1305"><span class="linenos">1305</span></a>        <span class="c1"># Check for added and removed concepts</span>
+</span><span id="diff_map_files-1306"><a href="#diff_map_files-1306"><span class="linenos">1306</span></a>        <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;- File </span><span class="si">{</span><span class="n">file</span><span class="si">}</span><span class="se">\n</span><span class="s2">&quot;</span>
+</span><span id="diff_map_files-1307"><a href="#diff_map_files-1307"><span class="linenos">1307</span></a>        <span class="n">sorted_list</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">df1</span><span class="o">.</span><span class="n">index</span><span class="p">)</span> <span class="o">-</span> <span class="nb">set</span><span class="p">(</span><span class="n">df2</span><span class="o">.</span><span class="n">index</span><span class="p">)))</span>
+</span><span id="diff_map_files-1308"><a href="#diff_map_files-1308"><span class="linenos">1308</span></a>        <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;- Removed concepts </span><span class="si">{</span><span class="n">sorted_list</span><span class="si">}</span><span class="se">\n</span><span class="s2">&quot;</span>
+</span><span id="diff_map_files-1309"><a href="#diff_map_files-1309"><span class="linenos">1309</span></a>        <span class="n">sorted_list</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">df2</span><span class="o">.</span><span class="n">index</span><span class="p">)</span> <span class="o">-</span> <span class="nb">set</span><span class="p">(</span><span class="n">df1</span><span class="o">.</span><span class="n">index</span><span class="p">)))</span>
+</span><span id="diff_map_files-1310"><a href="#diff_map_files-1310"><span class="linenos">1310</span></a>        <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;- Added concepts </span><span class="si">{</span><span class="n">sorted_list</span><span class="si">}</span><span class="se">\n</span><span class="s2">&quot;</span>
+</span><span id="diff_map_files-1311"><a href="#diff_map_files-1311"><span class="linenos">1311</span></a>
+</span><span id="diff_map_files-1312"><a href="#diff_map_files-1312"><span class="linenos">1312</span></a>        <span class="c1"># Check for changed concepts</span>
+</span><span id="diff_map_files-1313"><a href="#diff_map_files-1313"><span class="linenos">1313</span></a>        <span class="n">diff</span> <span class="o">=</span> <span class="n">df2</span> <span class="o">-</span> <span class="n">df1</span>  <span class="c1"># diff in counts</span>
+</span><span id="diff_map_files-1314"><a href="#diff_map_files-1314"><span class="linenos">1314</span></a>        <span class="n">diff</span> <span class="o">=</span> <span class="n">diff</span><span class="p">[</span>
+</span><span id="diff_map_files-1315"><a href="#diff_map_files-1315"><span class="linenos">1315</span></a>            <span class="p">(</span><span class="o">~</span><span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">&quot;CONCEPT&quot;</span><span class="p">]</span> <span class="o">==</span> <span class="mf">0.0</span><span class="p">))</span> <span class="o">&amp;</span> <span class="n">diff</span><span class="p">[</span><span class="s2">&quot;CONCEPT&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">notna</span><span class="p">()</span>
+</span><span id="diff_map_files-1316"><a href="#diff_map_files-1316"><span class="linenos">1316</span></a>        <span class="p">]</span>  <span class="c1"># get non-zero counts</span>
+</span><span id="diff_map_files-1317"><a href="#diff_map_files-1317"><span class="linenos">1317</span></a>        <span class="n">s</span> <span class="o">=</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span>
+</span><span id="diff_map_files-1318"><a href="#diff_map_files-1318"><span class="linenos">1318</span></a>        <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">diff</span><span class="o">.</span><span class="n">index</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
+</span><span id="diff_map_files-1319"><a href="#diff_map_files-1319"><span class="linenos">1319</span></a>            <span class="k">for</span> <span class="n">concept</span><span class="p">,</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">diff</span><span class="o">.</span><span class="n">iterrows</span><span class="p">():</span>
+</span><span id="diff_map_files-1320"><a href="#diff_map_files-1320"><span class="linenos">1320</span></a>                <span class="n">s</span> <span class="o">+=</span> <span class="s2">&quot;</span><span class="se">\t</span><span class="s2"> - </span><span class="si">{}</span><span class="s2"> </span><span class="si">{}</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">concept</span><span class="p">,</span> <span class="n">row</span><span class="p">[</span><span class="s2">&quot;CONCEPT&quot;</span><span class="p">])</span>
+</span><span id="diff_map_files-1321"><a href="#diff_map_files-1321"><span class="linenos">1321</span></a>            <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;- Changed concepts </span><span class="si">{</span><span class="n">s</span><span class="si">}</span><span class="se">\n\n</span><span class="s2">&quot;</span>
+</span><span id="diff_map_files-1322"><a href="#diff_map_files-1322"><span class="linenos">1322</span></a>        <span class="k">else</span><span class="p">:</span>
+</span><span id="diff_map_files-1323"><a href="#diff_map_files-1323"><span class="linenos">1323</span></a>            <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;- Changed concepts []</span><span class="se">\n\n</span><span class="s2">&quot;</span>
+</span><span id="diff_map_files-1324"><a href="#diff_map_files-1324"><span class="linenos">1324</span></a>
+</span><span id="diff_map_files-1325"><a href="#diff_map_files-1325"><span class="linenos">1325</span></a>    <span class="k">return</span> <span class="n">report</span>
 </span></pre></div>
 
 
@@ -3589,57 +2946,57 @@
 
     </div>
     <a class="headerlink" href="#diff_phen"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="diff_phen-1316"><a href="#diff_phen-1316"><span class="linenos">1316</span></a><span class="k">def</span><span class="w"> </span><span class="nf">diff_phen</span><span class="p">(</span>
-</span><span id="diff_phen-1317"><a href="#diff_phen-1317"><span class="linenos">1317</span></a>    <span class="n">new_phen_path</span><span class="p">:</span> <span class="n">Path</span><span class="p">,</span>
-</span><span id="diff_phen-1318"><a href="#diff_phen-1318"><span class="linenos">1318</span></a>    <span class="n">new_version</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
-</span><span id="diff_phen-1319"><a href="#diff_phen-1319"><span class="linenos">1319</span></a>    <span class="n">old_phen_path</span><span class="p">:</span> <span class="n">Path</span><span class="p">,</span>
-</span><span id="diff_phen-1320"><a href="#diff_phen-1320"><span class="linenos">1320</span></a>    <span class="n">old_version</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
-</span><span id="diff_phen-1321"><a href="#diff_phen-1321"><span class="linenos">1321</span></a>    <span class="n">report_path</span><span class="p">:</span> <span class="n">Path</span><span class="p">,</span>
-</span><span id="diff_phen-1322"><a href="#diff_phen-1322"><span class="linenos">1322</span></a><span class="p">):</span>
-</span><span id="diff_phen-1323"><a href="#diff_phen-1323"><span class="linenos">1323</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Compare the differences between two versions of a phenotype&quot;&quot;&quot;</span>
-</span><span id="diff_phen-1324"><a href="#diff_phen-1324"><span class="linenos">1324</span></a>
-</span><span id="diff_phen-1325"><a href="#diff_phen-1325"><span class="linenos">1325</span></a>    <span class="c1"># validate phenotypes</span>
-</span><span id="diff_phen-1326"><a href="#diff_phen-1326"><span class="linenos">1326</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Validating for diff old path: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">old_phen_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="diff_phen-1327"><a href="#diff_phen-1327"><span class="linenos">1327</span></a>    <span class="n">validate</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">old_phen_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">()))</span>
-</span><span id="diff_phen-1328"><a href="#diff_phen-1328"><span class="linenos">1328</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Validating for diff new path: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">new_phen_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="diff_phen-1329"><a href="#diff_phen-1329"><span class="linenos">1329</span></a>    <span class="n">validate</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">new_phen_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">()))</span>
-</span><span id="diff_phen-1330"><a href="#diff_phen-1330"><span class="linenos">1330</span></a>
-</span><span id="diff_phen-1331"><a href="#diff_phen-1331"><span class="linenos">1331</span></a>    <span class="c1"># get old and new config</span>
-</span><span id="diff_phen-1332"><a href="#diff_phen-1332"><span class="linenos">1332</span></a>    <span class="n">old_config_path</span> <span class="o">=</span> <span class="n">old_phen_path</span> <span class="o">/</span> <span class="n">CONFIG_FILE</span>
-</span><span id="diff_phen-1333"><a href="#diff_phen-1333"><span class="linenos">1333</span></a>    <span class="k">with</span> <span class="n">old_config_path</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="s2">&quot;r&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
-</span><span id="diff_phen-1334"><a href="#diff_phen-1334"><span class="linenos">1334</span></a>        <span class="n">old_config</span> <span class="o">=</span> <span class="n">yaml</span><span class="o">.</span><span class="n">safe_load</span><span class="p">(</span><span class="n">file</span><span class="p">)</span>
-</span><span id="diff_phen-1335"><a href="#diff_phen-1335"><span class="linenos">1335</span></a>    <span class="n">new_config_path</span> <span class="o">=</span> <span class="n">new_phen_path</span> <span class="o">/</span> <span class="n">CONFIG_FILE</span>
-</span><span id="diff_phen-1336"><a href="#diff_phen-1336"><span class="linenos">1336</span></a>    <span class="k">with</span> <span class="n">new_config_path</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="s2">&quot;r&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
-</span><span id="diff_phen-1337"><a href="#diff_phen-1337"><span class="linenos">1337</span></a>        <span class="n">new_config</span> <span class="o">=</span> <span class="n">yaml</span><span class="o">.</span><span class="n">safe_load</span><span class="p">(</span><span class="n">file</span><span class="p">)</span>
-</span><span id="diff_phen-1338"><a href="#diff_phen-1338"><span class="linenos">1338</span></a>
-</span><span id="diff_phen-1339"><a href="#diff_phen-1339"><span class="linenos">1339</span></a>    <span class="c1"># write report heading</span>
-</span><span id="diff_phen-1340"><a href="#diff_phen-1340"><span class="linenos">1340</span></a>    <span class="n">report</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;# Phenotype Comparison Report</span><span class="se">\n</span><span class="s2">&quot;</span>
-</span><span id="diff_phen-1341"><a href="#diff_phen-1341"><span class="linenos">1341</span></a>    <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;## Original phenotype</span><span class="se">\n</span><span class="s2">&quot;</span>
-</span><span id="diff_phen-1342"><a href="#diff_phen-1342"><span class="linenos">1342</span></a>    <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;  - </span><span class="si">{</span><span class="n">old_config</span><span class="p">[</span><span class="s1">&#39;phenotype&#39;</span><span class="p">][</span><span class="s1">&#39;omop&#39;</span><span class="p">][</span><span class="s1">&#39;vocabulary_id&#39;</span><span class="p">]</span><span class="si">}</span><span class="se">\n</span><span class="s2">&quot;</span>
-</span><span id="diff_phen-1343"><a href="#diff_phen-1343"><span class="linenos">1343</span></a>    <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;  - </span><span class="si">{</span><span class="n">old_version</span><span class="si">}</span><span class="se">\n</span><span class="s2">&quot;</span>
-</span><span id="diff_phen-1344"><a href="#diff_phen-1344"><span class="linenos">1344</span></a>    <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;  - </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">old_phen_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="se">\n</span><span class="s2">&quot;</span>
-</span><span id="diff_phen-1345"><a href="#diff_phen-1345"><span class="linenos">1345</span></a>    <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;## Changed phenotype:</span><span class="se">\n</span><span class="s2">&quot;</span>
-</span><span id="diff_phen-1346"><a href="#diff_phen-1346"><span class="linenos">1346</span></a>    <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;  - </span><span class="si">{</span><span class="n">new_config</span><span class="p">[</span><span class="s1">&#39;phenotype&#39;</span><span class="p">][</span><span class="s1">&#39;omop&#39;</span><span class="p">][</span><span class="s1">&#39;vocabulary_id&#39;</span><span class="p">]</span><span class="si">}</span><span class="se">\n</span><span class="s2">&quot;</span>
-</span><span id="diff_phen-1347"><a href="#diff_phen-1347"><span class="linenos">1347</span></a>    <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;  - </span><span class="si">{</span><span class="n">new_version</span><span class="si">}</span><span class="se">\n</span><span class="s2">&quot;</span>
-</span><span id="diff_phen-1348"><a href="#diff_phen-1348"><span class="linenos">1348</span></a>    <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;  - </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">new_phen_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="se">\n</span><span class="s2">&quot;</span>
-</span><span id="diff_phen-1349"><a href="#diff_phen-1349"><span class="linenos">1349</span></a>
-</span><span id="diff_phen-1350"><a href="#diff_phen-1350"><span class="linenos">1350</span></a>    <span class="c1"># Step 1: check differences configuration files</span>
-</span><span id="diff_phen-1351"><a href="#diff_phen-1351"><span class="linenos">1351</span></a>    <span class="c1"># Convert list of dicts into a dict: {name: file}</span>
-</span><span id="diff_phen-1352"><a href="#diff_phen-1352"><span class="linenos">1352</span></a>    <span class="n">report</span> <span class="o">+=</span> <span class="n">diff_config</span><span class="p">(</span><span class="n">old_config</span><span class="p">,</span> <span class="n">new_config</span><span class="p">)</span>
-</span><span id="diff_phen-1353"><a href="#diff_phen-1353"><span class="linenos">1353</span></a>
-</span><span id="diff_phen-1354"><a href="#diff_phen-1354"><span class="linenos">1354</span></a>    <span class="c1"># Step 2: check differences between map files</span>
-</span><span id="diff_phen-1355"><a href="#diff_phen-1355"><span class="linenos">1355</span></a>    <span class="c1"># List files from output directories</span>
-</span><span id="diff_phen-1356"><a href="#diff_phen-1356"><span class="linenos">1356</span></a>    <span class="n">old_map_path</span> <span class="o">=</span> <span class="n">old_phen_path</span> <span class="o">/</span> <span class="n">MAP_DIR</span>
-</span><span id="diff_phen-1357"><a href="#diff_phen-1357"><span class="linenos">1357</span></a>    <span class="n">new_map_path</span> <span class="o">=</span> <span class="n">new_phen_path</span> <span class="o">/</span> <span class="n">MAP_DIR</span>
-</span><span id="diff_phen-1358"><a href="#diff_phen-1358"><span class="linenos">1358</span></a>    <span class="n">report</span> <span class="o">+=</span> <span class="n">diff_map_files</span><span class="p">(</span><span class="n">old_map_path</span><span class="p">,</span> <span class="n">new_map_path</span><span class="p">)</span>
-</span><span id="diff_phen-1359"><a href="#diff_phen-1359"><span class="linenos">1359</span></a>
-</span><span id="diff_phen-1360"><a href="#diff_phen-1360"><span class="linenos">1360</span></a>    <span class="c1"># initialise report file</span>
-</span><span id="diff_phen-1361"><a href="#diff_phen-1361"><span class="linenos">1361</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Writing to report file </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">report_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="diff_phen-1362"><a href="#diff_phen-1362"><span class="linenos">1362</span></a>    <span class="n">report_file</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">report_path</span><span class="p">,</span> <span class="s2">&quot;w&quot;</span><span class="p">)</span>
-</span><span id="diff_phen-1363"><a href="#diff_phen-1363"><span class="linenos">1363</span></a>    <span class="n">report_file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">report</span><span class="p">)</span>
-</span><span id="diff_phen-1364"><a href="#diff_phen-1364"><span class="linenos">1364</span></a>    <span class="n">report_file</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+            <div class="pdoc-code codehilite"><pre><span></span><span id="diff_phen-1328"><a href="#diff_phen-1328"><span class="linenos">1328</span></a><span class="k">def</span><span class="w"> </span><span class="nf">diff_phen</span><span class="p">(</span>
+</span><span id="diff_phen-1329"><a href="#diff_phen-1329"><span class="linenos">1329</span></a>    <span class="n">new_phen_path</span><span class="p">:</span> <span class="n">Path</span><span class="p">,</span>
+</span><span id="diff_phen-1330"><a href="#diff_phen-1330"><span class="linenos">1330</span></a>    <span class="n">new_version</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
+</span><span id="diff_phen-1331"><a href="#diff_phen-1331"><span class="linenos">1331</span></a>    <span class="n">old_phen_path</span><span class="p">:</span> <span class="n">Path</span><span class="p">,</span>
+</span><span id="diff_phen-1332"><a href="#diff_phen-1332"><span class="linenos">1332</span></a>    <span class="n">old_version</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
+</span><span id="diff_phen-1333"><a href="#diff_phen-1333"><span class="linenos">1333</span></a>    <span class="n">report_path</span><span class="p">:</span> <span class="n">Path</span><span class="p">,</span>
+</span><span id="diff_phen-1334"><a href="#diff_phen-1334"><span class="linenos">1334</span></a><span class="p">):</span>
+</span><span id="diff_phen-1335"><a href="#diff_phen-1335"><span class="linenos">1335</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Compare the differences between two versions of a phenotype&quot;&quot;&quot;</span>
+</span><span id="diff_phen-1336"><a href="#diff_phen-1336"><span class="linenos">1336</span></a>
+</span><span id="diff_phen-1337"><a href="#diff_phen-1337"><span class="linenos">1337</span></a>    <span class="c1"># validate phenotypes</span>
+</span><span id="diff_phen-1338"><a href="#diff_phen-1338"><span class="linenos">1338</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Validating for diff old path: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">old_phen_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="diff_phen-1339"><a href="#diff_phen-1339"><span class="linenos">1339</span></a>    <span class="n">validate</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">old_phen_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">()))</span>
+</span><span id="diff_phen-1340"><a href="#diff_phen-1340"><span class="linenos">1340</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Validating for diff new path: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">new_phen_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="diff_phen-1341"><a href="#diff_phen-1341"><span class="linenos">1341</span></a>    <span class="n">validate</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">new_phen_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">()))</span>
+</span><span id="diff_phen-1342"><a href="#diff_phen-1342"><span class="linenos">1342</span></a>
+</span><span id="diff_phen-1343"><a href="#diff_phen-1343"><span class="linenos">1343</span></a>    <span class="c1"># get old and new config</span>
+</span><span id="diff_phen-1344"><a href="#diff_phen-1344"><span class="linenos">1344</span></a>    <span class="n">old_config_path</span> <span class="o">=</span> <span class="n">old_phen_path</span> <span class="o">/</span> <span class="n">CONFIG_FILE</span>
+</span><span id="diff_phen-1345"><a href="#diff_phen-1345"><span class="linenos">1345</span></a>    <span class="k">with</span> <span class="n">old_config_path</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="s2">&quot;r&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
+</span><span id="diff_phen-1346"><a href="#diff_phen-1346"><span class="linenos">1346</span></a>        <span class="n">old_config</span> <span class="o">=</span> <span class="n">yaml</span><span class="o">.</span><span class="n">safe_load</span><span class="p">(</span><span class="n">file</span><span class="p">)</span>
+</span><span id="diff_phen-1347"><a href="#diff_phen-1347"><span class="linenos">1347</span></a>    <span class="n">new_config_path</span> <span class="o">=</span> <span class="n">new_phen_path</span> <span class="o">/</span> <span class="n">CONFIG_FILE</span>
+</span><span id="diff_phen-1348"><a href="#diff_phen-1348"><span class="linenos">1348</span></a>    <span class="k">with</span> <span class="n">new_config_path</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="s2">&quot;r&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
+</span><span id="diff_phen-1349"><a href="#diff_phen-1349"><span class="linenos">1349</span></a>        <span class="n">new_config</span> <span class="o">=</span> <span class="n">yaml</span><span class="o">.</span><span class="n">safe_load</span><span class="p">(</span><span class="n">file</span><span class="p">)</span>
+</span><span id="diff_phen-1350"><a href="#diff_phen-1350"><span class="linenos">1350</span></a>
+</span><span id="diff_phen-1351"><a href="#diff_phen-1351"><span class="linenos">1351</span></a>    <span class="c1"># write report heading</span>
+</span><span id="diff_phen-1352"><a href="#diff_phen-1352"><span class="linenos">1352</span></a>    <span class="n">report</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;# Phenotype Comparison Report</span><span class="se">\n</span><span class="s2">&quot;</span>
+</span><span id="diff_phen-1353"><a href="#diff_phen-1353"><span class="linenos">1353</span></a>    <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;## Original phenotype</span><span class="se">\n</span><span class="s2">&quot;</span>
+</span><span id="diff_phen-1354"><a href="#diff_phen-1354"><span class="linenos">1354</span></a>    <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;  - </span><span class="si">{</span><span class="n">old_config</span><span class="p">[</span><span class="s1">&#39;phenotype&#39;</span><span class="p">][</span><span class="s1">&#39;omop&#39;</span><span class="p">][</span><span class="s1">&#39;vocabulary_id&#39;</span><span class="p">]</span><span class="si">}</span><span class="se">\n</span><span class="s2">&quot;</span>
+</span><span id="diff_phen-1355"><a href="#diff_phen-1355"><span class="linenos">1355</span></a>    <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;  - </span><span class="si">{</span><span class="n">old_version</span><span class="si">}</span><span class="se">\n</span><span class="s2">&quot;</span>
+</span><span id="diff_phen-1356"><a href="#diff_phen-1356"><span class="linenos">1356</span></a>    <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;  - </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">old_phen_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="se">\n</span><span class="s2">&quot;</span>
+</span><span id="diff_phen-1357"><a href="#diff_phen-1357"><span class="linenos">1357</span></a>    <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;## Changed phenotype:</span><span class="se">\n</span><span class="s2">&quot;</span>
+</span><span id="diff_phen-1358"><a href="#diff_phen-1358"><span class="linenos">1358</span></a>    <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;  - </span><span class="si">{</span><span class="n">new_config</span><span class="p">[</span><span class="s1">&#39;phenotype&#39;</span><span class="p">][</span><span class="s1">&#39;omop&#39;</span><span class="p">][</span><span class="s1">&#39;vocabulary_id&#39;</span><span class="p">]</span><span class="si">}</span><span class="se">\n</span><span class="s2">&quot;</span>
+</span><span id="diff_phen-1359"><a href="#diff_phen-1359"><span class="linenos">1359</span></a>    <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;  - </span><span class="si">{</span><span class="n">new_version</span><span class="si">}</span><span class="se">\n</span><span class="s2">&quot;</span>
+</span><span id="diff_phen-1360"><a href="#diff_phen-1360"><span class="linenos">1360</span></a>    <span class="n">report</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;  - </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">new_phen_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="se">\n</span><span class="s2">&quot;</span>
+</span><span id="diff_phen-1361"><a href="#diff_phen-1361"><span class="linenos">1361</span></a>
+</span><span id="diff_phen-1362"><a href="#diff_phen-1362"><span class="linenos">1362</span></a>    <span class="c1"># Step 1: check differences configuration files</span>
+</span><span id="diff_phen-1363"><a href="#diff_phen-1363"><span class="linenos">1363</span></a>    <span class="c1"># Convert list of dicts into a dict: {name: file}</span>
+</span><span id="diff_phen-1364"><a href="#diff_phen-1364"><span class="linenos">1364</span></a>    <span class="n">report</span> <span class="o">+=</span> <span class="n">diff_config</span><span class="p">(</span><span class="n">old_config</span><span class="p">,</span> <span class="n">new_config</span><span class="p">)</span>
 </span><span id="diff_phen-1365"><a href="#diff_phen-1365"><span class="linenos">1365</span></a>
-</span><span id="diff_phen-1366"><a href="#diff_phen-1366"><span class="linenos">1366</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Phenotypes diff&#39;d successfully&quot;</span><span class="p">)</span>
+</span><span id="diff_phen-1366"><a href="#diff_phen-1366"><span class="linenos">1366</span></a>    <span class="c1"># Step 2: check differences between map files</span>
+</span><span id="diff_phen-1367"><a href="#diff_phen-1367"><span class="linenos">1367</span></a>    <span class="c1"># List files from output directories</span>
+</span><span id="diff_phen-1368"><a href="#diff_phen-1368"><span class="linenos">1368</span></a>    <span class="n">old_map_path</span> <span class="o">=</span> <span class="n">old_phen_path</span> <span class="o">/</span> <span class="n">MAP_DIR</span>
+</span><span id="diff_phen-1369"><a href="#diff_phen-1369"><span class="linenos">1369</span></a>    <span class="n">new_map_path</span> <span class="o">=</span> <span class="n">new_phen_path</span> <span class="o">/</span> <span class="n">MAP_DIR</span>
+</span><span id="diff_phen-1370"><a href="#diff_phen-1370"><span class="linenos">1370</span></a>    <span class="n">report</span> <span class="o">+=</span> <span class="n">diff_map_files</span><span class="p">(</span><span class="n">old_map_path</span><span class="p">,</span> <span class="n">new_map_path</span><span class="p">)</span>
+</span><span id="diff_phen-1371"><a href="#diff_phen-1371"><span class="linenos">1371</span></a>
+</span><span id="diff_phen-1372"><a href="#diff_phen-1372"><span class="linenos">1372</span></a>    <span class="c1"># initialise report file</span>
+</span><span id="diff_phen-1373"><a href="#diff_phen-1373"><span class="linenos">1373</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Writing to report file </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">report_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="diff_phen-1374"><a href="#diff_phen-1374"><span class="linenos">1374</span></a>    <span class="n">report_file</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">report_path</span><span class="p">,</span> <span class="s2">&quot;w&quot;</span><span class="p">)</span>
+</span><span id="diff_phen-1375"><a href="#diff_phen-1375"><span class="linenos">1375</span></a>    <span class="n">report_file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">report</span><span class="p">)</span>
+</span><span id="diff_phen-1376"><a href="#diff_phen-1376"><span class="linenos">1376</span></a>    <span class="n">report_file</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+</span><span id="diff_phen-1377"><a href="#diff_phen-1377"><span class="linenos">1377</span></a>
+</span><span id="diff_phen-1378"><a href="#diff_phen-1378"><span class="linenos">1378</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Phenotypes diff&#39;d successfully&quot;</span><span class="p">)</span>
 </span></pre></div>
 
 
@@ -3659,70 +3016,70 @@
 
     </div>
     <a class="headerlink" href="#diff"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="diff-1369"><a href="#diff-1369"><span class="linenos">1369</span></a><span class="k">def</span><span class="w"> </span><span class="nf">diff</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">version</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">old_phen_dir</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">old_version</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
-</span><span id="diff-1370"><a href="#diff-1370"><span class="linenos">1370</span></a>    <span class="c1"># make tmp directory .acmc</span>
-</span><span id="diff-1371"><a href="#diff-1371"><span class="linenos">1371</span></a>    <span class="n">timestamp</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s2">&quot;%Y%m</span><span class="si">%d</span><span class="s2">_%H%M%S&quot;</span><span class="p">)</span>
-</span><span id="diff-1372"><a href="#diff-1372"><span class="linenos">1372</span></a>    <span class="n">temp_dir</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;.acmc/diff_</span><span class="si">{</span><span class="n">timestamp</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="diff-1373"><a href="#diff-1373"><span class="linenos">1373</span></a>
-</span><span id="diff-1374"><a href="#diff-1374"><span class="linenos">1374</span></a>    <span class="n">changed_phen_path</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">)</span>
-</span><span id="diff-1375"><a href="#diff-1375"><span class="linenos">1375</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">changed_phen_path</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
-</span><span id="diff-1376"><a href="#diff-1376"><span class="linenos">1376</span></a>        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
-</span><span id="diff-1377"><a href="#diff-1377"><span class="linenos">1377</span></a>            <span class="sa">f</span><span class="s2">&quot;Changed phenotype directory does not exist: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">changed_phen_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="diff-1378"><a href="#diff-1378"><span class="linenos">1378</span></a>        <span class="p">)</span>
-</span><span id="diff-1379"><a href="#diff-1379"><span class="linenos">1379</span></a>
-</span><span id="diff-1380"><a href="#diff-1380"><span class="linenos">1380</span></a>    <span class="n">old_phen_path</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="n">old_phen_dir</span><span class="p">)</span>
-</span><span id="diff-1381"><a href="#diff-1381"><span class="linenos">1381</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">old_phen_path</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
-</span><span id="diff-1382"><a href="#diff-1382"><span class="linenos">1382</span></a>        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
-</span><span id="diff-1383"><a href="#diff-1383"><span class="linenos">1383</span></a>            <span class="sa">f</span><span class="s2">&quot;Old phenotype directory does not exist: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">old_phen_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="diff-1384"><a href="#diff-1384"><span class="linenos">1384</span></a>        <span class="p">)</span>
+            <div class="pdoc-code codehilite"><pre><span></span><span id="diff-1381"><a href="#diff-1381"><span class="linenos">1381</span></a><span class="k">def</span><span class="w"> </span><span class="nf">diff</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">version</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">old_phen_dir</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">old_version</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
+</span><span id="diff-1382"><a href="#diff-1382"><span class="linenos">1382</span></a>    <span class="c1"># make tmp directory .acmc</span>
+</span><span id="diff-1383"><a href="#diff-1383"><span class="linenos">1383</span></a>    <span class="n">timestamp</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s2">&quot;%Y%m</span><span class="si">%d</span><span class="s2">_%H%M%S&quot;</span><span class="p">)</span>
+</span><span id="diff-1384"><a href="#diff-1384"><span class="linenos">1384</span></a>    <span class="n">temp_dir</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;.acmc/diff_</span><span class="si">{</span><span class="n">timestamp</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
 </span><span id="diff-1385"><a href="#diff-1385"><span class="linenos">1385</span></a>
-</span><span id="diff-1386"><a href="#diff-1386"><span class="linenos">1386</span></a>    <span class="k">try</span><span class="p">:</span>
-</span><span id="diff-1387"><a href="#diff-1387"><span class="linenos">1387</span></a>        <span class="c1"># Create the directory</span>
-</span><span id="diff-1388"><a href="#diff-1388"><span class="linenos">1388</span></a>        <span class="n">temp_dir</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">parents</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="diff-1389"><a href="#diff-1389"><span class="linenos">1389</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Temporary directory created: </span><span class="si">{</span><span class="n">temp_dir</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="diff-1390"><a href="#diff-1390"><span class="linenos">1390</span></a>
-</span><span id="diff-1391"><a href="#diff-1391"><span class="linenos">1391</span></a>        <span class="c1"># Create temporary directories</span>
-</span><span id="diff-1392"><a href="#diff-1392"><span class="linenos">1392</span></a>        <span class="n">changed_path</span> <span class="o">=</span> <span class="n">temp_dir</span> <span class="o">/</span> <span class="s2">&quot;changed&quot;</span>
-</span><span id="diff-1393"><a href="#diff-1393"><span class="linenos">1393</span></a>        <span class="n">changed_path</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">parents</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="diff-1394"><a href="#diff-1394"><span class="linenos">1394</span></a>        <span class="n">old_path</span> <span class="o">=</span> <span class="n">temp_dir</span> <span class="o">/</span> <span class="s2">&quot;old&quot;</span>
-</span><span id="diff-1395"><a href="#diff-1395"><span class="linenos">1395</span></a>        <span class="n">old_path</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">parents</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="diff-1396"><a href="#diff-1396"><span class="linenos">1396</span></a>
-</span><span id="diff-1397"><a href="#diff-1397"><span class="linenos">1397</span></a>        <span class="c1"># checkout changed</span>
-</span><span id="diff-1398"><a href="#diff-1398"><span class="linenos">1398</span></a>        <span class="k">if</span> <span class="n">version</span> <span class="o">==</span> <span class="s2">&quot;latest&quot;</span><span class="p">:</span>
-</span><span id="diff-1399"><a href="#diff-1399"><span class="linenos">1399</span></a>            <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span>
-</span><span id="diff-1400"><a href="#diff-1400"><span class="linenos">1400</span></a>                <span class="sa">f</span><span class="s2">&quot;Copying changed repo from </span><span class="si">{</span><span class="n">phen_dir</span><span class="si">}</span><span class="s2"> into </span><span class="si">{</span><span class="n">changed_path</span><span class="si">}</span><span class="s2"> at version </span><span class="si">{</span><span class="n">version</span><span class="si">}</span><span class="s2">...&quot;</span>
-</span><span id="diff-1401"><a href="#diff-1401"><span class="linenos">1401</span></a>            <span class="p">)</span>
-</span><span id="diff-1402"><a href="#diff-1402"><span class="linenos">1402</span></a>            <span class="n">shutil</span><span class="o">.</span><span class="n">copytree</span><span class="p">(</span><span class="n">changed_phen_path</span><span class="p">,</span> <span class="n">changed_path</span><span class="p">,</span> <span class="n">dirs_exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="diff-1403"><a href="#diff-1403"><span class="linenos">1403</span></a>        <span class="k">else</span><span class="p">:</span>
-</span><span id="diff-1404"><a href="#diff-1404"><span class="linenos">1404</span></a>            <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span>
-</span><span id="diff-1405"><a href="#diff-1405"><span class="linenos">1405</span></a>                <span class="sa">f</span><span class="s2">&quot;Cloning changed repo from </span><span class="si">{</span><span class="n">phen_dir</span><span class="si">}</span><span class="s2"> into </span><span class="si">{</span><span class="n">changed_path</span><span class="si">}</span><span class="s2"> at version </span><span class="si">{</span><span class="n">version</span><span class="si">}</span><span class="s2">...&quot;</span>
-</span><span id="diff-1406"><a href="#diff-1406"><span class="linenos">1406</span></a>            <span class="p">)</span>
-</span><span id="diff-1407"><a href="#diff-1407"><span class="linenos">1407</span></a>            <span class="n">changed_repo</span> <span class="o">=</span> <span class="n">git</span><span class="o">.</span><span class="n">Repo</span><span class="o">.</span><span class="n">clone_from</span><span class="p">(</span><span class="n">changed_phen_path</span><span class="p">,</span> <span class="n">changed_path</span><span class="p">)</span>
-</span><span id="diff-1408"><a href="#diff-1408"><span class="linenos">1408</span></a>            <span class="n">changed_repo</span><span class="o">.</span><span class="n">git</span><span class="o">.</span><span class="n">checkout</span><span class="p">(</span><span class="n">version</span><span class="p">)</span>
-</span><span id="diff-1409"><a href="#diff-1409"><span class="linenos">1409</span></a>
-</span><span id="diff-1410"><a href="#diff-1410"><span class="linenos">1410</span></a>        <span class="c1"># checkout old</span>
-</span><span id="diff-1411"><a href="#diff-1411"><span class="linenos">1411</span></a>        <span class="k">if</span> <span class="n">old_version</span> <span class="o">==</span> <span class="s2">&quot;latest&quot;</span><span class="p">:</span>
-</span><span id="diff-1412"><a href="#diff-1412"><span class="linenos">1412</span></a>            <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span>
-</span><span id="diff-1413"><a href="#diff-1413"><span class="linenos">1413</span></a>                <span class="sa">f</span><span class="s2">&quot;Copying old repo from </span><span class="si">{</span><span class="n">old_phen_dir</span><span class="si">}</span><span class="s2"> into </span><span class="si">{</span><span class="n">old_path</span><span class="si">}</span><span class="s2"> at version </span><span class="si">{</span><span class="n">old_version</span><span class="si">}</span><span class="s2">...&quot;</span>
-</span><span id="diff-1414"><a href="#diff-1414"><span class="linenos">1414</span></a>            <span class="p">)</span>
-</span><span id="diff-1415"><a href="#diff-1415"><span class="linenos">1415</span></a>            <span class="n">shutil</span><span class="o">.</span><span class="n">copytree</span><span class="p">(</span><span class="n">old_phen_path</span><span class="p">,</span> <span class="n">old_path</span><span class="p">,</span> <span class="n">dirs_exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="diff-1416"><a href="#diff-1416"><span class="linenos">1416</span></a>        <span class="k">else</span><span class="p">:</span>
-</span><span id="diff-1417"><a href="#diff-1417"><span class="linenos">1417</span></a>            <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span>
-</span><span id="diff-1418"><a href="#diff-1418"><span class="linenos">1418</span></a>                <span class="sa">f</span><span class="s2">&quot;Cloning old repo from </span><span class="si">{</span><span class="n">old_phen_dir</span><span class="si">}</span><span class="s2"> into </span><span class="si">{</span><span class="n">old_path</span><span class="si">}</span><span class="s2"> at version </span><span class="si">{</span><span class="n">old_version</span><span class="si">}</span><span class="s2">...&quot;</span>
-</span><span id="diff-1419"><a href="#diff-1419"><span class="linenos">1419</span></a>            <span class="p">)</span>
-</span><span id="diff-1420"><a href="#diff-1420"><span class="linenos">1420</span></a>            <span class="n">old_repo</span> <span class="o">=</span> <span class="n">git</span><span class="o">.</span><span class="n">Repo</span><span class="o">.</span><span class="n">clone_from</span><span class="p">(</span><span class="n">old_phen_dir</span><span class="p">,</span> <span class="n">old_path</span><span class="p">)</span>
-</span><span id="diff-1421"><a href="#diff-1421"><span class="linenos">1421</span></a>            <span class="n">old_repo</span><span class="o">.</span><span class="n">git</span><span class="o">.</span><span class="n">checkout</span><span class="p">(</span><span class="n">old_version</span><span class="p">)</span>
-</span><span id="diff-1422"><a href="#diff-1422"><span class="linenos">1422</span></a>
-</span><span id="diff-1423"><a href="#diff-1423"><span class="linenos">1423</span></a>        <span class="n">report_filename</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">version</span><span class="si">}</span><span class="s2">_</span><span class="si">{</span><span class="n">old_version</span><span class="si">}</span><span class="s2">_diff.md&quot;</span>
-</span><span id="diff-1424"><a href="#diff-1424"><span class="linenos">1424</span></a>        <span class="n">report_path</span> <span class="o">=</span> <span class="n">changed_phen_path</span> <span class="o">/</span> <span class="n">report_filename</span>
-</span><span id="diff-1425"><a href="#diff-1425"><span class="linenos">1425</span></a>        <span class="c1"># diff old with new</span>
-</span><span id="diff-1426"><a href="#diff-1426"><span class="linenos">1426</span></a>        <span class="n">diff_phen</span><span class="p">(</span><span class="n">changed_path</span><span class="p">,</span> <span class="n">version</span><span class="p">,</span> <span class="n">old_path</span><span class="p">,</span> <span class="n">old_version</span><span class="p">,</span> <span class="n">report_path</span><span class="p">)</span>
-</span><span id="diff-1427"><a href="#diff-1427"><span class="linenos">1427</span></a>
-</span><span id="diff-1428"><a href="#diff-1428"><span class="linenos">1428</span></a>    <span class="k">finally</span><span class="p">:</span>
-</span><span id="diff-1429"><a href="#diff-1429"><span class="linenos">1429</span></a>        <span class="c1"># clean up tmp directory</span>
-</span><span id="diff-1430"><a href="#diff-1430"><span class="linenos">1430</span></a>        <span class="k">if</span> <span class="n">temp_dir</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
-</span><span id="diff-1431"><a href="#diff-1431"><span class="linenos">1431</span></a>            <span class="n">shutil</span><span class="o">.</span><span class="n">rmtree</span><span class="p">(</span><span class="n">temp_dir</span><span class="p">)</span>
-</span><span id="diff-1432"><a href="#diff-1432"><span class="linenos">1432</span></a>            <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Temporary directory removed: </span><span class="si">{</span><span class="n">temp_dir</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="diff-1386"><a href="#diff-1386"><span class="linenos">1386</span></a>    <span class="n">changed_phen_path</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="n">phen_dir</span><span class="p">)</span>
+</span><span id="diff-1387"><a href="#diff-1387"><span class="linenos">1387</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">changed_phen_path</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
+</span><span id="diff-1388"><a href="#diff-1388"><span class="linenos">1388</span></a>        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
+</span><span id="diff-1389"><a href="#diff-1389"><span class="linenos">1389</span></a>            <span class="sa">f</span><span class="s2">&quot;Changed phenotype directory does not exist: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">changed_phen_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="diff-1390"><a href="#diff-1390"><span class="linenos">1390</span></a>        <span class="p">)</span>
+</span><span id="diff-1391"><a href="#diff-1391"><span class="linenos">1391</span></a>
+</span><span id="diff-1392"><a href="#diff-1392"><span class="linenos">1392</span></a>    <span class="n">old_phen_path</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="n">old_phen_dir</span><span class="p">)</span>
+</span><span id="diff-1393"><a href="#diff-1393"><span class="linenos">1393</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">old_phen_path</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
+</span><span id="diff-1394"><a href="#diff-1394"><span class="linenos">1394</span></a>        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
+</span><span id="diff-1395"><a href="#diff-1395"><span class="linenos">1395</span></a>            <span class="sa">f</span><span class="s2">&quot;Old phenotype directory does not exist: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">old_phen_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">())</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="diff-1396"><a href="#diff-1396"><span class="linenos">1396</span></a>        <span class="p">)</span>
+</span><span id="diff-1397"><a href="#diff-1397"><span class="linenos">1397</span></a>
+</span><span id="diff-1398"><a href="#diff-1398"><span class="linenos">1398</span></a>    <span class="k">try</span><span class="p">:</span>
+</span><span id="diff-1399"><a href="#diff-1399"><span class="linenos">1399</span></a>        <span class="c1"># Create the directory</span>
+</span><span id="diff-1400"><a href="#diff-1400"><span class="linenos">1400</span></a>        <span class="n">temp_dir</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">parents</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="diff-1401"><a href="#diff-1401"><span class="linenos">1401</span></a>        <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Temporary directory created: </span><span class="si">{</span><span class="n">temp_dir</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="diff-1402"><a href="#diff-1402"><span class="linenos">1402</span></a>
+</span><span id="diff-1403"><a href="#diff-1403"><span class="linenos">1403</span></a>        <span class="c1"># Create temporary directories</span>
+</span><span id="diff-1404"><a href="#diff-1404"><span class="linenos">1404</span></a>        <span class="n">changed_path</span> <span class="o">=</span> <span class="n">temp_dir</span> <span class="o">/</span> <span class="s2">&quot;changed&quot;</span>
+</span><span id="diff-1405"><a href="#diff-1405"><span class="linenos">1405</span></a>        <span class="n">changed_path</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">parents</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="diff-1406"><a href="#diff-1406"><span class="linenos">1406</span></a>        <span class="n">old_path</span> <span class="o">=</span> <span class="n">temp_dir</span> <span class="o">/</span> <span class="s2">&quot;old&quot;</span>
+</span><span id="diff-1407"><a href="#diff-1407"><span class="linenos">1407</span></a>        <span class="n">old_path</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">parents</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="diff-1408"><a href="#diff-1408"><span class="linenos">1408</span></a>
+</span><span id="diff-1409"><a href="#diff-1409"><span class="linenos">1409</span></a>        <span class="c1"># checkout changed</span>
+</span><span id="diff-1410"><a href="#diff-1410"><span class="linenos">1410</span></a>        <span class="k">if</span> <span class="n">version</span> <span class="o">==</span> <span class="s2">&quot;latest&quot;</span><span class="p">:</span>
+</span><span id="diff-1411"><a href="#diff-1411"><span class="linenos">1411</span></a>            <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span>
+</span><span id="diff-1412"><a href="#diff-1412"><span class="linenos">1412</span></a>                <span class="sa">f</span><span class="s2">&quot;Copying changed repo from </span><span class="si">{</span><span class="n">phen_dir</span><span class="si">}</span><span class="s2"> into </span><span class="si">{</span><span class="n">changed_path</span><span class="si">}</span><span class="s2"> at version </span><span class="si">{</span><span class="n">version</span><span class="si">}</span><span class="s2">...&quot;</span>
+</span><span id="diff-1413"><a href="#diff-1413"><span class="linenos">1413</span></a>            <span class="p">)</span>
+</span><span id="diff-1414"><a href="#diff-1414"><span class="linenos">1414</span></a>            <span class="n">shutil</span><span class="o">.</span><span class="n">copytree</span><span class="p">(</span><span class="n">changed_phen_path</span><span class="p">,</span> <span class="n">changed_path</span><span class="p">,</span> <span class="n">dirs_exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="diff-1415"><a href="#diff-1415"><span class="linenos">1415</span></a>        <span class="k">else</span><span class="p">:</span>
+</span><span id="diff-1416"><a href="#diff-1416"><span class="linenos">1416</span></a>            <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span>
+</span><span id="diff-1417"><a href="#diff-1417"><span class="linenos">1417</span></a>                <span class="sa">f</span><span class="s2">&quot;Cloning changed repo from </span><span class="si">{</span><span class="n">phen_dir</span><span class="si">}</span><span class="s2"> into </span><span class="si">{</span><span class="n">changed_path</span><span class="si">}</span><span class="s2"> at version </span><span class="si">{</span><span class="n">version</span><span class="si">}</span><span class="s2">...&quot;</span>
+</span><span id="diff-1418"><a href="#diff-1418"><span class="linenos">1418</span></a>            <span class="p">)</span>
+</span><span id="diff-1419"><a href="#diff-1419"><span class="linenos">1419</span></a>            <span class="n">changed_repo</span> <span class="o">=</span> <span class="n">git</span><span class="o">.</span><span class="n">Repo</span><span class="o">.</span><span class="n">clone_from</span><span class="p">(</span><span class="n">changed_phen_path</span><span class="p">,</span> <span class="n">changed_path</span><span class="p">)</span>
+</span><span id="diff-1420"><a href="#diff-1420"><span class="linenos">1420</span></a>            <span class="n">changed_repo</span><span class="o">.</span><span class="n">git</span><span class="o">.</span><span class="n">checkout</span><span class="p">(</span><span class="n">version</span><span class="p">)</span>
+</span><span id="diff-1421"><a href="#diff-1421"><span class="linenos">1421</span></a>
+</span><span id="diff-1422"><a href="#diff-1422"><span class="linenos">1422</span></a>        <span class="c1"># checkout old</span>
+</span><span id="diff-1423"><a href="#diff-1423"><span class="linenos">1423</span></a>        <span class="k">if</span> <span class="n">old_version</span> <span class="o">==</span> <span class="s2">&quot;latest&quot;</span><span class="p">:</span>
+</span><span id="diff-1424"><a href="#diff-1424"><span class="linenos">1424</span></a>            <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span>
+</span><span id="diff-1425"><a href="#diff-1425"><span class="linenos">1425</span></a>                <span class="sa">f</span><span class="s2">&quot;Copying old repo from </span><span class="si">{</span><span class="n">old_phen_dir</span><span class="si">}</span><span class="s2"> into </span><span class="si">{</span><span class="n">old_path</span><span class="si">}</span><span class="s2"> at version </span><span class="si">{</span><span class="n">old_version</span><span class="si">}</span><span class="s2">...&quot;</span>
+</span><span id="diff-1426"><a href="#diff-1426"><span class="linenos">1426</span></a>            <span class="p">)</span>
+</span><span id="diff-1427"><a href="#diff-1427"><span class="linenos">1427</span></a>            <span class="n">shutil</span><span class="o">.</span><span class="n">copytree</span><span class="p">(</span><span class="n">old_phen_path</span><span class="p">,</span> <span class="n">old_path</span><span class="p">,</span> <span class="n">dirs_exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="diff-1428"><a href="#diff-1428"><span class="linenos">1428</span></a>        <span class="k">else</span><span class="p">:</span>
+</span><span id="diff-1429"><a href="#diff-1429"><span class="linenos">1429</span></a>            <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span>
+</span><span id="diff-1430"><a href="#diff-1430"><span class="linenos">1430</span></a>                <span class="sa">f</span><span class="s2">&quot;Cloning old repo from </span><span class="si">{</span><span class="n">old_phen_dir</span><span class="si">}</span><span class="s2"> into </span><span class="si">{</span><span class="n">old_path</span><span class="si">}</span><span class="s2"> at version </span><span class="si">{</span><span class="n">old_version</span><span class="si">}</span><span class="s2">...&quot;</span>
+</span><span id="diff-1431"><a href="#diff-1431"><span class="linenos">1431</span></a>            <span class="p">)</span>
+</span><span id="diff-1432"><a href="#diff-1432"><span class="linenos">1432</span></a>            <span class="n">old_repo</span> <span class="o">=</span> <span class="n">git</span><span class="o">.</span><span class="n">Repo</span><span class="o">.</span><span class="n">clone_from</span><span class="p">(</span><span class="n">old_phen_dir</span><span class="p">,</span> <span class="n">old_path</span><span class="p">)</span>
+</span><span id="diff-1433"><a href="#diff-1433"><span class="linenos">1433</span></a>            <span class="n">old_repo</span><span class="o">.</span><span class="n">git</span><span class="o">.</span><span class="n">checkout</span><span class="p">(</span><span class="n">old_version</span><span class="p">)</span>
+</span><span id="diff-1434"><a href="#diff-1434"><span class="linenos">1434</span></a>
+</span><span id="diff-1435"><a href="#diff-1435"><span class="linenos">1435</span></a>        <span class="n">report_filename</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">version</span><span class="si">}</span><span class="s2">_</span><span class="si">{</span><span class="n">old_version</span><span class="si">}</span><span class="s2">_diff.md&quot;</span>
+</span><span id="diff-1436"><a href="#diff-1436"><span class="linenos">1436</span></a>        <span class="n">report_path</span> <span class="o">=</span> <span class="n">changed_phen_path</span> <span class="o">/</span> <span class="n">report_filename</span>
+</span><span id="diff-1437"><a href="#diff-1437"><span class="linenos">1437</span></a>        <span class="c1"># diff old with new</span>
+</span><span id="diff-1438"><a href="#diff-1438"><span class="linenos">1438</span></a>        <span class="n">diff_phen</span><span class="p">(</span><span class="n">changed_path</span><span class="p">,</span> <span class="n">version</span><span class="p">,</span> <span class="n">old_path</span><span class="p">,</span> <span class="n">old_version</span><span class="p">,</span> <span class="n">report_path</span><span class="p">)</span>
+</span><span id="diff-1439"><a href="#diff-1439"><span class="linenos">1439</span></a>
+</span><span id="diff-1440"><a href="#diff-1440"><span class="linenos">1440</span></a>    <span class="k">finally</span><span class="p">:</span>
+</span><span id="diff-1441"><a href="#diff-1441"><span class="linenos">1441</span></a>        <span class="c1"># clean up tmp directory</span>
+</span><span id="diff-1442"><a href="#diff-1442"><span class="linenos">1442</span></a>        <span class="k">if</span> <span class="n">temp_dir</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
+</span><span id="diff-1443"><a href="#diff-1443"><span class="linenos">1443</span></a>            <span class="n">shutil</span><span class="o">.</span><span class="n">rmtree</span><span class="p">(</span><span class="n">temp_dir</span><span class="p">)</span>
+</span><span id="diff-1444"><a href="#diff-1444"><span class="linenos">1444</span></a>            <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Temporary directory removed: </span><span class="si">{</span><span class="n">temp_dir</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
 </span></pre></div>
 
 
diff --git a/docs/api/acmc/trud.html b/docs/api/acmc/trud.html
index 003d17560d7518f030059f3eaeb9ed566267f402..c423eaacaa4d3e876c612af3db9f12a6f178dbdd 100644
--- a/docs/api/acmc/trud.html
+++ b/docs/api/acmc/trud.html
@@ -30,9 +30,6 @@
 
             <h2>API Documentation</h2>
                 <ul class="memberlist">
-            <li>
-                    <a class="variable" href="#logger">logger</a>
-            </li>
             <li>
                     <a class="variable" href="#FQDN">FQDN</a>
             </li>
@@ -97,465 +94,473 @@
                     <h1 class="modulename">
 <a href="./../acmc.html">acmc</a><wbr>.trud    </h1>
 
-                
+                        <div class="docstring"><p>trud.py module</p>
+
+<p>This module provides functionality to manage installation of the NHS TRUD vocabularies.</p>
+</div>
+
                         <input id="mod-trud-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
 
                         <label class="view-source-button" for="mod-trud-view-source"><span>View Source</span></label>
 
-                        <div class="pdoc-code codehilite"><pre><span></span><span id="L-1"><a href="#L-1"><span class="linenos">  1</span></a><span class="kn">import</span><span class="w"> </span><span class="nn">os</span>
-</span><span id="L-2"><a href="#L-2"><span class="linenos">  2</span></a><span class="kn">import</span><span class="w"> </span><span class="nn">sys</span>
-</span><span id="L-3"><a href="#L-3"><span class="linenos">  3</span></a><span class="kn">import</span><span class="w"> </span><span class="nn">requests</span>
-</span><span id="L-4"><a href="#L-4"><span class="linenos">  4</span></a><span class="kn">import</span><span class="w"> </span><span class="nn">argparse</span>
-</span><span id="L-5"><a href="#L-5"><span class="linenos">  5</span></a><span class="kn">import</span><span class="w"> </span><span class="nn">shutil</span>
-</span><span id="L-6"><a href="#L-6"><span class="linenos">  6</span></a><span class="kn">import</span><span class="w"> </span><span class="nn">hashlib</span>
-</span><span id="L-7"><a href="#L-7"><span class="linenos">  7</span></a><span class="kn">import</span><span class="w"> </span><span class="nn">zipfile</span>
-</span><span id="L-8"><a href="#L-8"><span class="linenos">  8</span></a><span class="kn">import</span><span class="w"> </span><span class="nn">pandas</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">pd</span>
-</span><span id="L-9"><a href="#L-9"><span class="linenos">  9</span></a><span class="kn">import</span><span class="w"> </span><span class="nn">simpledbf</span>  <span class="c1"># type: ignore</span>
-</span><span id="L-10"><a href="#L-10"><span class="linenos"> 10</span></a><span class="kn">import</span><span class="w"> </span><span class="nn">yaml</span>
-</span><span id="L-11"><a href="#L-11"><span class="linenos"> 11</span></a><span class="kn">from</span><span class="w"> </span><span class="nn">pathlib</span><span class="w"> </span><span class="kn">import</span> <span class="n">Path</span>
-</span><span id="L-12"><a href="#L-12"><span class="linenos"> 12</span></a>
-</span><span id="L-13"><a href="#L-13"><span class="linenos"> 13</span></a><span class="c1"># setup logging</span>
-</span><span id="L-14"><a href="#L-14"><span class="linenos"> 14</span></a><span class="kn">from</span><span class="w"> </span><span class="nn">acmc</span><span class="w"> </span><span class="kn">import</span> <span class="n">util</span><span class="p">,</span> <span class="n">logging_config</span> <span class="k">as</span> <span class="n">lc</span>
-</span><span id="L-15"><a href="#L-15"><span class="linenos"> 15</span></a>
-</span><span id="L-16"><a href="#L-16"><span class="linenos"> 16</span></a><span class="n">logger</span> <span class="o">=</span> <span class="n">lc</span><span class="o">.</span><span class="n">setup_logger</span><span class="p">()</span>
-</span><span id="L-17"><a href="#L-17"><span class="linenos"> 17</span></a>
-</span><span id="L-18"><a href="#L-18"><span class="linenos"> 18</span></a><span class="c1"># Constants</span>
-</span><span id="L-19"><a href="#L-19"><span class="linenos"> 19</span></a><span class="n">FQDN</span> <span class="o">=</span> <span class="s2">&quot;isd.digital.nhs.uk&quot;</span>
-</span><span id="L-20"><a href="#L-20"><span class="linenos"> 20</span></a><span class="n">VOCAB_PATH</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="s2">&quot;./vocab/trud&quot;</span><span class="p">)</span>
-</span><span id="L-21"><a href="#L-21"><span class="linenos"> 21</span></a><span class="n">VERSION_FILE</span> <span class="o">=</span> <span class="s2">&quot;trud_version.yml&quot;</span>
-</span><span id="L-22"><a href="#L-22"><span class="linenos"> 22</span></a><span class="n">VERSION_PATH</span> <span class="o">=</span> <span class="n">VOCAB_PATH</span> <span class="o">/</span> <span class="n">VERSION_FILE</span>
-</span><span id="L-23"><a href="#L-23"><span class="linenos"> 23</span></a><span class="n">DOWNLOADS_PATH</span> <span class="o">=</span> <span class="n">VOCAB_PATH</span> <span class="o">/</span> <span class="s2">&quot;downloads&quot;</span>
-</span><span id="L-24"><a href="#L-24"><span class="linenos"> 24</span></a><span class="n">PROCESSED_PATH</span> <span class="o">=</span> <span class="n">VOCAB_PATH</span> <span class="o">/</span> <span class="s2">&quot;processed&quot;</span>
-</span><span id="L-25"><a href="#L-25"><span class="linenos"> 25</span></a>
+                        <div class="pdoc-code codehilite"><pre><span></span><span id="L-1"><a href="#L-1"><span class="linenos">  1</span></a><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-2"><a href="#L-2"><span class="linenos">  2</span></a><span class="sd">trud.py module</span>
+</span><span id="L-3"><a href="#L-3"><span class="linenos">  3</span></a>
+</span><span id="L-4"><a href="#L-4"><span class="linenos">  4</span></a><span class="sd">This module provides functionality to manage installation of the NHS TRUD vocabularies.</span>
+</span><span id="L-5"><a href="#L-5"><span class="linenos">  5</span></a>
+</span><span id="L-6"><a href="#L-6"><span class="linenos">  6</span></a><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-7"><a href="#L-7"><span class="linenos">  7</span></a>
+</span><span id="L-8"><a href="#L-8"><span class="linenos">  8</span></a><span class="kn">import</span><span class="w"> </span><span class="nn">os</span>
+</span><span id="L-9"><a href="#L-9"><span class="linenos">  9</span></a><span class="kn">import</span><span class="w"> </span><span class="nn">sys</span>
+</span><span id="L-10"><a href="#L-10"><span class="linenos"> 10</span></a><span class="kn">import</span><span class="w"> </span><span class="nn">requests</span>
+</span><span id="L-11"><a href="#L-11"><span class="linenos"> 11</span></a><span class="kn">import</span><span class="w"> </span><span class="nn">argparse</span>
+</span><span id="L-12"><a href="#L-12"><span class="linenos"> 12</span></a><span class="kn">import</span><span class="w"> </span><span class="nn">shutil</span>
+</span><span id="L-13"><a href="#L-13"><span class="linenos"> 13</span></a><span class="kn">import</span><span class="w"> </span><span class="nn">hashlib</span>
+</span><span id="L-14"><a href="#L-14"><span class="linenos"> 14</span></a><span class="kn">import</span><span class="w"> </span><span class="nn">zipfile</span>
+</span><span id="L-15"><a href="#L-15"><span class="linenos"> 15</span></a><span class="kn">import</span><span class="w"> </span><span class="nn">pandas</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">pd</span>
+</span><span id="L-16"><a href="#L-16"><span class="linenos"> 16</span></a><span class="kn">import</span><span class="w"> </span><span class="nn">simpledbf</span>  <span class="c1"># type: ignore</span>
+</span><span id="L-17"><a href="#L-17"><span class="linenos"> 17</span></a><span class="kn">import</span><span class="w"> </span><span class="nn">yaml</span>
+</span><span id="L-18"><a href="#L-18"><span class="linenos"> 18</span></a><span class="kn">from</span><span class="w"> </span><span class="nn">pathlib</span><span class="w"> </span><span class="kn">import</span> <span class="n">Path</span>
+</span><span id="L-19"><a href="#L-19"><span class="linenos"> 19</span></a><span class="kn">from</span><span class="w"> </span><span class="nn">acmc</span><span class="w"> </span><span class="kn">import</span> <span class="n">util</span><span class="p">,</span> <span class="n">logging_config</span> <span class="k">as</span> <span class="n">lc</span>
+</span><span id="L-20"><a href="#L-20"><span class="linenos"> 20</span></a>
+</span><span id="L-21"><a href="#L-21"><span class="linenos"> 21</span></a><span class="c1"># setup logging</span>
+</span><span id="L-22"><a href="#L-22"><span class="linenos"> 22</span></a><span class="n">_logger</span> <span class="o">=</span> <span class="n">lc</span><span class="o">.</span><span class="n">setup_logger</span><span class="p">()</span>
+</span><span id="L-23"><a href="#L-23"><span class="linenos"> 23</span></a>
+</span><span id="L-24"><a href="#L-24"><span class="linenos"> 24</span></a><span class="n">FQDN</span> <span class="o">=</span> <span class="s2">&quot;isd.digital.nhs.uk&quot;</span>
+</span><span id="L-25"><a href="#L-25"><span class="linenos"> 25</span></a><span class="sd">&quot;&quot;&quot;Fully Qualified Domain Name of NHS digital TRUD service API&quot;&quot;&quot;</span>
 </span><span id="L-26"><a href="#L-26"><span class="linenos"> 26</span></a>
-</span><span id="L-27"><a href="#L-27"><span class="linenos"> 27</span></a><span class="k">def</span><span class="w"> </span><span class="nf">get_releases</span><span class="p">(</span><span class="n">item_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">API_KEY</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">latest</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">list</span><span class="p">:</span>
-</span><span id="L-28"><a href="#L-28"><span class="linenos"> 28</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Retrieve release information for an item from the TRUD API.&quot;&quot;&quot;</span>
-</span><span id="L-29"><a href="#L-29"><span class="linenos"> 29</span></a>    <span class="n">url</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;https://</span><span class="si">{</span><span class="n">FQDN</span><span class="si">}</span><span class="s2">/trud/api/v1/keys/</span><span class="si">{</span><span class="n">API_KEY</span><span class="si">}</span><span class="s2">/items/</span><span class="si">{</span><span class="n">item_id</span><span class="si">}</span><span class="s2">/releases&quot;</span>
-</span><span id="L-30"><a href="#L-30"><span class="linenos"> 30</span></a>    <span class="k">if</span> <span class="n">latest</span><span class="p">:</span>
-</span><span id="L-31"><a href="#L-31"><span class="linenos"> 31</span></a>        <span class="n">url</span> <span class="o">+=</span> <span class="s2">&quot;?latest&quot;</span>
+</span><span id="L-27"><a href="#L-27"><span class="linenos"> 27</span></a><span class="n">VOCAB_PATH</span> <span class="o">=</span> <span class="n">Path</span><span class="p">(</span><span class="s2">&quot;./vocab/trud&quot;</span><span class="p">)</span>
+</span><span id="L-28"><a href="#L-28"><span class="linenos"> 28</span></a><span class="sd">&quot;&quot;&quot;Default path to the TRUD vocabulary directory relative to the the acmc execution directory&quot;&quot;&quot;</span>
+</span><span id="L-29"><a href="#L-29"><span class="linenos"> 29</span></a>
+</span><span id="L-30"><a href="#L-30"><span class="linenos"> 30</span></a><span class="n">VERSION_FILE</span> <span class="o">=</span> <span class="s2">&quot;trud_version.yml&quot;</span>
+</span><span id="L-31"><a href="#L-31"><span class="linenos"> 31</span></a><span class="sd">&quot;&quot;&quot;TRUD version file&quot;&quot;&quot;</span>
 </span><span id="L-32"><a href="#L-32"><span class="linenos"> 32</span></a>
-</span><span id="L-33"><a href="#L-33"><span class="linenos"> 33</span></a>    <span class="n">response</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">url</span><span class="p">)</span>
-</span><span id="L-34"><a href="#L-34"><span class="linenos"> 34</span></a>    <span class="k">if</span> <span class="n">response</span><span class="o">.</span><span class="n">status_code</span> <span class="o">!=</span> <span class="mi">200</span><span class="p">:</span>
-</span><span id="L-35"><a href="#L-35"><span class="linenos"> 35</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span>
-</span><span id="L-36"><a href="#L-36"><span class="linenos"> 36</span></a>            <span class="sa">f</span><span class="s2">&quot;Failed to fetch releases for item </span><span class="si">{</span><span class="n">item_id</span><span class="si">}</span><span class="s2">. Status code: </span><span class="si">{</span><span class="n">response</span><span class="o">.</span><span class="n">status_code</span><span class="si">}</span><span class="s2">, error </span><span class="si">{</span><span class="n">response</span><span class="o">.</span><span class="n">json</span><span class="p">()[</span><span class="s1">&#39;message&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">. If no releases found for API key, please ensure you are subscribed to the data release and that it is not pending approval&quot;</span>
-</span><span id="L-37"><a href="#L-37"><span class="linenos"> 37</span></a>        <span class="p">)</span>
-</span><span id="L-38"><a href="#L-38"><span class="linenos"> 38</span></a>        <span class="n">response</span><span class="o">.</span><span class="n">raise_for_status</span><span class="p">()</span>
-</span><span id="L-39"><a href="#L-39"><span class="linenos"> 39</span></a>
-</span><span id="L-40"><a href="#L-40"><span class="linenos"> 40</span></a>    <span class="n">data</span> <span class="o">=</span> <span class="n">response</span><span class="o">.</span><span class="n">json</span><span class="p">()</span>
-</span><span id="L-41"><a href="#L-41"><span class="linenos"> 41</span></a>    <span class="k">if</span> <span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;message&quot;</span><span class="p">)</span> <span class="o">!=</span> <span class="s2">&quot;OK&quot;</span><span class="p">:</span>
-</span><span id="L-42"><a href="#L-42"><span class="linenos"> 42</span></a>        <span class="n">msg</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;Unknown error occurred </span><span class="si">{</span><span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;message&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-43"><a href="#L-43"><span class="linenos"> 43</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
-</span><span id="L-44"><a href="#L-44"><span class="linenos"> 44</span></a>        <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
-</span><span id="L-45"><a href="#L-45"><span class="linenos"> 45</span></a>
-</span><span id="L-46"><a href="#L-46"><span class="linenos"> 46</span></a>    <span class="k">return</span> <span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;releases&quot;</span><span class="p">,</span> <span class="p">[])</span>
-</span><span id="L-47"><a href="#L-47"><span class="linenos"> 47</span></a>
+</span><span id="L-33"><a href="#L-33"><span class="linenos"> 33</span></a><span class="n">VERSION_PATH</span> <span class="o">=</span> <span class="n">VOCAB_PATH</span> <span class="o">/</span> <span class="n">VERSION_FILE</span>
+</span><span id="L-34"><a href="#L-34"><span class="linenos"> 34</span></a><span class="sd">&quot;&quot;&quot;Default path to the TRUD version file&quot;&quot;&quot;</span>
+</span><span id="L-35"><a href="#L-35"><span class="linenos"> 35</span></a>
+</span><span id="L-36"><a href="#L-36"><span class="linenos"> 36</span></a><span class="n">DOWNLOADS_PATH</span> <span class="o">=</span> <span class="n">VOCAB_PATH</span> <span class="o">/</span> <span class="s2">&quot;downloads&quot;</span>
+</span><span id="L-37"><a href="#L-37"><span class="linenos"> 37</span></a><span class="sd">&quot;&quot;&quot;Default path to the TRUD vocabulary downloads directory&quot;&quot;&quot;</span>
+</span><span id="L-38"><a href="#L-38"><span class="linenos"> 38</span></a>
+</span><span id="L-39"><a href="#L-39"><span class="linenos"> 39</span></a><span class="n">PROCESSED_PATH</span> <span class="o">=</span> <span class="n">VOCAB_PATH</span> <span class="o">/</span> <span class="s2">&quot;processed&quot;</span>
+</span><span id="L-40"><a href="#L-40"><span class="linenos"> 40</span></a><span class="sd">&quot;&quot;&quot; Default path to the processed TRUD mappings directory&quot;&quot;&quot;</span>
+</span><span id="L-41"><a href="#L-41"><span class="linenos"> 41</span></a>
+</span><span id="L-42"><a href="#L-42"><span class="linenos"> 42</span></a>
+</span><span id="L-43"><a href="#L-43"><span class="linenos"> 43</span></a><span class="k">def</span><span class="w"> </span><span class="nf">get_releases</span><span class="p">(</span><span class="n">item_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">API_KEY</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">latest</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">list</span><span class="p">:</span>
+</span><span id="L-44"><a href="#L-44"><span class="linenos"> 44</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Retrieve release information for an item from the TRUD API.&quot;&quot;&quot;</span>
+</span><span id="L-45"><a href="#L-45"><span class="linenos"> 45</span></a>    <span class="n">url</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;https://</span><span class="si">{</span><span class="n">FQDN</span><span class="si">}</span><span class="s2">/trud/api/v1/keys/</span><span class="si">{</span><span class="n">API_KEY</span><span class="si">}</span><span class="s2">/items/</span><span class="si">{</span><span class="n">item_id</span><span class="si">}</span><span class="s2">/releases&quot;</span>
+</span><span id="L-46"><a href="#L-46"><span class="linenos"> 46</span></a>    <span class="k">if</span> <span class="n">latest</span><span class="p">:</span>
+</span><span id="L-47"><a href="#L-47"><span class="linenos"> 47</span></a>        <span class="n">url</span> <span class="o">+=</span> <span class="s2">&quot;?latest&quot;</span>
 </span><span id="L-48"><a href="#L-48"><span class="linenos"> 48</span></a>
-</span><span id="L-49"><a href="#L-49"><span class="linenos"> 49</span></a><span class="k">def</span><span class="w"> </span><span class="nf">download_release_file</span><span class="p">(</span>
-</span><span id="L-50"><a href="#L-50"><span class="linenos"> 50</span></a>    <span class="n">item_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">release_ordinal</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">release</span><span class="p">:</span> <span class="nb">dict</span><span class="p">,</span> <span class="n">file_json_prefix</span><span class="p">:</span> <span class="nb">str</span>
-</span><span id="L-51"><a href="#L-51"><span class="linenos"> 51</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Path</span><span class="p">:</span>
-</span><span id="L-52"><a href="#L-52"><span class="linenos"> 52</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Download specified file type for a given release of an item.&quot;&quot;&quot;</span>
-</span><span id="L-53"><a href="#L-53"><span class="linenos"> 53</span></a>
-</span><span id="L-54"><a href="#L-54"><span class="linenos"> 54</span></a>    <span class="c1"># check folder is a directory</span>
-</span><span id="L-55"><a href="#L-55"><span class="linenos"> 55</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">DOWNLOADS_PATH</span><span class="o">.</span><span class="n">is_dir</span><span class="p">():</span>
-</span><span id="L-56"><a href="#L-56"><span class="linenos"> 56</span></a>        <span class="k">raise</span> <span class="ne">NotADirectoryError</span><span class="p">(</span>
-</span><span id="L-57"><a href="#L-57"><span class="linenos"> 57</span></a>            <span class="sa">f</span><span class="s2">&quot;Error: &#39;</span><span class="si">{</span><span class="n">DOWNLOADS_PATH</span><span class="si">}</span><span class="s2">&#39; for TRUD resources is not a directory&quot;</span>
-</span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</span></a>        <span class="p">)</span>
-</span><span id="L-59"><a href="#L-59"><span class="linenos"> 59</span></a>
-</span><span id="L-60"><a href="#L-60"><span class="linenos"> 60</span></a>    <span class="n">file_type</span> <span class="o">=</span> <span class="n">file_json_prefix</span>
-</span><span id="L-61"><a href="#L-61"><span class="linenos"> 61</span></a>    <span class="n">file_url</span> <span class="o">=</span> <span class="n">release</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">file_json_prefix</span><span class="si">}</span><span class="s2">FileUrl&quot;</span><span class="p">)</span>
-</span><span id="L-62"><a href="#L-62"><span class="linenos"> 62</span></a>    <span class="k">if</span> <span class="n">file_url</span> <span class="o">==</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-63"><a href="#L-63"><span class="linenos"> 63</span></a>        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;File url not in json data </span><span class="si">{</span><span class="n">file_json_prefix</span><span class="si">}</span><span class="s2">FileUrl&quot;</span><span class="p">)</span>
+</span><span id="L-49"><a href="#L-49"><span class="linenos"> 49</span></a>    <span class="n">response</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">url</span><span class="p">)</span>
+</span><span id="L-50"><a href="#L-50"><span class="linenos"> 50</span></a>    <span class="k">if</span> <span class="n">response</span><span class="o">.</span><span class="n">status_code</span> <span class="o">!=</span> <span class="mi">200</span><span class="p">:</span>
+</span><span id="L-51"><a href="#L-51"><span class="linenos"> 51</span></a>        <span class="n">_logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span>
+</span><span id="L-52"><a href="#L-52"><span class="linenos"> 52</span></a>            <span class="sa">f</span><span class="s2">&quot;Failed to fetch releases for item </span><span class="si">{</span><span class="n">item_id</span><span class="si">}</span><span class="s2">. Status code: </span><span class="si">{</span><span class="n">response</span><span class="o">.</span><span class="n">status_code</span><span class="si">}</span><span class="s2">, error </span><span class="si">{</span><span class="n">response</span><span class="o">.</span><span class="n">json</span><span class="p">()[</span><span class="s1">&#39;message&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">. If no releases found for API key, please ensure you are subscribed to the data release and that it is not pending approval&quot;</span>
+</span><span id="L-53"><a href="#L-53"><span class="linenos"> 53</span></a>        <span class="p">)</span>
+</span><span id="L-54"><a href="#L-54"><span class="linenos"> 54</span></a>        <span class="n">response</span><span class="o">.</span><span class="n">raise_for_status</span><span class="p">()</span>
+</span><span id="L-55"><a href="#L-55"><span class="linenos"> 55</span></a>
+</span><span id="L-56"><a href="#L-56"><span class="linenos"> 56</span></a>    <span class="n">data</span> <span class="o">=</span> <span class="n">response</span><span class="o">.</span><span class="n">json</span><span class="p">()</span>
+</span><span id="L-57"><a href="#L-57"><span class="linenos"> 57</span></a>    <span class="k">if</span> <span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;message&quot;</span><span class="p">)</span> <span class="o">!=</span> <span class="s2">&quot;OK&quot;</span><span class="p">:</span>
+</span><span id="L-58"><a href="#L-58"><span class="linenos"> 58</span></a>        <span class="n">msg</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;Unknown error occurred </span><span class="si">{</span><span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;message&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-59"><a href="#L-59"><span class="linenos"> 59</span></a>        <span class="n">_logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+</span><span id="L-60"><a href="#L-60"><span class="linenos"> 60</span></a>        <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+</span><span id="L-61"><a href="#L-61"><span class="linenos"> 61</span></a>
+</span><span id="L-62"><a href="#L-62"><span class="linenos"> 62</span></a>    <span class="k">return</span> <span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;releases&quot;</span><span class="p">,</span> <span class="p">[])</span>
+</span><span id="L-63"><a href="#L-63"><span class="linenos"> 63</span></a>
 </span><span id="L-64"><a href="#L-64"><span class="linenos"> 64</span></a>
-</span><span id="L-65"><a href="#L-65"><span class="linenos"> 65</span></a>    <span class="n">file_name</span> <span class="o">=</span> <span class="n">release</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">file_json_prefix</span><span class="si">}</span><span class="s2">FileName&quot;</span><span class="p">)</span>
-</span><span id="L-66"><a href="#L-66"><span class="linenos"> 66</span></a>    <span class="k">if</span> <span class="n">file_name</span> <span class="o">==</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="L-67"><a href="#L-67"><span class="linenos"> 67</span></a>        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;File name not in json data </span><span class="si">{</span><span class="n">file_json_prefix</span><span class="si">}</span><span class="s2">FileName&quot;</span><span class="p">)</span>
-</span><span id="L-68"><a href="#L-68"><span class="linenos"> 68</span></a>
-</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a>    <span class="n">file_destination</span> <span class="o">=</span> <span class="n">DOWNLOADS_PATH</span> <span class="o">/</span> <span class="n">file_name</span>
-</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a>
-</span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">file_url</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">file_name</span><span class="p">:</span>
-</span><span id="L-72"><a href="#L-72"><span class="linenos"> 72</span></a>        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
-</span><span id="L-73"><a href="#L-73"><span class="linenos"> 73</span></a>            <span class="sa">f</span><span class="s2">&quot;Missing </span><span class="si">{</span><span class="n">file_type</span><span class="si">}</span><span class="s2"> file information for release </span><span class="si">{</span><span class="n">release_ordinal</span><span class="si">}</span><span class="s2"> of item </span><span class="si">{</span><span class="n">item_id</span><span class="si">}</span><span class="s2">.&quot;</span>
+</span><span id="L-65"><a href="#L-65"><span class="linenos"> 65</span></a><span class="k">def</span><span class="w"> </span><span class="nf">download_release_file</span><span class="p">(</span>
+</span><span id="L-66"><a href="#L-66"><span class="linenos"> 66</span></a>    <span class="n">item_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">release_ordinal</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">release</span><span class="p">:</span> <span class="nb">dict</span><span class="p">,</span> <span class="n">file_json_prefix</span><span class="p">:</span> <span class="nb">str</span>
+</span><span id="L-67"><a href="#L-67"><span class="linenos"> 67</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Path</span><span class="p">:</span>
+</span><span id="L-68"><a href="#L-68"><span class="linenos"> 68</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Download specified file type for a given release of an item.&quot;&quot;&quot;</span>
+</span><span id="L-69"><a href="#L-69"><span class="linenos"> 69</span></a>
+</span><span id="L-70"><a href="#L-70"><span class="linenos"> 70</span></a>    <span class="c1"># check folder is a directory</span>
+</span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">DOWNLOADS_PATH</span><span class="o">.</span><span class="n">is_dir</span><span class="p">():</span>
+</span><span id="L-72"><a href="#L-72"><span class="linenos"> 72</span></a>        <span class="k">raise</span> <span class="ne">NotADirectoryError</span><span class="p">(</span>
+</span><span id="L-73"><a href="#L-73"><span class="linenos"> 73</span></a>            <span class="sa">f</span><span class="s2">&quot;Error: &#39;</span><span class="si">{</span><span class="n">DOWNLOADS_PATH</span><span class="si">}</span><span class="s2">&#39; for TRUD resources is not a directory&quot;</span>
 </span><span id="L-74"><a href="#L-74"><span class="linenos"> 74</span></a>        <span class="p">)</span>
 </span><span id="L-75"><a href="#L-75"><span class="linenos"> 75</span></a>
-</span><span id="L-76"><a href="#L-76"><span class="linenos"> 76</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span>
-</span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a>        <span class="sa">f</span><span class="s2">&quot;Downloading item </span><span class="si">{</span><span class="n">item_id</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">file_type</span><span class="si">}</span><span class="s2"> file: </span><span class="si">{</span><span class="n">file_name</span><span class="si">}</span><span class="s2"> from </span><span class="si">{</span><span class="n">file_url</span><span class="si">}</span><span class="s2"> to </span><span class="si">{</span><span class="n">file_destination</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-78"><a href="#L-78"><span class="linenos"> 78</span></a>    <span class="p">)</span>
-</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a>    <span class="n">response</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">file_url</span><span class="p">,</span> <span class="n">stream</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-76"><a href="#L-76"><span class="linenos"> 76</span></a>    <span class="n">file_type</span> <span class="o">=</span> <span class="n">file_json_prefix</span>
+</span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</span></a>    <span class="n">file_url</span> <span class="o">=</span> <span class="n">release</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">file_json_prefix</span><span class="si">}</span><span class="s2">FileUrl&quot;</span><span class="p">)</span>
+</span><span id="L-78"><a href="#L-78"><span class="linenos"> 78</span></a>    <span class="k">if</span> <span class="n">file_url</span> <span class="o">==</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-79"><a href="#L-79"><span class="linenos"> 79</span></a>        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;File url not in json data </span><span class="si">{</span><span class="n">file_json_prefix</span><span class="si">}</span><span class="s2">FileUrl&quot;</span><span class="p">)</span>
 </span><span id="L-80"><a href="#L-80"><span class="linenos"> 80</span></a>
-</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a>    <span class="k">if</span> <span class="n">response</span><span class="o">.</span><span class="n">status_code</span> <span class="o">==</span> <span class="mi">200</span><span class="p">:</span>
-</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a>        <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">file_destination</span><span class="p">,</span> <span class="s2">&quot;wb&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
-</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a>            <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">response</span><span class="o">.</span><span class="n">content</span><span class="p">)</span>
-</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a>    <span class="k">else</span><span class="p">:</span>
-</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span>
-</span><span id="L-86"><a href="#L-86"><span class="linenos"> 86</span></a>            <span class="sa">f</span><span class="s2">&quot;Failed to download </span><span class="si">{</span><span class="n">file_type</span><span class="si">}</span><span class="s2"> file for item </span><span class="si">{</span><span class="n">item_id</span><span class="si">}</span><span class="s2">. Status code: </span><span class="si">{</span><span class="n">response</span><span class="o">.</span><span class="n">status_code</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a>        <span class="p">)</span>
-</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a>        <span class="n">response</span><span class="o">.</span><span class="n">raise_for_status</span><span class="p">()</span>
-</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a>
-</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a>    <span class="k">return</span> <span class="n">file_destination</span>
+</span><span id="L-81"><a href="#L-81"><span class="linenos"> 81</span></a>    <span class="n">file_name</span> <span class="o">=</span> <span class="n">release</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">file_json_prefix</span><span class="si">}</span><span class="s2">FileName&quot;</span><span class="p">)</span>
+</span><span id="L-82"><a href="#L-82"><span class="linenos"> 82</span></a>    <span class="k">if</span> <span class="n">file_name</span> <span class="o">==</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="L-83"><a href="#L-83"><span class="linenos"> 83</span></a>        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;File name not in json data </span><span class="si">{</span><span class="n">file_json_prefix</span><span class="si">}</span><span class="s2">FileName&quot;</span><span class="p">)</span>
+</span><span id="L-84"><a href="#L-84"><span class="linenos"> 84</span></a>
+</span><span id="L-85"><a href="#L-85"><span class="linenos"> 85</span></a>    <span class="n">file_destination</span> <span class="o">=</span> <span class="n">DOWNLOADS_PATH</span> <span class="o">/</span> <span class="n">file_name</span>
+</span><span id="L-86"><a href="#L-86"><span class="linenos"> 86</span></a>
+</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">file_url</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">file_name</span><span class="p">:</span>
+</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a>        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
+</span><span id="L-89"><a href="#L-89"><span class="linenos"> 89</span></a>            <span class="sa">f</span><span class="s2">&quot;Missing </span><span class="si">{</span><span class="n">file_type</span><span class="si">}</span><span class="s2"> file information for release </span><span class="si">{</span><span class="n">release_ordinal</span><span class="si">}</span><span class="s2"> of item </span><span class="si">{</span><span class="n">item_id</span><span class="si">}</span><span class="s2">.&quot;</span>
+</span><span id="L-90"><a href="#L-90"><span class="linenos"> 90</span></a>        <span class="p">)</span>
 </span><span id="L-91"><a href="#L-91"><span class="linenos"> 91</span></a>
-</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a>
-</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a><span class="k">def</span><span class="w"> </span><span class="nf">validate_download_hash</span><span class="p">(</span><span class="n">file_destination</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">item_hash</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
-</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a>    <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">file_destination</span><span class="p">,</span> <span class="s2">&quot;rb&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
-</span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</span></a>        <span class="nb">hash</span> <span class="o">=</span> <span class="n">hashlib</span><span class="o">.</span><span class="n">sha256</span><span class="p">(</span><span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">())</span><span class="o">.</span><span class="n">hexdigest</span><span class="p">()</span>
-</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="nb">hash</span><span class="p">)</span>
-</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a>    <span class="k">if</span> <span class="nb">hash</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="n">item_hash</span><span class="o">.</span><span class="n">upper</span><span class="p">():</span>
-</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Verified hash of </span><span class="si">{</span><span class="n">file_destination</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="nb">hash</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a>    <span class="k">else</span><span class="p">:</span>
-</span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a>        <span class="n">msg</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;Could not validate origin of </span><span class="si">{</span><span class="n">file_destination</span><span class="si">}</span><span class="s2">. The SHA-256 hash should be: </span><span class="si">{</span><span class="n">item_hash</span><span class="si">}</span><span class="s2">, but got </span><span class="si">{</span><span class="nb">hash</span><span class="si">}</span><span class="s2"> instead&quot;</span>
-</span><span id="L-101"><a href="#L-101"><span class="linenos">101</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
-</span><span id="L-102"><a href="#L-102"><span class="linenos">102</span></a>        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
-</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a>
-</span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a>
-</span><span id="L-105"><a href="#L-105"><span class="linenos">105</span></a><span class="k">def</span><span class="w"> </span><span class="nf">unzip_download</span><span class="p">(</span><span class="n">file_destination</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
-</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a>    <span class="c1"># check folder is a directory</span>
-</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">DOWNLOADS_PATH</span><span class="o">.</span><span class="n">is_dir</span><span class="p">():</span>
-</span><span id="L-108"><a href="#L-108"><span class="linenos">108</span></a>        <span class="k">raise</span> <span class="ne">NotADirectoryError</span><span class="p">(</span>
-</span><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a>            <span class="sa">f</span><span class="s2">&quot;Error: &#39;</span><span class="si">{</span><span class="n">DOWNLOADS_PATH</span><span class="si">}</span><span class="s2">&#39; for TRUD resoruces is not a directory&quot;</span>
-</span><span id="L-110"><a href="#L-110"><span class="linenos">110</span></a>        <span class="p">)</span>
-</span><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a>
-</span><span id="L-112"><a href="#L-112"><span class="linenos">112</span></a>    <span class="k">with</span> <span class="n">zipfile</span><span class="o">.</span><span class="n">ZipFile</span><span class="p">(</span><span class="n">file_destination</span><span class="p">,</span> <span class="s2">&quot;r&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">zip_ref</span><span class="p">:</span>
-</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a>        <span class="n">zip_ref</span><span class="o">.</span><span class="n">extractall</span><span class="p">(</span><span class="n">DOWNLOADS_PATH</span><span class="p">)</span>
-</span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a>
-</span><span id="L-115"><a href="#L-115"><span class="linenos">115</span></a>
-</span><span id="L-116"><a href="#L-116"><span class="linenos">116</span></a><span class="k">def</span><span class="w"> </span><span class="nf">extract_icd10</span><span class="p">():</span>
-</span><span id="L-117"><a href="#L-117"><span class="linenos">117</span></a>    <span class="c1"># ICD10_edition5</span>
-</span><span id="L-118"><a href="#L-118"><span class="linenos">118</span></a>    <span class="n">file_path</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a>        <span class="n">DOWNLOADS_PATH</span>
-</span><span id="L-120"><a href="#L-120"><span class="linenos">120</span></a>        <span class="o">/</span> <span class="s2">&quot;ICD10_Edition5_XML_20160401&quot;</span>
-</span><span id="L-121"><a href="#L-121"><span class="linenos">121</span></a>        <span class="o">/</span> <span class="s2">&quot;Content&quot;</span>
-</span><span id="L-122"><a href="#L-122"><span class="linenos">122</span></a>        <span class="o">/</span> <span class="s2">&quot;ICD10_Edition5_CodesAndTitlesAndMetadata_GB_20160401.xml&quot;</span>
-</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a>    <span class="p">)</span>
-</span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_xml</span><span class="p">(</span><span class="n">file_path</span><span class="p">)</span>
-</span><span id="L-125"><a href="#L-125"><span class="linenos">125</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[[</span><span class="s2">&quot;CODE&quot;</span><span class="p">,</span> <span class="s2">&quot;ALT_CODE&quot;</span><span class="p">,</span> <span class="s2">&quot;DESCRIPTION&quot;</span><span class="p">]]</span>
-</span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span>
-</span><span id="L-127"><a href="#L-127"><span class="linenos">127</span></a>        <span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;CODE&quot;</span><span class="p">:</span> <span class="s2">&quot;icd10&quot;</span><span class="p">,</span> <span class="s2">&quot;ALT_CODE&quot;</span><span class="p">:</span> <span class="s2">&quot;icd10_alt&quot;</span><span class="p">,</span> <span class="s2">&quot;DESCRIPTION&quot;</span><span class="p">:</span> <span class="s2">&quot;description&quot;</span><span class="p">}</span>
-</span><span id="L-128"><a href="#L-128"><span class="linenos">128</span></a>    <span class="p">)</span>
-</span><span id="L-129"><a href="#L-129"><span class="linenos">129</span></a>    <span class="n">output_path</span> <span class="o">=</span> <span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;icd10.parquet&quot;</span>
-</span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a>    <span class="n">df</span><span class="o">.</span><span class="n">to_parquet</span><span class="p">(</span><span class="n">output_path</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="L-131"><a href="#L-131"><span class="linenos">131</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Extracted: </span><span class="si">{</span><span class="n">output_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a>
-</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a>
-</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a><span class="k">def</span><span class="w"> </span><span class="nf">extract_opsc4</span><span class="p">():</span>
-</span><span id="L-135"><a href="#L-135"><span class="linenos">135</span></a>    <span class="n">file_path</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-136"><a href="#L-136"><span class="linenos">136</span></a>        <span class="n">DOWNLOADS_PATH</span>
-</span><span id="L-137"><a href="#L-137"><span class="linenos">137</span></a>        <span class="o">/</span> <span class="s2">&quot;OPCS410 Data files txt&quot;</span>
-</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a>        <span class="o">/</span> <span class="s2">&quot;OPCS410 CodesAndTitles Nov 2022 V1.0.txt&quot;</span>
+</span><span id="L-92"><a href="#L-92"><span class="linenos"> 92</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span>
+</span><span id="L-93"><a href="#L-93"><span class="linenos"> 93</span></a>        <span class="sa">f</span><span class="s2">&quot;Downloading item </span><span class="si">{</span><span class="n">item_id</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">file_type</span><span class="si">}</span><span class="s2"> file: </span><span class="si">{</span><span class="n">file_name</span><span class="si">}</span><span class="s2"> from </span><span class="si">{</span><span class="n">file_url</span><span class="si">}</span><span class="s2"> to </span><span class="si">{</span><span class="n">file_destination</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-94"><a href="#L-94"><span class="linenos"> 94</span></a>    <span class="p">)</span>
+</span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</span></a>    <span class="n">response</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">file_url</span><span class="p">,</span> <span class="n">stream</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-96"><a href="#L-96"><span class="linenos"> 96</span></a>
+</span><span id="L-97"><a href="#L-97"><span class="linenos"> 97</span></a>    <span class="k">if</span> <span class="n">response</span><span class="o">.</span><span class="n">status_code</span> <span class="o">==</span> <span class="mi">200</span><span class="p">:</span>
+</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</span></a>        <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">file_destination</span><span class="p">,</span> <span class="s2">&quot;wb&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
+</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a>            <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">response</span><span class="o">.</span><span class="n">content</span><span class="p">)</span>
+</span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a>    <span class="k">else</span><span class="p">:</span>
+</span><span id="L-101"><a href="#L-101"><span class="linenos">101</span></a>        <span class="n">_logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span>
+</span><span id="L-102"><a href="#L-102"><span class="linenos">102</span></a>            <span class="sa">f</span><span class="s2">&quot;Failed to download </span><span class="si">{</span><span class="n">file_type</span><span class="si">}</span><span class="s2"> file for item </span><span class="si">{</span><span class="n">item_id</span><span class="si">}</span><span class="s2">. Status code: </span><span class="si">{</span><span class="n">response</span><span class="o">.</span><span class="n">status_code</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="L-103"><a href="#L-103"><span class="linenos">103</span></a>        <span class="p">)</span>
+</span><span id="L-104"><a href="#L-104"><span class="linenos">104</span></a>        <span class="n">response</span><span class="o">.</span><span class="n">raise_for_status</span><span class="p">()</span>
+</span><span id="L-105"><a href="#L-105"><span class="linenos">105</span></a>
+</span><span id="L-106"><a href="#L-106"><span class="linenos">106</span></a>    <span class="k">return</span> <span class="n">file_destination</span>
+</span><span id="L-107"><a href="#L-107"><span class="linenos">107</span></a>
+</span><span id="L-108"><a href="#L-108"><span class="linenos">108</span></a>
+</span><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a><span class="k">def</span><span class="w"> </span><span class="nf">validate_download_hash</span><span class="p">(</span><span class="n">file_destination</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">item_hash</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
+</span><span id="L-110"><a href="#L-110"><span class="linenos">110</span></a>    <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">file_destination</span><span class="p">,</span> <span class="s2">&quot;rb&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
+</span><span id="L-111"><a href="#L-111"><span class="linenos">111</span></a>        <span class="nb">hash</span> <span class="o">=</span> <span class="n">hashlib</span><span class="o">.</span><span class="n">sha256</span><span class="p">(</span><span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">())</span><span class="o">.</span><span class="n">hexdigest</span><span class="p">()</span>
+</span><span id="L-112"><a href="#L-112"><span class="linenos">112</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="nb">hash</span><span class="p">)</span>
+</span><span id="L-113"><a href="#L-113"><span class="linenos">113</span></a>    <span class="k">if</span> <span class="nb">hash</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="n">item_hash</span><span class="o">.</span><span class="n">upper</span><span class="p">():</span>
+</span><span id="L-114"><a href="#L-114"><span class="linenos">114</span></a>        <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Verified hash of </span><span class="si">{</span><span class="n">file_destination</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="nb">hash</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-115"><a href="#L-115"><span class="linenos">115</span></a>    <span class="k">else</span><span class="p">:</span>
+</span><span id="L-116"><a href="#L-116"><span class="linenos">116</span></a>        <span class="n">msg</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;Could not validate origin of </span><span class="si">{</span><span class="n">file_destination</span><span class="si">}</span><span class="s2">. The SHA-256 hash should be: </span><span class="si">{</span><span class="n">item_hash</span><span class="si">}</span><span class="s2">, but got </span><span class="si">{</span><span class="nb">hash</span><span class="si">}</span><span class="s2"> instead&quot;</span>
+</span><span id="L-117"><a href="#L-117"><span class="linenos">117</span></a>        <span class="n">_logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+</span><span id="L-118"><a href="#L-118"><span class="linenos">118</span></a>        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+</span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a>
+</span><span id="L-120"><a href="#L-120"><span class="linenos">120</span></a>
+</span><span id="L-121"><a href="#L-121"><span class="linenos">121</span></a><span class="k">def</span><span class="w"> </span><span class="nf">unzip_download</span><span class="p">(</span><span class="n">file_destination</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
+</span><span id="L-122"><a href="#L-122"><span class="linenos">122</span></a>    <span class="c1"># check folder is a directory</span>
+</span><span id="L-123"><a href="#L-123"><span class="linenos">123</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">DOWNLOADS_PATH</span><span class="o">.</span><span class="n">is_dir</span><span class="p">():</span>
+</span><span id="L-124"><a href="#L-124"><span class="linenos">124</span></a>        <span class="k">raise</span> <span class="ne">NotADirectoryError</span><span class="p">(</span>
+</span><span id="L-125"><a href="#L-125"><span class="linenos">125</span></a>            <span class="sa">f</span><span class="s2">&quot;Error: &#39;</span><span class="si">{</span><span class="n">DOWNLOADS_PATH</span><span class="si">}</span><span class="s2">&#39; for TRUD resoruces is not a directory&quot;</span>
+</span><span id="L-126"><a href="#L-126"><span class="linenos">126</span></a>        <span class="p">)</span>
+</span><span id="L-127"><a href="#L-127"><span class="linenos">127</span></a>
+</span><span id="L-128"><a href="#L-128"><span class="linenos">128</span></a>    <span class="k">with</span> <span class="n">zipfile</span><span class="o">.</span><span class="n">ZipFile</span><span class="p">(</span><span class="n">file_destination</span><span class="p">,</span> <span class="s2">&quot;r&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">zip_ref</span><span class="p">:</span>
+</span><span id="L-129"><a href="#L-129"><span class="linenos">129</span></a>        <span class="n">zip_ref</span><span class="o">.</span><span class="n">extractall</span><span class="p">(</span><span class="n">DOWNLOADS_PATH</span><span class="p">)</span>
+</span><span id="L-130"><a href="#L-130"><span class="linenos">130</span></a>
+</span><span id="L-131"><a href="#L-131"><span class="linenos">131</span></a>
+</span><span id="L-132"><a href="#L-132"><span class="linenos">132</span></a><span class="k">def</span><span class="w"> </span><span class="nf">extract_icd10</span><span class="p">():</span>
+</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a>    <span class="c1"># ICD10_edition5</span>
+</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a>    <span class="n">file_path</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-135"><a href="#L-135"><span class="linenos">135</span></a>        <span class="n">DOWNLOADS_PATH</span>
+</span><span id="L-136"><a href="#L-136"><span class="linenos">136</span></a>        <span class="o">/</span> <span class="s2">&quot;ICD10_Edition5_XML_20160401&quot;</span>
+</span><span id="L-137"><a href="#L-137"><span class="linenos">137</span></a>        <span class="o">/</span> <span class="s2">&quot;Content&quot;</span>
+</span><span id="L-138"><a href="#L-138"><span class="linenos">138</span></a>        <span class="o">/</span> <span class="s2">&quot;ICD10_Edition5_CodesAndTitlesAndMetadata_GB_20160401.xml&quot;</span>
 </span><span id="L-139"><a href="#L-139"><span class="linenos">139</span></a>    <span class="p">)</span>
-</span><span id="L-140"><a href="#L-140"><span class="linenos">140</span></a>
-</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_csv</span><span class="p">(</span><span class="n">file_path</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;</span><span class="se">\t</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="nb">str</span><span class="p">,</span> <span class="n">header</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
-</span><span id="L-142"><a href="#L-142"><span class="linenos">142</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="mi">0</span><span class="p">:</span> <span class="s2">&quot;opcs4&quot;</span><span class="p">,</span> <span class="mi">1</span><span class="p">:</span> <span class="s2">&quot;description&quot;</span><span class="p">})</span>
-</span><span id="L-143"><a href="#L-143"><span class="linenos">143</span></a>
-</span><span id="L-144"><a href="#L-144"><span class="linenos">144</span></a>    <span class="n">output_path</span> <span class="o">=</span> <span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;opcs4.parquet&quot;</span>
-</span><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a>    <span class="n">df</span><span class="o">.</span><span class="n">to_parquet</span><span class="p">(</span><span class="n">output_path</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Extracted: </span><span class="si">{</span><span class="n">output_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a>
+</span><span id="L-140"><a href="#L-140"><span class="linenos">140</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_xml</span><span class="p">(</span><span class="n">file_path</span><span class="p">)</span>
+</span><span id="L-141"><a href="#L-141"><span class="linenos">141</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[[</span><span class="s2">&quot;CODE&quot;</span><span class="p">,</span> <span class="s2">&quot;ALT_CODE&quot;</span><span class="p">,</span> <span class="s2">&quot;DESCRIPTION&quot;</span><span class="p">]]</span>
+</span><span id="L-142"><a href="#L-142"><span class="linenos">142</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span>
+</span><span id="L-143"><a href="#L-143"><span class="linenos">143</span></a>        <span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;CODE&quot;</span><span class="p">:</span> <span class="s2">&quot;icd10&quot;</span><span class="p">,</span> <span class="s2">&quot;ALT_CODE&quot;</span><span class="p">:</span> <span class="s2">&quot;icd10_alt&quot;</span><span class="p">,</span> <span class="s2">&quot;DESCRIPTION&quot;</span><span class="p">:</span> <span class="s2">&quot;description&quot;</span><span class="p">}</span>
+</span><span id="L-144"><a href="#L-144"><span class="linenos">144</span></a>    <span class="p">)</span>
+</span><span id="L-145"><a href="#L-145"><span class="linenos">145</span></a>    <span class="n">output_path</span> <span class="o">=</span> <span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;icd10.parquet&quot;</span>
+</span><span id="L-146"><a href="#L-146"><span class="linenos">146</span></a>    <span class="n">df</span><span class="o">.</span><span class="n">to_parquet</span><span class="p">(</span><span class="n">output_path</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="L-147"><a href="#L-147"><span class="linenos">147</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Extracted: </span><span class="si">{</span><span class="n">output_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
 </span><span id="L-148"><a href="#L-148"><span class="linenos">148</span></a>
-</span><span id="L-149"><a href="#L-149"><span class="linenos">149</span></a><span class="k">def</span><span class="w"> </span><span class="nf">extract_nhs_data_migrations</span><span class="p">():</span>
-</span><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a>    <span class="c1"># NHS Data Migrations</span>
-</span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a>
-</span><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a>    <span class="c1"># snomed only</span>
-</span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a>    <span class="n">file_path</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-154"><a href="#L-154"><span class="linenos">154</span></a>        <span class="n">DOWNLOADS_PATH</span>
-</span><span id="L-155"><a href="#L-155"><span class="linenos">155</span></a>        <span class="o">/</span> <span class="s2">&quot;Mapping Tables&quot;</span>
-</span><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a>        <span class="o">/</span> <span class="s2">&quot;Updated&quot;</span>
-</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a>        <span class="o">/</span> <span class="s2">&quot;Clinically Assured&quot;</span>
-</span><span id="L-158"><a href="#L-158"><span class="linenos">158</span></a>        <span class="o">/</span> <span class="s2">&quot;sctcremap_uk_20200401000001.txt&quot;</span>
-</span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a>    <span class="p">)</span>
-</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_csv</span><span class="p">(</span><span class="n">file_path</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;</span><span class="se">\t</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-161"><a href="#L-161"><span class="linenos">161</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[[</span><span class="s2">&quot;SCT_CONCEPTID&quot;</span><span class="p">]]</span>
-</span><span id="L-162"><a href="#L-162"><span class="linenos">162</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;SCT_CONCEPTID&quot;</span><span class="p">:</span> <span class="s2">&quot;snomed&quot;</span><span class="p">})</span>
-</span><span id="L-163"><a href="#L-163"><span class="linenos">163</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">drop_duplicates</span><span class="p">()</span>
-</span><span id="L-164"><a href="#L-164"><span class="linenos">164</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">astype</span><span class="p">(</span><span class="nb">str</span><span class="p">)</span>
-</span><span id="L-165"><a href="#L-165"><span class="linenos">165</span></a>
-</span><span id="L-166"><a href="#L-166"><span class="linenos">166</span></a>    <span class="n">output_path</span> <span class="o">=</span> <span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;snomed.parquet&quot;</span>
-</span><span id="L-167"><a href="#L-167"><span class="linenos">167</span></a>    <span class="n">df</span><span class="o">.</span><span class="n">to_parquet</span><span class="p">(</span><span class="n">output_path</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="L-168"><a href="#L-168"><span class="linenos">168</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Extracted: </span><span class="si">{</span><span class="n">output_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-169"><a href="#L-169"><span class="linenos">169</span></a>
-</span><span id="L-170"><a href="#L-170"><span class="linenos">170</span></a>    <span class="c1"># r2 -&gt; r3</span>
-</span><span id="L-171"><a href="#L-171"><span class="linenos">171</span></a>    <span class="n">file_path</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-172"><a href="#L-172"><span class="linenos">172</span></a>        <span class="n">DOWNLOADS_PATH</span>
-</span><span id="L-173"><a href="#L-173"><span class="linenos">173</span></a>        <span class="o">/</span> <span class="s2">&quot;Mapping Tables&quot;</span>
-</span><span id="L-174"><a href="#L-174"><span class="linenos">174</span></a>        <span class="o">/</span> <span class="s2">&quot;Updated&quot;</span>
-</span><span id="L-175"><a href="#L-175"><span class="linenos">175</span></a>        <span class="o">/</span> <span class="s2">&quot;Clinically Assured&quot;</span>
-</span><span id="L-176"><a href="#L-176"><span class="linenos">176</span></a>        <span class="o">/</span> <span class="s2">&quot;rctctv3map_uk_20200401000001.txt&quot;</span>
-</span><span id="L-177"><a href="#L-177"><span class="linenos">177</span></a>    <span class="p">)</span>
-</span><span id="L-178"><a href="#L-178"><span class="linenos">178</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_csv</span><span class="p">(</span><span class="n">file_path</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;</span><span class="se">\t</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-179"><a href="#L-179"><span class="linenos">179</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[[</span><span class="s2">&quot;V2_CONCEPTID&quot;</span><span class="p">,</span> <span class="s2">&quot;CTV3_CONCEPTID&quot;</span><span class="p">]]</span>
-</span><span id="L-180"><a href="#L-180"><span class="linenos">180</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;V2_CONCEPTID&quot;</span><span class="p">:</span> <span class="s2">&quot;read2&quot;</span><span class="p">,</span> <span class="s2">&quot;CTV3_CONCEPTID&quot;</span><span class="p">:</span> <span class="s2">&quot;read3&quot;</span><span class="p">})</span>
+</span><span id="L-149"><a href="#L-149"><span class="linenos">149</span></a>
+</span><span id="L-150"><a href="#L-150"><span class="linenos">150</span></a><span class="k">def</span><span class="w"> </span><span class="nf">extract_opsc4</span><span class="p">():</span>
+</span><span id="L-151"><a href="#L-151"><span class="linenos">151</span></a>    <span class="n">file_path</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a>        <span class="n">DOWNLOADS_PATH</span>
+</span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a>        <span class="o">/</span> <span class="s2">&quot;OPCS410 Data files txt&quot;</span>
+</span><span id="L-154"><a href="#L-154"><span class="linenos">154</span></a>        <span class="o">/</span> <span class="s2">&quot;OPCS410 CodesAndTitles Nov 2022 V1.0.txt&quot;</span>
+</span><span id="L-155"><a href="#L-155"><span class="linenos">155</span></a>    <span class="p">)</span>
+</span><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a>
+</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_csv</span><span class="p">(</span><span class="n">file_path</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;</span><span class="se">\t</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="nb">str</span><span class="p">,</span> <span class="n">header</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
+</span><span id="L-158"><a href="#L-158"><span class="linenos">158</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="mi">0</span><span class="p">:</span> <span class="s2">&quot;opcs4&quot;</span><span class="p">,</span> <span class="mi">1</span><span class="p">:</span> <span class="s2">&quot;description&quot;</span><span class="p">})</span>
+</span><span id="L-159"><a href="#L-159"><span class="linenos">159</span></a>
+</span><span id="L-160"><a href="#L-160"><span class="linenos">160</span></a>    <span class="n">output_path</span> <span class="o">=</span> <span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;opcs4.parquet&quot;</span>
+</span><span id="L-161"><a href="#L-161"><span class="linenos">161</span></a>    <span class="n">df</span><span class="o">.</span><span class="n">to_parquet</span><span class="p">(</span><span class="n">output_path</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="L-162"><a href="#L-162"><span class="linenos">162</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Extracted: </span><span class="si">{</span><span class="n">output_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-163"><a href="#L-163"><span class="linenos">163</span></a>
+</span><span id="L-164"><a href="#L-164"><span class="linenos">164</span></a>
+</span><span id="L-165"><a href="#L-165"><span class="linenos">165</span></a><span class="k">def</span><span class="w"> </span><span class="nf">extract_nhs_data_migrations</span><span class="p">():</span>
+</span><span id="L-166"><a href="#L-166"><span class="linenos">166</span></a>    <span class="c1"># NHS Data Migrations</span>
+</span><span id="L-167"><a href="#L-167"><span class="linenos">167</span></a>
+</span><span id="L-168"><a href="#L-168"><span class="linenos">168</span></a>    <span class="c1"># snomed only</span>
+</span><span id="L-169"><a href="#L-169"><span class="linenos">169</span></a>    <span class="n">file_path</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-170"><a href="#L-170"><span class="linenos">170</span></a>        <span class="n">DOWNLOADS_PATH</span>
+</span><span id="L-171"><a href="#L-171"><span class="linenos">171</span></a>        <span class="o">/</span> <span class="s2">&quot;Mapping Tables&quot;</span>
+</span><span id="L-172"><a href="#L-172"><span class="linenos">172</span></a>        <span class="o">/</span> <span class="s2">&quot;Updated&quot;</span>
+</span><span id="L-173"><a href="#L-173"><span class="linenos">173</span></a>        <span class="o">/</span> <span class="s2">&quot;Clinically Assured&quot;</span>
+</span><span id="L-174"><a href="#L-174"><span class="linenos">174</span></a>        <span class="o">/</span> <span class="s2">&quot;sctcremap_uk_20200401000001.txt&quot;</span>
+</span><span id="L-175"><a href="#L-175"><span class="linenos">175</span></a>    <span class="p">)</span>
+</span><span id="L-176"><a href="#L-176"><span class="linenos">176</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_csv</span><span class="p">(</span><span class="n">file_path</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;</span><span class="se">\t</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-177"><a href="#L-177"><span class="linenos">177</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[[</span><span class="s2">&quot;SCT_CONCEPTID&quot;</span><span class="p">]]</span>
+</span><span id="L-178"><a href="#L-178"><span class="linenos">178</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;SCT_CONCEPTID&quot;</span><span class="p">:</span> <span class="s2">&quot;snomed&quot;</span><span class="p">})</span>
+</span><span id="L-179"><a href="#L-179"><span class="linenos">179</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">drop_duplicates</span><span class="p">()</span>
+</span><span id="L-180"><a href="#L-180"><span class="linenos">180</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">astype</span><span class="p">(</span><span class="nb">str</span><span class="p">)</span>
 </span><span id="L-181"><a href="#L-181"><span class="linenos">181</span></a>
-</span><span id="L-182"><a href="#L-182"><span class="linenos">182</span></a>    <span class="n">output_path</span> <span class="o">=</span> <span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;read2_to_read3.parquet&quot;</span>
+</span><span id="L-182"><a href="#L-182"><span class="linenos">182</span></a>    <span class="n">output_path</span> <span class="o">=</span> <span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;snomed.parquet&quot;</span>
 </span><span id="L-183"><a href="#L-183"><span class="linenos">183</span></a>    <span class="n">df</span><span class="o">.</span><span class="n">to_parquet</span><span class="p">(</span><span class="n">output_path</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="L-184"><a href="#L-184"><span class="linenos">184</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Extracted: </span><span class="si">{</span><span class="n">output_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-184"><a href="#L-184"><span class="linenos">184</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Extracted: </span><span class="si">{</span><span class="n">output_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
 </span><span id="L-185"><a href="#L-185"><span class="linenos">185</span></a>
-</span><span id="L-186"><a href="#L-186"><span class="linenos">186</span></a>    <span class="c1"># r3-&gt;r2</span>
+</span><span id="L-186"><a href="#L-186"><span class="linenos">186</span></a>    <span class="c1"># r2 -&gt; r3</span>
 </span><span id="L-187"><a href="#L-187"><span class="linenos">187</span></a>    <span class="n">file_path</span> <span class="o">=</span> <span class="p">(</span>
 </span><span id="L-188"><a href="#L-188"><span class="linenos">188</span></a>        <span class="n">DOWNLOADS_PATH</span>
 </span><span id="L-189"><a href="#L-189"><span class="linenos">189</span></a>        <span class="o">/</span> <span class="s2">&quot;Mapping Tables&quot;</span>
 </span><span id="L-190"><a href="#L-190"><span class="linenos">190</span></a>        <span class="o">/</span> <span class="s2">&quot;Updated&quot;</span>
 </span><span id="L-191"><a href="#L-191"><span class="linenos">191</span></a>        <span class="o">/</span> <span class="s2">&quot;Clinically Assured&quot;</span>
-</span><span id="L-192"><a href="#L-192"><span class="linenos">192</span></a>        <span class="o">/</span> <span class="s2">&quot;ctv3rctmap_uk_20200401000002.txt&quot;</span>
+</span><span id="L-192"><a href="#L-192"><span class="linenos">192</span></a>        <span class="o">/</span> <span class="s2">&quot;rctctv3map_uk_20200401000001.txt&quot;</span>
 </span><span id="L-193"><a href="#L-193"><span class="linenos">193</span></a>    <span class="p">)</span>
 </span><span id="L-194"><a href="#L-194"><span class="linenos">194</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_csv</span><span class="p">(</span><span class="n">file_path</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;</span><span class="se">\t</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-195"><a href="#L-195"><span class="linenos">195</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[[</span><span class="s2">&quot;CTV3_CONCEPTID&quot;</span><span class="p">,</span> <span class="s2">&quot;V2_CONCEPTID&quot;</span><span class="p">]]</span>
-</span><span id="L-196"><a href="#L-196"><span class="linenos">196</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;CTV3_CONCEPTID&quot;</span><span class="p">:</span> <span class="s2">&quot;read3&quot;</span><span class="p">,</span> <span class="s2">&quot;V2_CONCEPTID&quot;</span><span class="p">:</span> <span class="s2">&quot;read2&quot;</span><span class="p">})</span>
-</span><span id="L-197"><a href="#L-197"><span class="linenos">197</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">drop_duplicates</span><span class="p">()</span>
-</span><span id="L-198"><a href="#L-198"><span class="linenos">198</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="o">~</span><span class="n">df</span><span class="p">[</span><span class="s2">&quot;read2&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="s2">&quot;^.*_.*$&quot;</span><span class="p">)]</span>  <span class="c1"># remove r2 codes with &#39;_&#39;</span>
-</span><span id="L-199"><a href="#L-199"><span class="linenos">199</span></a>
-</span><span id="L-200"><a href="#L-200"><span class="linenos">200</span></a>    <span class="n">output_path</span> <span class="o">=</span> <span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;read3_to_read2.parquet&quot;</span>
-</span><span id="L-201"><a href="#L-201"><span class="linenos">201</span></a>    <span class="n">df</span><span class="o">.</span><span class="n">to_parquet</span><span class="p">(</span><span class="n">output_path</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="L-202"><a href="#L-202"><span class="linenos">202</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Extracted: </span><span class="si">{</span><span class="n">output_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-203"><a href="#L-203"><span class="linenos">203</span></a>
-</span><span id="L-204"><a href="#L-204"><span class="linenos">204</span></a>    <span class="c1"># r2 -&gt; snomed</span>
-</span><span id="L-205"><a href="#L-205"><span class="linenos">205</span></a>    <span class="n">file_path</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-206"><a href="#L-206"><span class="linenos">206</span></a>        <span class="n">DOWNLOADS_PATH</span>
-</span><span id="L-207"><a href="#L-207"><span class="linenos">207</span></a>        <span class="o">/</span> <span class="s2">&quot;Mapping Tables&quot;</span>
-</span><span id="L-208"><a href="#L-208"><span class="linenos">208</span></a>        <span class="o">/</span> <span class="s2">&quot;Updated&quot;</span>
-</span><span id="L-209"><a href="#L-209"><span class="linenos">209</span></a>        <span class="o">/</span> <span class="s2">&quot;Clinically Assured&quot;</span>
-</span><span id="L-210"><a href="#L-210"><span class="linenos">210</span></a>        <span class="o">/</span> <span class="s2">&quot;rcsctmap2_uk_20200401000001.txt&quot;</span>
-</span><span id="L-211"><a href="#L-211"><span class="linenos">211</span></a>    <span class="p">)</span>
-</span><span id="L-212"><a href="#L-212"><span class="linenos">212</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_csv</span><span class="p">(</span><span class="n">file_path</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;</span><span class="se">\t</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="nb">str</span><span class="p">)</span>
-</span><span id="L-213"><a href="#L-213"><span class="linenos">213</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[[</span><span class="s2">&quot;ReadCode&quot;</span><span class="p">,</span> <span class="s2">&quot;ConceptId&quot;</span><span class="p">]]</span>
-</span><span id="L-214"><a href="#L-214"><span class="linenos">214</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;ReadCode&quot;</span><span class="p">:</span> <span class="s2">&quot;read2&quot;</span><span class="p">,</span> <span class="s2">&quot;ConceptId&quot;</span><span class="p">:</span> <span class="s2">&quot;snomed&quot;</span><span class="p">})</span>
+</span><span id="L-195"><a href="#L-195"><span class="linenos">195</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[[</span><span class="s2">&quot;V2_CONCEPTID&quot;</span><span class="p">,</span> <span class="s2">&quot;CTV3_CONCEPTID&quot;</span><span class="p">]]</span>
+</span><span id="L-196"><a href="#L-196"><span class="linenos">196</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;V2_CONCEPTID&quot;</span><span class="p">:</span> <span class="s2">&quot;read2&quot;</span><span class="p">,</span> <span class="s2">&quot;CTV3_CONCEPTID&quot;</span><span class="p">:</span> <span class="s2">&quot;read3&quot;</span><span class="p">})</span>
+</span><span id="L-197"><a href="#L-197"><span class="linenos">197</span></a>
+</span><span id="L-198"><a href="#L-198"><span class="linenos">198</span></a>    <span class="n">output_path</span> <span class="o">=</span> <span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;read2_to_read3.parquet&quot;</span>
+</span><span id="L-199"><a href="#L-199"><span class="linenos">199</span></a>    <span class="n">df</span><span class="o">.</span><span class="n">to_parquet</span><span class="p">(</span><span class="n">output_path</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="L-200"><a href="#L-200"><span class="linenos">200</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Extracted: </span><span class="si">{</span><span class="n">output_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-201"><a href="#L-201"><span class="linenos">201</span></a>
+</span><span id="L-202"><a href="#L-202"><span class="linenos">202</span></a>    <span class="c1"># r3-&gt;r2</span>
+</span><span id="L-203"><a href="#L-203"><span class="linenos">203</span></a>    <span class="n">file_path</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-204"><a href="#L-204"><span class="linenos">204</span></a>        <span class="n">DOWNLOADS_PATH</span>
+</span><span id="L-205"><a href="#L-205"><span class="linenos">205</span></a>        <span class="o">/</span> <span class="s2">&quot;Mapping Tables&quot;</span>
+</span><span id="L-206"><a href="#L-206"><span class="linenos">206</span></a>        <span class="o">/</span> <span class="s2">&quot;Updated&quot;</span>
+</span><span id="L-207"><a href="#L-207"><span class="linenos">207</span></a>        <span class="o">/</span> <span class="s2">&quot;Clinically Assured&quot;</span>
+</span><span id="L-208"><a href="#L-208"><span class="linenos">208</span></a>        <span class="o">/</span> <span class="s2">&quot;ctv3rctmap_uk_20200401000002.txt&quot;</span>
+</span><span id="L-209"><a href="#L-209"><span class="linenos">209</span></a>    <span class="p">)</span>
+</span><span id="L-210"><a href="#L-210"><span class="linenos">210</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_csv</span><span class="p">(</span><span class="n">file_path</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;</span><span class="se">\t</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-211"><a href="#L-211"><span class="linenos">211</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[[</span><span class="s2">&quot;CTV3_CONCEPTID&quot;</span><span class="p">,</span> <span class="s2">&quot;V2_CONCEPTID&quot;</span><span class="p">]]</span>
+</span><span id="L-212"><a href="#L-212"><span class="linenos">212</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;CTV3_CONCEPTID&quot;</span><span class="p">:</span> <span class="s2">&quot;read3&quot;</span><span class="p">,</span> <span class="s2">&quot;V2_CONCEPTID&quot;</span><span class="p">:</span> <span class="s2">&quot;read2&quot;</span><span class="p">})</span>
+</span><span id="L-213"><a href="#L-213"><span class="linenos">213</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">drop_duplicates</span><span class="p">()</span>
+</span><span id="L-214"><a href="#L-214"><span class="linenos">214</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="o">~</span><span class="n">df</span><span class="p">[</span><span class="s2">&quot;read2&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="s2">&quot;^.*_.*$&quot;</span><span class="p">)]</span>  <span class="c1"># remove r2 codes with &#39;_&#39;</span>
 </span><span id="L-215"><a href="#L-215"><span class="linenos">215</span></a>
-</span><span id="L-216"><a href="#L-216"><span class="linenos">216</span></a>    <span class="n">output_path</span> <span class="o">=</span> <span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;read2_to_snomed.parquet&quot;</span>
+</span><span id="L-216"><a href="#L-216"><span class="linenos">216</span></a>    <span class="n">output_path</span> <span class="o">=</span> <span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;read3_to_read2.parquet&quot;</span>
 </span><span id="L-217"><a href="#L-217"><span class="linenos">217</span></a>    <span class="n">df</span><span class="o">.</span><span class="n">to_parquet</span><span class="p">(</span><span class="n">output_path</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="L-218"><a href="#L-218"><span class="linenos">218</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Extracted: </span><span class="si">{</span><span class="n">output_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-218"><a href="#L-218"><span class="linenos">218</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Extracted: </span><span class="si">{</span><span class="n">output_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
 </span><span id="L-219"><a href="#L-219"><span class="linenos">219</span></a>
-</span><span id="L-220"><a href="#L-220"><span class="linenos">220</span></a>    <span class="c1"># r3-&gt;snomed</span>
+</span><span id="L-220"><a href="#L-220"><span class="linenos">220</span></a>    <span class="c1"># r2 -&gt; snomed</span>
 </span><span id="L-221"><a href="#L-221"><span class="linenos">221</span></a>    <span class="n">file_path</span> <span class="o">=</span> <span class="p">(</span>
 </span><span id="L-222"><a href="#L-222"><span class="linenos">222</span></a>        <span class="n">DOWNLOADS_PATH</span>
 </span><span id="L-223"><a href="#L-223"><span class="linenos">223</span></a>        <span class="o">/</span> <span class="s2">&quot;Mapping Tables&quot;</span>
 </span><span id="L-224"><a href="#L-224"><span class="linenos">224</span></a>        <span class="o">/</span> <span class="s2">&quot;Updated&quot;</span>
 </span><span id="L-225"><a href="#L-225"><span class="linenos">225</span></a>        <span class="o">/</span> <span class="s2">&quot;Clinically Assured&quot;</span>
-</span><span id="L-226"><a href="#L-226"><span class="linenos">226</span></a>        <span class="o">/</span> <span class="s2">&quot;ctv3sctmap2_uk_20200401000001.txt&quot;</span>
+</span><span id="L-226"><a href="#L-226"><span class="linenos">226</span></a>        <span class="o">/</span> <span class="s2">&quot;rcsctmap2_uk_20200401000001.txt&quot;</span>
 </span><span id="L-227"><a href="#L-227"><span class="linenos">227</span></a>    <span class="p">)</span>
 </span><span id="L-228"><a href="#L-228"><span class="linenos">228</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_csv</span><span class="p">(</span><span class="n">file_path</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;</span><span class="se">\t</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="nb">str</span><span class="p">)</span>
-</span><span id="L-229"><a href="#L-229"><span class="linenos">229</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[[</span><span class="s2">&quot;CTV3_TERMID&quot;</span><span class="p">,</span> <span class="s2">&quot;SCT_CONCEPTID&quot;</span><span class="p">]]</span>
-</span><span id="L-230"><a href="#L-230"><span class="linenos">230</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;CTV3_TERMID&quot;</span><span class="p">:</span> <span class="s2">&quot;read3&quot;</span><span class="p">,</span> <span class="s2">&quot;SCT_CONCEPTID&quot;</span><span class="p">:</span> <span class="s2">&quot;snomed&quot;</span><span class="p">})</span>
-</span><span id="L-231"><a href="#L-231"><span class="linenos">231</span></a>    <span class="n">df</span><span class="p">[</span><span class="s2">&quot;snomed&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="s2">&quot;snomed&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">astype</span><span class="p">(</span><span class="nb">str</span><span class="p">)</span>
-</span><span id="L-232"><a href="#L-232"><span class="linenos">232</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="o">~</span><span class="n">df</span><span class="p">[</span><span class="s2">&quot;snomed&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="s2">&quot;^.*_.*$&quot;</span><span class="p">)]</span>  <span class="c1"># remove snomed codes with &#39;_&#39;</span>
-</span><span id="L-233"><a href="#L-233"><span class="linenos">233</span></a>
-</span><span id="L-234"><a href="#L-234"><span class="linenos">234</span></a>    <span class="n">output_path</span> <span class="o">=</span> <span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;read3_to_snomed.parquet&quot;</span>
-</span><span id="L-235"><a href="#L-235"><span class="linenos">235</span></a>    <span class="n">df</span><span class="o">.</span><span class="n">to_parquet</span><span class="p">(</span><span class="n">output_path</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="L-236"><a href="#L-236"><span class="linenos">236</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Extracted: </span><span class="si">{</span><span class="n">output_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-237"><a href="#L-237"><span class="linenos">237</span></a>
-</span><span id="L-238"><a href="#L-238"><span class="linenos">238</span></a>
-</span><span id="L-239"><a href="#L-239"><span class="linenos">239</span></a><span class="k">def</span><span class="w"> </span><span class="nf">extract_nhs_read_browser</span><span class="p">():</span>
-</span><span id="L-240"><a href="#L-240"><span class="linenos">240</span></a>    <span class="c1"># r2 only</span>
-</span><span id="L-241"><a href="#L-241"><span class="linenos">241</span></a>    <span class="n">input_path</span> <span class="o">=</span> <span class="n">DOWNLOADS_PATH</span> <span class="o">/</span> <span class="s2">&quot;Standard&quot;</span> <span class="o">/</span> <span class="s2">&quot;V2&quot;</span> <span class="o">/</span> <span class="s2">&quot;ANCESTOR.DBF&quot;</span>
-</span><span id="L-242"><a href="#L-242"><span class="linenos">242</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">simpledbf</span><span class="o">.</span><span class="n">Dbf5</span><span class="p">(</span><span class="n">input_path</span><span class="p">)</span><span class="o">.</span><span class="n">to_dataframe</span><span class="p">()</span>
-</span><span id="L-243"><a href="#L-243"><span class="linenos">243</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">concat</span><span class="p">([</span><span class="n">df</span><span class="p">[</span><span class="s2">&quot;READCODE&quot;</span><span class="p">],</span> <span class="n">df</span><span class="p">[</span><span class="s2">&quot;DESCENDANT&quot;</span><span class="p">]])</span>
-</span><span id="L-244"><a href="#L-244"><span class="linenos">244</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">(</span><span class="n">df</span><span class="o">.</span><span class="n">drop_duplicates</span><span class="p">())</span>
-</span><span id="L-245"><a href="#L-245"><span class="linenos">245</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="mi">0</span><span class="p">:</span> <span class="s2">&quot;read2&quot;</span><span class="p">})</span>
-</span><span id="L-246"><a href="#L-246"><span class="linenos">246</span></a>    <span class="n">output_path</span> <span class="o">=</span> <span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;read2.parquet&quot;</span>
-</span><span id="L-247"><a href="#L-247"><span class="linenos">247</span></a>    <span class="n">df</span><span class="o">.</span><span class="n">to_parquet</span><span class="p">(</span><span class="n">output_path</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="L-248"><a href="#L-248"><span class="linenos">248</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Extracted: </span><span class="si">{</span><span class="n">output_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-229"><a href="#L-229"><span class="linenos">229</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[[</span><span class="s2">&quot;ReadCode&quot;</span><span class="p">,</span> <span class="s2">&quot;ConceptId&quot;</span><span class="p">]]</span>
+</span><span id="L-230"><a href="#L-230"><span class="linenos">230</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;ReadCode&quot;</span><span class="p">:</span> <span class="s2">&quot;read2&quot;</span><span class="p">,</span> <span class="s2">&quot;ConceptId&quot;</span><span class="p">:</span> <span class="s2">&quot;snomed&quot;</span><span class="p">})</span>
+</span><span id="L-231"><a href="#L-231"><span class="linenos">231</span></a>
+</span><span id="L-232"><a href="#L-232"><span class="linenos">232</span></a>    <span class="n">output_path</span> <span class="o">=</span> <span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;read2_to_snomed.parquet&quot;</span>
+</span><span id="L-233"><a href="#L-233"><span class="linenos">233</span></a>    <span class="n">df</span><span class="o">.</span><span class="n">to_parquet</span><span class="p">(</span><span class="n">output_path</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="L-234"><a href="#L-234"><span class="linenos">234</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Extracted: </span><span class="si">{</span><span class="n">output_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-235"><a href="#L-235"><span class="linenos">235</span></a>
+</span><span id="L-236"><a href="#L-236"><span class="linenos">236</span></a>    <span class="c1"># r3-&gt;snomed</span>
+</span><span id="L-237"><a href="#L-237"><span class="linenos">237</span></a>    <span class="n">file_path</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-238"><a href="#L-238"><span class="linenos">238</span></a>        <span class="n">DOWNLOADS_PATH</span>
+</span><span id="L-239"><a href="#L-239"><span class="linenos">239</span></a>        <span class="o">/</span> <span class="s2">&quot;Mapping Tables&quot;</span>
+</span><span id="L-240"><a href="#L-240"><span class="linenos">240</span></a>        <span class="o">/</span> <span class="s2">&quot;Updated&quot;</span>
+</span><span id="L-241"><a href="#L-241"><span class="linenos">241</span></a>        <span class="o">/</span> <span class="s2">&quot;Clinically Assured&quot;</span>
+</span><span id="L-242"><a href="#L-242"><span class="linenos">242</span></a>        <span class="o">/</span> <span class="s2">&quot;ctv3sctmap2_uk_20200401000001.txt&quot;</span>
+</span><span id="L-243"><a href="#L-243"><span class="linenos">243</span></a>    <span class="p">)</span>
+</span><span id="L-244"><a href="#L-244"><span class="linenos">244</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_csv</span><span class="p">(</span><span class="n">file_path</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;</span><span class="se">\t</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="nb">str</span><span class="p">)</span>
+</span><span id="L-245"><a href="#L-245"><span class="linenos">245</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[[</span><span class="s2">&quot;CTV3_TERMID&quot;</span><span class="p">,</span> <span class="s2">&quot;SCT_CONCEPTID&quot;</span><span class="p">]]</span>
+</span><span id="L-246"><a href="#L-246"><span class="linenos">246</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;CTV3_TERMID&quot;</span><span class="p">:</span> <span class="s2">&quot;read3&quot;</span><span class="p">,</span> <span class="s2">&quot;SCT_CONCEPTID&quot;</span><span class="p">:</span> <span class="s2">&quot;snomed&quot;</span><span class="p">})</span>
+</span><span id="L-247"><a href="#L-247"><span class="linenos">247</span></a>    <span class="n">df</span><span class="p">[</span><span class="s2">&quot;snomed&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="s2">&quot;snomed&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">astype</span><span class="p">(</span><span class="nb">str</span><span class="p">)</span>
+</span><span id="L-248"><a href="#L-248"><span class="linenos">248</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="o">~</span><span class="n">df</span><span class="p">[</span><span class="s2">&quot;snomed&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="s2">&quot;^.*_.*$&quot;</span><span class="p">)]</span>  <span class="c1"># remove snomed codes with &#39;_&#39;</span>
 </span><span id="L-249"><a href="#L-249"><span class="linenos">249</span></a>
-</span><span id="L-250"><a href="#L-250"><span class="linenos">250</span></a>    <span class="c1"># r2 -&gt; atc</span>
-</span><span id="L-251"><a href="#L-251"><span class="linenos">251</span></a>    <span class="n">input_path</span> <span class="o">=</span> <span class="n">DOWNLOADS_PATH</span> <span class="o">/</span> <span class="s2">&quot;Standard&quot;</span> <span class="o">/</span> <span class="s2">&quot;V2&quot;</span> <span class="o">/</span> <span class="s2">&quot;ATC.DBF&quot;</span>
-</span><span id="L-252"><a href="#L-252"><span class="linenos">252</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">simpledbf</span><span class="o">.</span><span class="n">Dbf5</span><span class="p">(</span><span class="n">input_path</span><span class="p">)</span><span class="o">.</span><span class="n">to_dataframe</span><span class="p">()</span>
-</span><span id="L-253"><a href="#L-253"><span class="linenos">253</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[[</span><span class="s2">&quot;READCODE&quot;</span><span class="p">,</span> <span class="s2">&quot;ATC&quot;</span><span class="p">]]</span>
-</span><span id="L-254"><a href="#L-254"><span class="linenos">254</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;READCODE&quot;</span><span class="p">:</span> <span class="s2">&quot;read2&quot;</span><span class="p">,</span> <span class="s2">&quot;ATC&quot;</span><span class="p">:</span> <span class="s2">&quot;atc&quot;</span><span class="p">})</span>
-</span><span id="L-255"><a href="#L-255"><span class="linenos">255</span></a>    <span class="n">output_path</span> <span class="o">=</span> <span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;read2_to_atc.parquet&quot;</span>
-</span><span id="L-256"><a href="#L-256"><span class="linenos">256</span></a>    <span class="n">df</span><span class="o">.</span><span class="n">to_parquet</span><span class="p">(</span><span class="n">output_path</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="L-257"><a href="#L-257"><span class="linenos">257</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Extracted: </span><span class="si">{</span><span class="n">output_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-258"><a href="#L-258"><span class="linenos">258</span></a>
-</span><span id="L-259"><a href="#L-259"><span class="linenos">259</span></a>    <span class="c1"># r2 -&gt; icd10</span>
-</span><span id="L-260"><a href="#L-260"><span class="linenos">260</span></a>    <span class="n">input_path</span> <span class="o">=</span> <span class="n">DOWNLOADS_PATH</span> <span class="o">/</span> <span class="s2">&quot;Standard&quot;</span> <span class="o">/</span> <span class="s2">&quot;V2&quot;</span> <span class="o">/</span> <span class="s2">&quot;ICD10.DBF&quot;</span>
-</span><span id="L-261"><a href="#L-261"><span class="linenos">261</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">simpledbf</span><span class="o">.</span><span class="n">Dbf5</span><span class="p">(</span><span class="n">input_path</span><span class="p">)</span><span class="o">.</span><span class="n">to_dataframe</span><span class="p">()</span>
-</span><span id="L-262"><a href="#L-262"><span class="linenos">262</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[[</span><span class="s2">&quot;READ_CODE&quot;</span><span class="p">,</span> <span class="s2">&quot;TARG_CODE&quot;</span><span class="p">]]</span>
-</span><span id="L-263"><a href="#L-263"><span class="linenos">263</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;READ_CODE&quot;</span><span class="p">:</span> <span class="s2">&quot;read2&quot;</span><span class="p">,</span> <span class="s2">&quot;TARG_CODE&quot;</span><span class="p">:</span> <span class="s2">&quot;icd10&quot;</span><span class="p">})</span>
-</span><span id="L-264"><a href="#L-264"><span class="linenos">264</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="o">~</span><span class="n">df</span><span class="p">[</span><span class="s2">&quot;icd10&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="s2">&quot;^.*-.*$&quot;</span><span class="p">)]</span>  <span class="c1"># remove codes with &#39;-&#39;</span>
-</span><span id="L-265"><a href="#L-265"><span class="linenos">265</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="o">~</span><span class="n">df</span><span class="p">[</span><span class="s2">&quot;read2&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="s2">&quot;^.*-.*$&quot;</span><span class="p">)]</span>  <span class="c1"># remove codes with &#39;-&#39;</span>
-</span><span id="L-266"><a href="#L-266"><span class="linenos">266</span></a>    <span class="n">output_path</span> <span class="o">=</span> <span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;read2_to_icd10.parquet&quot;</span>
-</span><span id="L-267"><a href="#L-267"><span class="linenos">267</span></a>    <span class="n">df</span><span class="o">.</span><span class="n">to_parquet</span><span class="p">(</span><span class="n">output_path</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="L-268"><a href="#L-268"><span class="linenos">268</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Extracted: </span><span class="si">{</span><span class="n">output_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-269"><a href="#L-269"><span class="linenos">269</span></a>
-</span><span id="L-270"><a href="#L-270"><span class="linenos">270</span></a>    <span class="c1"># r2 -&gt; opcs4</span>
-</span><span id="L-271"><a href="#L-271"><span class="linenos">271</span></a>    <span class="n">input_path</span> <span class="o">=</span> <span class="n">DOWNLOADS_PATH</span> <span class="o">/</span> <span class="s2">&quot;Standard&quot;</span> <span class="o">/</span> <span class="s2">&quot;V2&quot;</span> <span class="o">/</span> <span class="s2">&quot;OPCS4V3.DBF&quot;</span>
-</span><span id="L-272"><a href="#L-272"><span class="linenos">272</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">simpledbf</span><span class="o">.</span><span class="n">Dbf5</span><span class="p">(</span><span class="n">input_path</span><span class="p">)</span><span class="o">.</span><span class="n">to_dataframe</span><span class="p">()</span>
-</span><span id="L-273"><a href="#L-273"><span class="linenos">273</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[[</span><span class="s2">&quot;READ_CODE&quot;</span><span class="p">,</span> <span class="s2">&quot;TARG_CODE&quot;</span><span class="p">]]</span>
-</span><span id="L-274"><a href="#L-274"><span class="linenos">274</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;READ_CODE&quot;</span><span class="p">:</span> <span class="s2">&quot;read2&quot;</span><span class="p">,</span> <span class="s2">&quot;TARG_CODE&quot;</span><span class="p">:</span> <span class="s2">&quot;opcs4&quot;</span><span class="p">})</span>
-</span><span id="L-275"><a href="#L-275"><span class="linenos">275</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="o">~</span><span class="n">df</span><span class="p">[</span><span class="s2">&quot;opcs4&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="s2">&quot;^.*-.*$&quot;</span><span class="p">)]</span>  <span class="c1"># remove codes with &#39;-&#39;</span>
-</span><span id="L-276"><a href="#L-276"><span class="linenos">276</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="o">~</span><span class="n">df</span><span class="p">[</span><span class="s2">&quot;read2&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="s2">&quot;^.*-.*$&quot;</span><span class="p">)]</span>  <span class="c1"># remove codes with &#39;-&#39;</span>
-</span><span id="L-277"><a href="#L-277"><span class="linenos">277</span></a>    <span class="n">output_path</span> <span class="o">=</span> <span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;read2_to_opcs4.parquet&quot;</span>
-</span><span id="L-278"><a href="#L-278"><span class="linenos">278</span></a>    <span class="n">df</span><span class="o">.</span><span class="n">to_parquet</span><span class="p">(</span><span class="n">output_path</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="L-279"><a href="#L-279"><span class="linenos">279</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Extracted: </span><span class="si">{</span><span class="n">output_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-280"><a href="#L-280"><span class="linenos">280</span></a>
-</span><span id="L-281"><a href="#L-281"><span class="linenos">281</span></a>    <span class="c1"># r3 only</span>
-</span><span id="L-282"><a href="#L-282"><span class="linenos">282</span></a>    <span class="n">input_path</span> <span class="o">=</span> <span class="n">DOWNLOADS_PATH</span> <span class="o">/</span> <span class="s2">&quot;Standard&quot;</span> <span class="o">/</span> <span class="s2">&quot;V3&quot;</span> <span class="o">/</span> <span class="s2">&quot;ANCESTOR.DBF&quot;</span>
-</span><span id="L-283"><a href="#L-283"><span class="linenos">283</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">simpledbf</span><span class="o">.</span><span class="n">Dbf5</span><span class="p">(</span><span class="n">input_path</span><span class="p">)</span><span class="o">.</span><span class="n">to_dataframe</span><span class="p">()</span>
-</span><span id="L-284"><a href="#L-284"><span class="linenos">284</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">concat</span><span class="p">([</span><span class="n">df</span><span class="p">[</span><span class="s2">&quot;READCODE&quot;</span><span class="p">],</span> <span class="n">df</span><span class="p">[</span><span class="s2">&quot;DESCENDANT&quot;</span><span class="p">]])</span>
-</span><span id="L-285"><a href="#L-285"><span class="linenos">285</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">(</span><span class="n">df</span><span class="o">.</span><span class="n">drop_duplicates</span><span class="p">())</span>
-</span><span id="L-286"><a href="#L-286"><span class="linenos">286</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="mi">0</span><span class="p">:</span> <span class="s2">&quot;read3&quot;</span><span class="p">})</span>
-</span><span id="L-287"><a href="#L-287"><span class="linenos">287</span></a>    <span class="n">output_path</span> <span class="o">=</span> <span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;read3.parquet&quot;</span>
-</span><span id="L-288"><a href="#L-288"><span class="linenos">288</span></a>    <span class="n">df</span><span class="o">.</span><span class="n">to_parquet</span><span class="p">(</span><span class="n">output_path</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="L-289"><a href="#L-289"><span class="linenos">289</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Extracted: </span><span class="si">{</span><span class="n">output_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-290"><a href="#L-290"><span class="linenos">290</span></a>
-</span><span id="L-291"><a href="#L-291"><span class="linenos">291</span></a>    <span class="c1"># r3 -&gt; icd10</span>
-</span><span id="L-292"><a href="#L-292"><span class="linenos">292</span></a>    <span class="n">input_path</span> <span class="o">=</span> <span class="n">DOWNLOADS_PATH</span> <span class="o">/</span> <span class="s2">&quot;Standard&quot;</span> <span class="o">/</span> <span class="s2">&quot;V3&quot;</span> <span class="o">/</span> <span class="s2">&quot;ICD10.DBF&quot;</span>
-</span><span id="L-293"><a href="#L-293"><span class="linenos">293</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">simpledbf</span><span class="o">.</span><span class="n">Dbf5</span><span class="p">(</span><span class="n">input_path</span><span class="p">)</span><span class="o">.</span><span class="n">to_dataframe</span><span class="p">()</span>
-</span><span id="L-294"><a href="#L-294"><span class="linenos">294</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[[</span><span class="s2">&quot;READ_CODE&quot;</span><span class="p">,</span> <span class="s2">&quot;TARG_CODE&quot;</span><span class="p">]]</span>
-</span><span id="L-295"><a href="#L-295"><span class="linenos">295</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;READ_CODE&quot;</span><span class="p">:</span> <span class="s2">&quot;read3&quot;</span><span class="p">,</span> <span class="s2">&quot;TARG_CODE&quot;</span><span class="p">:</span> <span class="s2">&quot;icd10&quot;</span><span class="p">})</span>
-</span><span id="L-296"><a href="#L-296"><span class="linenos">296</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="o">~</span><span class="n">df</span><span class="p">[</span><span class="s2">&quot;icd10&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="s2">&quot;^.*-.*$&quot;</span><span class="p">)]</span>  <span class="c1"># remove codes with &#39;-&#39;</span>
-</span><span id="L-297"><a href="#L-297"><span class="linenos">297</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="o">~</span><span class="n">df</span><span class="p">[</span><span class="s2">&quot;read3&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="s2">&quot;^.*-.*$&quot;</span><span class="p">)]</span>  <span class="c1"># remove codes with &#39;-&#39;</span>
-</span><span id="L-298"><a href="#L-298"><span class="linenos">298</span></a>    <span class="n">output_path</span> <span class="o">=</span> <span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;read3_to_icd10.parquet&quot;</span>
-</span><span id="L-299"><a href="#L-299"><span class="linenos">299</span></a>    <span class="n">df</span><span class="o">.</span><span class="n">to_parquet</span><span class="p">(</span><span class="n">output_path</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="L-300"><a href="#L-300"><span class="linenos">300</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Extracted: </span><span class="si">{</span><span class="n">output_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-301"><a href="#L-301"><span class="linenos">301</span></a>
-</span><span id="L-302"><a href="#L-302"><span class="linenos">302</span></a>    <span class="c1"># r3 -&gt; icd9</span>
-</span><span id="L-303"><a href="#L-303"><span class="linenos">303</span></a>    <span class="c1"># dbf = simpledbf.Dbf5(&#39;build/maps/downloads/Standard/V3/ICD9V3.DBF&#39;)</span>
-</span><span id="L-304"><a href="#L-304"><span class="linenos">304</span></a>
-</span><span id="L-305"><a href="#L-305"><span class="linenos">305</span></a>    <span class="c1"># r3 -&gt; opcs4</span>
-</span><span id="L-306"><a href="#L-306"><span class="linenos">306</span></a>    <span class="n">input_path</span> <span class="o">=</span> <span class="n">DOWNLOADS_PATH</span> <span class="o">/</span> <span class="s2">&quot;Standard&quot;</span> <span class="o">/</span> <span class="s2">&quot;V3&quot;</span> <span class="o">/</span> <span class="s2">&quot;OPCS4V3.DBF&quot;</span>
-</span><span id="L-307"><a href="#L-307"><span class="linenos">307</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">simpledbf</span><span class="o">.</span><span class="n">Dbf5</span><span class="p">(</span><span class="n">input_path</span><span class="p">)</span><span class="o">.</span><span class="n">to_dataframe</span><span class="p">()</span>
-</span><span id="L-308"><a href="#L-308"><span class="linenos">308</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[[</span><span class="s2">&quot;READ_CODE&quot;</span><span class="p">,</span> <span class="s2">&quot;TARG_CODE&quot;</span><span class="p">]]</span>
-</span><span id="L-309"><a href="#L-309"><span class="linenos">309</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;READ_CODE&quot;</span><span class="p">:</span> <span class="s2">&quot;read3&quot;</span><span class="p">,</span> <span class="s2">&quot;TARG_CODE&quot;</span><span class="p">:</span> <span class="s2">&quot;opcs4&quot;</span><span class="p">})</span>
-</span><span id="L-310"><a href="#L-310"><span class="linenos">310</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="o">~</span><span class="n">df</span><span class="p">[</span><span class="s2">&quot;opcs4&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="s2">&quot;^.*-.*$&quot;</span><span class="p">)]</span>  <span class="c1"># remove codes with &#39;-&#39;</span>
-</span><span id="L-311"><a href="#L-311"><span class="linenos">311</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="o">~</span><span class="n">df</span><span class="p">[</span><span class="s2">&quot;read3&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="s2">&quot;^.*-.*$&quot;</span><span class="p">)]</span>  <span class="c1"># remove codes with &#39;-&#39;</span>
-</span><span id="L-312"><a href="#L-312"><span class="linenos">312</span></a>    <span class="n">output_path</span> <span class="o">=</span> <span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;read3_to_opcs4.parquet&quot;</span>
-</span><span id="L-313"><a href="#L-313"><span class="linenos">313</span></a>    <span class="n">df</span><span class="o">.</span><span class="n">to_parquet</span><span class="p">(</span><span class="n">output_path</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="L-314"><a href="#L-314"><span class="linenos">314</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Extracted: </span><span class="si">{</span><span class="n">output_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="L-315"><a href="#L-315"><span class="linenos">315</span></a>
-</span><span id="L-316"><a href="#L-316"><span class="linenos">316</span></a>
-</span><span id="L-317"><a href="#L-317"><span class="linenos">317</span></a><span class="k">def</span><span class="w"> </span><span class="nf">create_map_directories</span><span class="p">():</span>
-</span><span id="L-318"><a href="#L-318"><span class="linenos">318</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Create map directories.&quot;&quot;&quot;</span>
-</span><span id="L-319"><a href="#L-319"><span class="linenos">319</span></a>
-</span><span id="L-320"><a href="#L-320"><span class="linenos">320</span></a>    <span class="c1"># Check if build directory exists</span>
-</span><span id="L-321"><a href="#L-321"><span class="linenos">321</span></a>    <span class="n">create_map_dirs</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-322"><a href="#L-322"><span class="linenos">322</span></a>    <span class="k">if</span> <span class="n">VOCAB_PATH</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
-</span><span id="L-323"><a href="#L-323"><span class="linenos">323</span></a>        <span class="n">user_input</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-324"><a href="#L-324"><span class="linenos">324</span></a>            <span class="nb">input</span><span class="p">(</span>
-</span><span id="L-325"><a href="#L-325"><span class="linenos">325</span></a>                <span class="sa">f</span><span class="s2">&quot;The map directory </span><span class="si">{</span><span class="n">VOCAB_PATH</span><span class="si">}</span><span class="s2"> already exists. Do you want to download and process trud data again? (y/n): &quot;</span>
-</span><span id="L-326"><a href="#L-326"><span class="linenos">326</span></a>            <span class="p">)</span>
-</span><span id="L-327"><a href="#L-327"><span class="linenos">327</span></a>            <span class="o">.</span><span class="n">strip</span><span class="p">()</span>
-</span><span id="L-328"><a href="#L-328"><span class="linenos">328</span></a>            <span class="o">.</span><span class="n">lower</span><span class="p">()</span>
-</span><span id="L-329"><a href="#L-329"><span class="linenos">329</span></a>        <span class="p">)</span>
-</span><span id="L-330"><a href="#L-330"><span class="linenos">330</span></a>        <span class="k">if</span> <span class="n">user_input</span> <span class="o">==</span> <span class="s2">&quot;y&quot;</span><span class="p">:</span>
-</span><span id="L-331"><a href="#L-331"><span class="linenos">331</span></a>            <span class="c1"># delete all build files</span>
-</span><span id="L-332"><a href="#L-332"><span class="linenos">332</span></a>            <span class="n">shutil</span><span class="o">.</span><span class="n">rmtree</span><span class="p">(</span><span class="n">VOCAB_PATH</span><span class="p">)</span>
-</span><span id="L-333"><a href="#L-333"><span class="linenos">333</span></a>            <span class="n">create_map_dirs</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-334"><a href="#L-334"><span class="linenos">334</span></a>        <span class="k">elif</span> <span class="n">user_input</span> <span class="o">==</span> <span class="s2">&quot;n&quot;</span><span class="p">:</span>
-</span><span id="L-335"><a href="#L-335"><span class="linenos">335</span></a>            <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Exiting TRUD installation&quot;</span><span class="p">)</span>
-</span><span id="L-336"><a href="#L-336"><span class="linenos">336</span></a>            <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
-</span><span id="L-337"><a href="#L-337"><span class="linenos">337</span></a>    <span class="k">else</span><span class="p">:</span>
-</span><span id="L-338"><a href="#L-338"><span class="linenos">338</span></a>        <span class="n">create_map_dirs</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-339"><a href="#L-339"><span class="linenos">339</span></a>
-</span><span id="L-340"><a href="#L-340"><span class="linenos">340</span></a>    <span class="k">if</span> <span class="n">create_map_dirs</span><span class="p">:</span>
-</span><span id="L-341"><a href="#L-341"><span class="linenos">341</span></a>        <span class="c1"># create maps directories</span>
-</span><span id="L-342"><a href="#L-342"><span class="linenos">342</span></a>        <span class="n">VOCAB_PATH</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">parents</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-343"><a href="#L-343"><span class="linenos">343</span></a>        <span class="n">DOWNLOADS_PATH</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">parents</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-344"><a href="#L-344"><span class="linenos">344</span></a>        <span class="n">PROCESSED_PATH</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">parents</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="L-345"><a href="#L-345"><span class="linenos">345</span></a>
-</span><span id="L-346"><a href="#L-346"><span class="linenos">346</span></a>
-</span><span id="L-347"><a href="#L-347"><span class="linenos">347</span></a><span class="k">def</span><span class="w"> </span><span class="nf">install</span><span class="p">():</span>
-</span><span id="L-348"><a href="#L-348"><span class="linenos">348</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Installing TRUD&quot;</span><span class="p">)</span>
-</span><span id="L-349"><a href="#L-349"><span class="linenos">349</span></a>
-</span><span id="L-350"><a href="#L-350"><span class="linenos">350</span></a>    <span class="c1"># get TRUD api key from environment variable</span>
-</span><span id="L-351"><a href="#L-351"><span class="linenos">351</span></a>    <span class="n">api_key</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">getenv</span><span class="p">(</span><span class="s2">&quot;ACMC_TRUD_API_KEY&quot;</span><span class="p">)</span>
-</span><span id="L-352"><a href="#L-352"><span class="linenos">352</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">api_key</span><span class="p">:</span>
-</span><span id="L-353"><a href="#L-353"><span class="linenos">353</span></a>        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
-</span><span id="L-354"><a href="#L-354"><span class="linenos">354</span></a>            <span class="s2">&quot;TRUD API KEY not found. Set the ACMC_TRUD_API_KEY environment variable.&quot;</span>
-</span><span id="L-355"><a href="#L-355"><span class="linenos">355</span></a>        <span class="p">)</span>
-</span><span id="L-356"><a href="#L-356"><span class="linenos">356</span></a>
-</span><span id="L-357"><a href="#L-357"><span class="linenos">357</span></a>    <span class="n">create_map_directories</span><span class="p">()</span>
-</span><span id="L-358"><a href="#L-358"><span class="linenos">358</span></a>
-</span><span id="L-359"><a href="#L-359"><span class="linenos">359</span></a>    <span class="n">items_latest</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-360"><a href="#L-360"><span class="linenos">360</span></a>    <span class="n">items</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="L-361"><a href="#L-361"><span class="linenos">361</span></a>        <span class="p">{</span>
-</span><span id="L-362"><a href="#L-362"><span class="linenos">362</span></a>            <span class="s2">&quot;id&quot;</span><span class="p">:</span> <span class="mi">259</span><span class="p">,</span>
-</span><span id="L-363"><a href="#L-363"><span class="linenos">363</span></a>            <span class="s2">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;NHS ICD-10 5th Edition XML data files&quot;</span><span class="p">,</span>
-</span><span id="L-364"><a href="#L-364"><span class="linenos">364</span></a>            <span class="s2">&quot;hash&quot;</span><span class="p">:</span> <span class="s2">&quot;A4F7BBA6E86349AADD0F4696C5E91152EB99CC06121427FC359160439B9F883F&quot;</span><span class="p">,</span>
-</span><span id="L-365"><a href="#L-365"><span class="linenos">365</span></a>            <span class="s2">&quot;extract&quot;</span><span class="p">:</span> <span class="n">extract_icd10</span><span class="p">,</span>
-</span><span id="L-366"><a href="#L-366"><span class="linenos">366</span></a>        <span class="p">},</span>
-</span><span id="L-367"><a href="#L-367"><span class="linenos">367</span></a>        <span class="p">{</span>
-</span><span id="L-368"><a href="#L-368"><span class="linenos">368</span></a>            <span class="s2">&quot;id&quot;</span><span class="p">:</span> <span class="mi">119</span><span class="p">,</span>
-</span><span id="L-369"><a href="#L-369"><span class="linenos">369</span></a>            <span class="s2">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;OPCS-4 data files&quot;</span><span class="p">,</span>
-</span><span id="L-370"><a href="#L-370"><span class="linenos">370</span></a>            <span class="s2">&quot;hash&quot;</span><span class="p">:</span> <span class="s2">&quot;0615A2BF43FFEF94517F1D1E0C05493B627839F323F22C52CBCD8B40BF767CD3&quot;</span><span class="p">,</span>
-</span><span id="L-371"><a href="#L-371"><span class="linenos">371</span></a>            <span class="s2">&quot;extract&quot;</span><span class="p">:</span> <span class="n">extract_opsc4</span><span class="p">,</span>
-</span><span id="L-372"><a href="#L-372"><span class="linenos">372</span></a>        <span class="p">},</span>
-</span><span id="L-373"><a href="#L-373"><span class="linenos">373</span></a>        <span class="p">{</span>
-</span><span id="L-374"><a href="#L-374"><span class="linenos">374</span></a>            <span class="s2">&quot;id&quot;</span><span class="p">:</span> <span class="mi">9</span><span class="p">,</span>
-</span><span id="L-375"><a href="#L-375"><span class="linenos">375</span></a>            <span class="s2">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;NHS Data Migration&quot;</span><span class="p">,</span>
-</span><span id="L-376"><a href="#L-376"><span class="linenos">376</span></a>            <span class="s2">&quot;hash&quot;</span><span class="p">:</span> <span class="s2">&quot;D4317B3ADBA6E1247CF17F0B7CD2B8850FD36C0EA2923BF684EA6159F3A54765&quot;</span><span class="p">,</span>
-</span><span id="L-377"><a href="#L-377"><span class="linenos">377</span></a>            <span class="s2">&quot;extract&quot;</span><span class="p">:</span> <span class="n">extract_nhs_data_migrations</span><span class="p">,</span>
-</span><span id="L-378"><a href="#L-378"><span class="linenos">378</span></a>        <span class="p">},</span>
-</span><span id="L-379"><a href="#L-379"><span class="linenos">379</span></a>        <span class="p">{</span>
-</span><span id="L-380"><a href="#L-380"><span class="linenos">380</span></a>            <span class="s2">&quot;id&quot;</span><span class="p">:</span> <span class="mi">8</span><span class="p">,</span>
-</span><span id="L-381"><a href="#L-381"><span class="linenos">381</span></a>            <span class="s2">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;NHS Read Browser&quot;</span><span class="p">,</span>
-</span><span id="L-382"><a href="#L-382"><span class="linenos">382</span></a>            <span class="s2">&quot;hash&quot;</span><span class="p">:</span> <span class="s2">&quot;1FFF2CBF11D0E6D7FC6CC6F13DD52D2F459095C3D83A3F754E6C359F16913C5E&quot;</span><span class="p">,</span>
-</span><span id="L-383"><a href="#L-383"><span class="linenos">383</span></a>            <span class="s2">&quot;extract&quot;</span><span class="p">:</span> <span class="n">extract_nhs_read_browser</span><span class="p">,</span>
-</span><span id="L-384"><a href="#L-384"><span class="linenos">384</span></a>        <span class="p">},</span>
-</span><span id="L-385"><a href="#L-385"><span class="linenos">385</span></a>        <span class="c1"># TODO: Download BNF from separate site? https://www.nhsbsa.nhs.uk/sites/default/files/2024-10/BNF%20Snomed%20Mapping%20data%2020241016.zip</span>
-</span><span id="L-386"><a href="#L-386"><span class="linenos">386</span></a>    <span class="p">]</span>
-</span><span id="L-387"><a href="#L-387"><span class="linenos">387</span></a>
-</span><span id="L-388"><a href="#L-388"><span class="linenos">388</span></a>    <span class="c1"># remove function from items to save versions</span>
-</span><span id="L-389"><a href="#L-389"><span class="linenos">389</span></a>    <span class="n">data</span> <span class="o">=</span> <span class="p">[{</span><span class="n">k</span><span class="p">:</span> <span class="n">v</span> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">d</span><span class="o">.</span><span class="n">items</span><span class="p">()</span> <span class="k">if</span> <span class="n">k</span> <span class="o">!=</span> <span class="s2">&quot;extract&quot;</span><span class="p">}</span> <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">items</span><span class="p">]</span>
-</span><span id="L-390"><a href="#L-390"><span class="linenos">390</span></a>    <span class="c1"># save TRUD versions to file to main record of what was downloaded</span>
-</span><span id="L-391"><a href="#L-391"><span class="linenos">391</span></a>    <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">VERSION_PATH</span><span class="p">,</span> <span class="s2">&quot;w&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
-</span><span id="L-392"><a href="#L-392"><span class="linenos">392</span></a>        <span class="n">yaml</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span>
-</span><span id="L-393"><a href="#L-393"><span class="linenos">393</span></a>            <span class="n">data</span><span class="p">,</span>
-</span><span id="L-394"><a href="#L-394"><span class="linenos">394</span></a>            <span class="n">file</span><span class="p">,</span>
-</span><span id="L-395"><a href="#L-395"><span class="linenos">395</span></a>            <span class="n">Dumper</span><span class="o">=</span><span class="n">util</span><span class="o">.</span><span class="n">QuotedDumper</span><span class="p">,</span>
-</span><span id="L-396"><a href="#L-396"><span class="linenos">396</span></a>            <span class="n">default_flow_style</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-</span><span id="L-397"><a href="#L-397"><span class="linenos">397</span></a>            <span class="n">sort_keys</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-</span><span id="L-398"><a href="#L-398"><span class="linenos">398</span></a>            <span class="n">default_style</span><span class="o">=</span><span class="s1">&#39;&quot;&#39;</span><span class="p">,</span>
-</span><span id="L-399"><a href="#L-399"><span class="linenos">399</span></a>        <span class="p">)</span>
-</span><span id="L-400"><a href="#L-400"><span class="linenos">400</span></a>
-</span><span id="L-401"><a href="#L-401"><span class="linenos">401</span></a>    <span class="c1"># Validate and process each item ID</span>
-</span><span id="L-402"><a href="#L-402"><span class="linenos">402</span></a>    <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">items</span><span class="p">:</span>
-</span><span id="L-403"><a href="#L-403"><span class="linenos">403</span></a>        <span class="n">item_id</span> <span class="o">=</span> <span class="n">item</span><span class="p">[</span><span class="s2">&quot;id&quot;</span><span class="p">]</span>
-</span><span id="L-404"><a href="#L-404"><span class="linenos">404</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;--- </span><span class="si">{</span><span class="n">item</span><span class="p">[</span><span class="s1">&#39;name&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2"> ---&quot;</span><span class="p">)</span>
-</span><span id="L-405"><a href="#L-405"><span class="linenos">405</span></a>
-</span><span id="L-406"><a href="#L-406"><span class="linenos">406</span></a>        <span class="n">releases</span> <span class="o">=</span> <span class="n">get_releases</span><span class="p">(</span><span class="n">item_id</span><span class="p">,</span> <span class="n">API_KEY</span><span class="o">=</span><span class="n">api_key</span><span class="p">,</span> <span class="n">latest</span><span class="o">=</span><span class="n">items_latest</span><span class="p">)</span>
-</span><span id="L-407"><a href="#L-407"><span class="linenos">407</span></a>        <span class="k">if</span> <span class="ow">not</span> <span class="n">releases</span><span class="p">:</span>
-</span><span id="L-408"><a href="#L-408"><span class="linenos">408</span></a>            <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;No releases found for item </span><span class="si">{</span><span class="n">item_id</span><span class="si">}</span><span class="s2">.&quot;</span><span class="p">)</span>
-</span><span id="L-409"><a href="#L-409"><span class="linenos">409</span></a>
-</span><span id="L-410"><a href="#L-410"><span class="linenos">410</span></a>        <span class="c1"># Process each release in reverse order</span>
-</span><span id="L-411"><a href="#L-411"><span class="linenos">411</span></a>        <span class="k">for</span> <span class="n">release_ordinal</span><span class="p">,</span> <span class="n">release</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">releases</span><span class="p">[::</span><span class="o">-</span><span class="mi">1</span><span class="p">],</span> <span class="mi">1</span><span class="p">):</span>
-</span><span id="L-412"><a href="#L-412"><span class="linenos">412</span></a>            <span class="c1"># Download archive file</span>
-</span><span id="L-413"><a href="#L-413"><span class="linenos">413</span></a>            <span class="n">file_destination</span> <span class="o">=</span> <span class="n">download_release_file</span><span class="p">(</span>
-</span><span id="L-414"><a href="#L-414"><span class="linenos">414</span></a>                <span class="n">item_id</span><span class="p">,</span> <span class="n">release_ordinal</span><span class="p">,</span> <span class="n">release</span><span class="p">,</span> <span class="s2">&quot;archive&quot;</span>
-</span><span id="L-415"><a href="#L-415"><span class="linenos">415</span></a>            <span class="p">)</span>
+</span><span id="L-250"><a href="#L-250"><span class="linenos">250</span></a>    <span class="n">output_path</span> <span class="o">=</span> <span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;read3_to_snomed.parquet&quot;</span>
+</span><span id="L-251"><a href="#L-251"><span class="linenos">251</span></a>    <span class="n">df</span><span class="o">.</span><span class="n">to_parquet</span><span class="p">(</span><span class="n">output_path</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="L-252"><a href="#L-252"><span class="linenos">252</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Extracted: </span><span class="si">{</span><span class="n">output_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-253"><a href="#L-253"><span class="linenos">253</span></a>
+</span><span id="L-254"><a href="#L-254"><span class="linenos">254</span></a>
+</span><span id="L-255"><a href="#L-255"><span class="linenos">255</span></a><span class="k">def</span><span class="w"> </span><span class="nf">extract_nhs_read_browser</span><span class="p">():</span>
+</span><span id="L-256"><a href="#L-256"><span class="linenos">256</span></a>    <span class="c1"># r2 only</span>
+</span><span id="L-257"><a href="#L-257"><span class="linenos">257</span></a>    <span class="n">input_path</span> <span class="o">=</span> <span class="n">DOWNLOADS_PATH</span> <span class="o">/</span> <span class="s2">&quot;Standard&quot;</span> <span class="o">/</span> <span class="s2">&quot;V2&quot;</span> <span class="o">/</span> <span class="s2">&quot;ANCESTOR.DBF&quot;</span>
+</span><span id="L-258"><a href="#L-258"><span class="linenos">258</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">simpledbf</span><span class="o">.</span><span class="n">Dbf5</span><span class="p">(</span><span class="n">input_path</span><span class="p">)</span><span class="o">.</span><span class="n">to_dataframe</span><span class="p">()</span>
+</span><span id="L-259"><a href="#L-259"><span class="linenos">259</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">concat</span><span class="p">([</span><span class="n">df</span><span class="p">[</span><span class="s2">&quot;READCODE&quot;</span><span class="p">],</span> <span class="n">df</span><span class="p">[</span><span class="s2">&quot;DESCENDANT&quot;</span><span class="p">]])</span>
+</span><span id="L-260"><a href="#L-260"><span class="linenos">260</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">(</span><span class="n">df</span><span class="o">.</span><span class="n">drop_duplicates</span><span class="p">())</span>
+</span><span id="L-261"><a href="#L-261"><span class="linenos">261</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="mi">0</span><span class="p">:</span> <span class="s2">&quot;read2&quot;</span><span class="p">})</span>
+</span><span id="L-262"><a href="#L-262"><span class="linenos">262</span></a>    <span class="n">output_path</span> <span class="o">=</span> <span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;read2.parquet&quot;</span>
+</span><span id="L-263"><a href="#L-263"><span class="linenos">263</span></a>    <span class="n">df</span><span class="o">.</span><span class="n">to_parquet</span><span class="p">(</span><span class="n">output_path</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="L-264"><a href="#L-264"><span class="linenos">264</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Extracted: </span><span class="si">{</span><span class="n">output_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-265"><a href="#L-265"><span class="linenos">265</span></a>
+</span><span id="L-266"><a href="#L-266"><span class="linenos">266</span></a>    <span class="c1"># r2 -&gt; atc</span>
+</span><span id="L-267"><a href="#L-267"><span class="linenos">267</span></a>    <span class="n">input_path</span> <span class="o">=</span> <span class="n">DOWNLOADS_PATH</span> <span class="o">/</span> <span class="s2">&quot;Standard&quot;</span> <span class="o">/</span> <span class="s2">&quot;V2&quot;</span> <span class="o">/</span> <span class="s2">&quot;ATC.DBF&quot;</span>
+</span><span id="L-268"><a href="#L-268"><span class="linenos">268</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">simpledbf</span><span class="o">.</span><span class="n">Dbf5</span><span class="p">(</span><span class="n">input_path</span><span class="p">)</span><span class="o">.</span><span class="n">to_dataframe</span><span class="p">()</span>
+</span><span id="L-269"><a href="#L-269"><span class="linenos">269</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[[</span><span class="s2">&quot;READCODE&quot;</span><span class="p">,</span> <span class="s2">&quot;ATC&quot;</span><span class="p">]]</span>
+</span><span id="L-270"><a href="#L-270"><span class="linenos">270</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;READCODE&quot;</span><span class="p">:</span> <span class="s2">&quot;read2&quot;</span><span class="p">,</span> <span class="s2">&quot;ATC&quot;</span><span class="p">:</span> <span class="s2">&quot;atc&quot;</span><span class="p">})</span>
+</span><span id="L-271"><a href="#L-271"><span class="linenos">271</span></a>    <span class="n">output_path</span> <span class="o">=</span> <span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;read2_to_atc.parquet&quot;</span>
+</span><span id="L-272"><a href="#L-272"><span class="linenos">272</span></a>    <span class="n">df</span><span class="o">.</span><span class="n">to_parquet</span><span class="p">(</span><span class="n">output_path</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="L-273"><a href="#L-273"><span class="linenos">273</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Extracted: </span><span class="si">{</span><span class="n">output_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-274"><a href="#L-274"><span class="linenos">274</span></a>
+</span><span id="L-275"><a href="#L-275"><span class="linenos">275</span></a>    <span class="c1"># r2 -&gt; icd10</span>
+</span><span id="L-276"><a href="#L-276"><span class="linenos">276</span></a>    <span class="n">input_path</span> <span class="o">=</span> <span class="n">DOWNLOADS_PATH</span> <span class="o">/</span> <span class="s2">&quot;Standard&quot;</span> <span class="o">/</span> <span class="s2">&quot;V2&quot;</span> <span class="o">/</span> <span class="s2">&quot;ICD10.DBF&quot;</span>
+</span><span id="L-277"><a href="#L-277"><span class="linenos">277</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">simpledbf</span><span class="o">.</span><span class="n">Dbf5</span><span class="p">(</span><span class="n">input_path</span><span class="p">)</span><span class="o">.</span><span class="n">to_dataframe</span><span class="p">()</span>
+</span><span id="L-278"><a href="#L-278"><span class="linenos">278</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[[</span><span class="s2">&quot;READ_CODE&quot;</span><span class="p">,</span> <span class="s2">&quot;TARG_CODE&quot;</span><span class="p">]]</span>
+</span><span id="L-279"><a href="#L-279"><span class="linenos">279</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;READ_CODE&quot;</span><span class="p">:</span> <span class="s2">&quot;read2&quot;</span><span class="p">,</span> <span class="s2">&quot;TARG_CODE&quot;</span><span class="p">:</span> <span class="s2">&quot;icd10&quot;</span><span class="p">})</span>
+</span><span id="L-280"><a href="#L-280"><span class="linenos">280</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="o">~</span><span class="n">df</span><span class="p">[</span><span class="s2">&quot;icd10&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="s2">&quot;^.*-.*$&quot;</span><span class="p">)]</span>  <span class="c1"># remove codes with &#39;-&#39;</span>
+</span><span id="L-281"><a href="#L-281"><span class="linenos">281</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="o">~</span><span class="n">df</span><span class="p">[</span><span class="s2">&quot;read2&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="s2">&quot;^.*-.*$&quot;</span><span class="p">)]</span>  <span class="c1"># remove codes with &#39;-&#39;</span>
+</span><span id="L-282"><a href="#L-282"><span class="linenos">282</span></a>    <span class="n">output_path</span> <span class="o">=</span> <span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;read2_to_icd10.parquet&quot;</span>
+</span><span id="L-283"><a href="#L-283"><span class="linenos">283</span></a>    <span class="n">df</span><span class="o">.</span><span class="n">to_parquet</span><span class="p">(</span><span class="n">output_path</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="L-284"><a href="#L-284"><span class="linenos">284</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Extracted: </span><span class="si">{</span><span class="n">output_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-285"><a href="#L-285"><span class="linenos">285</span></a>
+</span><span id="L-286"><a href="#L-286"><span class="linenos">286</span></a>    <span class="c1"># r2 -&gt; opcs4</span>
+</span><span id="L-287"><a href="#L-287"><span class="linenos">287</span></a>    <span class="n">input_path</span> <span class="o">=</span> <span class="n">DOWNLOADS_PATH</span> <span class="o">/</span> <span class="s2">&quot;Standard&quot;</span> <span class="o">/</span> <span class="s2">&quot;V2&quot;</span> <span class="o">/</span> <span class="s2">&quot;OPCS4V3.DBF&quot;</span>
+</span><span id="L-288"><a href="#L-288"><span class="linenos">288</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">simpledbf</span><span class="o">.</span><span class="n">Dbf5</span><span class="p">(</span><span class="n">input_path</span><span class="p">)</span><span class="o">.</span><span class="n">to_dataframe</span><span class="p">()</span>
+</span><span id="L-289"><a href="#L-289"><span class="linenos">289</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[[</span><span class="s2">&quot;READ_CODE&quot;</span><span class="p">,</span> <span class="s2">&quot;TARG_CODE&quot;</span><span class="p">]]</span>
+</span><span id="L-290"><a href="#L-290"><span class="linenos">290</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;READ_CODE&quot;</span><span class="p">:</span> <span class="s2">&quot;read2&quot;</span><span class="p">,</span> <span class="s2">&quot;TARG_CODE&quot;</span><span class="p">:</span> <span class="s2">&quot;opcs4&quot;</span><span class="p">})</span>
+</span><span id="L-291"><a href="#L-291"><span class="linenos">291</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="o">~</span><span class="n">df</span><span class="p">[</span><span class="s2">&quot;opcs4&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="s2">&quot;^.*-.*$&quot;</span><span class="p">)]</span>  <span class="c1"># remove codes with &#39;-&#39;</span>
+</span><span id="L-292"><a href="#L-292"><span class="linenos">292</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="o">~</span><span class="n">df</span><span class="p">[</span><span class="s2">&quot;read2&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="s2">&quot;^.*-.*$&quot;</span><span class="p">)]</span>  <span class="c1"># remove codes with &#39;-&#39;</span>
+</span><span id="L-293"><a href="#L-293"><span class="linenos">293</span></a>    <span class="n">output_path</span> <span class="o">=</span> <span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;read2_to_opcs4.parquet&quot;</span>
+</span><span id="L-294"><a href="#L-294"><span class="linenos">294</span></a>    <span class="n">df</span><span class="o">.</span><span class="n">to_parquet</span><span class="p">(</span><span class="n">output_path</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="L-295"><a href="#L-295"><span class="linenos">295</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Extracted: </span><span class="si">{</span><span class="n">output_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-296"><a href="#L-296"><span class="linenos">296</span></a>
+</span><span id="L-297"><a href="#L-297"><span class="linenos">297</span></a>    <span class="c1"># r3 only</span>
+</span><span id="L-298"><a href="#L-298"><span class="linenos">298</span></a>    <span class="n">input_path</span> <span class="o">=</span> <span class="n">DOWNLOADS_PATH</span> <span class="o">/</span> <span class="s2">&quot;Standard&quot;</span> <span class="o">/</span> <span class="s2">&quot;V3&quot;</span> <span class="o">/</span> <span class="s2">&quot;ANCESTOR.DBF&quot;</span>
+</span><span id="L-299"><a href="#L-299"><span class="linenos">299</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">simpledbf</span><span class="o">.</span><span class="n">Dbf5</span><span class="p">(</span><span class="n">input_path</span><span class="p">)</span><span class="o">.</span><span class="n">to_dataframe</span><span class="p">()</span>
+</span><span id="L-300"><a href="#L-300"><span class="linenos">300</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">concat</span><span class="p">([</span><span class="n">df</span><span class="p">[</span><span class="s2">&quot;READCODE&quot;</span><span class="p">],</span> <span class="n">df</span><span class="p">[</span><span class="s2">&quot;DESCENDANT&quot;</span><span class="p">]])</span>
+</span><span id="L-301"><a href="#L-301"><span class="linenos">301</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">(</span><span class="n">df</span><span class="o">.</span><span class="n">drop_duplicates</span><span class="p">())</span>
+</span><span id="L-302"><a href="#L-302"><span class="linenos">302</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="mi">0</span><span class="p">:</span> <span class="s2">&quot;read3&quot;</span><span class="p">})</span>
+</span><span id="L-303"><a href="#L-303"><span class="linenos">303</span></a>    <span class="n">output_path</span> <span class="o">=</span> <span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;read3.parquet&quot;</span>
+</span><span id="L-304"><a href="#L-304"><span class="linenos">304</span></a>    <span class="n">df</span><span class="o">.</span><span class="n">to_parquet</span><span class="p">(</span><span class="n">output_path</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="L-305"><a href="#L-305"><span class="linenos">305</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Extracted: </span><span class="si">{</span><span class="n">output_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-306"><a href="#L-306"><span class="linenos">306</span></a>
+</span><span id="L-307"><a href="#L-307"><span class="linenos">307</span></a>    <span class="c1"># r3 -&gt; icd10</span>
+</span><span id="L-308"><a href="#L-308"><span class="linenos">308</span></a>    <span class="n">input_path</span> <span class="o">=</span> <span class="n">DOWNLOADS_PATH</span> <span class="o">/</span> <span class="s2">&quot;Standard&quot;</span> <span class="o">/</span> <span class="s2">&quot;V3&quot;</span> <span class="o">/</span> <span class="s2">&quot;ICD10.DBF&quot;</span>
+</span><span id="L-309"><a href="#L-309"><span class="linenos">309</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">simpledbf</span><span class="o">.</span><span class="n">Dbf5</span><span class="p">(</span><span class="n">input_path</span><span class="p">)</span><span class="o">.</span><span class="n">to_dataframe</span><span class="p">()</span>
+</span><span id="L-310"><a href="#L-310"><span class="linenos">310</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[[</span><span class="s2">&quot;READ_CODE&quot;</span><span class="p">,</span> <span class="s2">&quot;TARG_CODE&quot;</span><span class="p">]]</span>
+</span><span id="L-311"><a href="#L-311"><span class="linenos">311</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;READ_CODE&quot;</span><span class="p">:</span> <span class="s2">&quot;read3&quot;</span><span class="p">,</span> <span class="s2">&quot;TARG_CODE&quot;</span><span class="p">:</span> <span class="s2">&quot;icd10&quot;</span><span class="p">})</span>
+</span><span id="L-312"><a href="#L-312"><span class="linenos">312</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="o">~</span><span class="n">df</span><span class="p">[</span><span class="s2">&quot;icd10&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="s2">&quot;^.*-.*$&quot;</span><span class="p">)]</span>  <span class="c1"># remove codes with &#39;-&#39;</span>
+</span><span id="L-313"><a href="#L-313"><span class="linenos">313</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="o">~</span><span class="n">df</span><span class="p">[</span><span class="s2">&quot;read3&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="s2">&quot;^.*-.*$&quot;</span><span class="p">)]</span>  <span class="c1"># remove codes with &#39;-&#39;</span>
+</span><span id="L-314"><a href="#L-314"><span class="linenos">314</span></a>    <span class="n">output_path</span> <span class="o">=</span> <span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;read3_to_icd10.parquet&quot;</span>
+</span><span id="L-315"><a href="#L-315"><span class="linenos">315</span></a>    <span class="n">df</span><span class="o">.</span><span class="n">to_parquet</span><span class="p">(</span><span class="n">output_path</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="L-316"><a href="#L-316"><span class="linenos">316</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Extracted: </span><span class="si">{</span><span class="n">output_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-317"><a href="#L-317"><span class="linenos">317</span></a>
+</span><span id="L-318"><a href="#L-318"><span class="linenos">318</span></a>    <span class="c1"># r3 -&gt; icd9</span>
+</span><span id="L-319"><a href="#L-319"><span class="linenos">319</span></a>    <span class="c1"># dbf = simpledbf.Dbf5(&#39;build/maps/downloads/Standard/V3/ICD9V3.DBF&#39;)</span>
+</span><span id="L-320"><a href="#L-320"><span class="linenos">320</span></a>
+</span><span id="L-321"><a href="#L-321"><span class="linenos">321</span></a>    <span class="c1"># r3 -&gt; opcs4</span>
+</span><span id="L-322"><a href="#L-322"><span class="linenos">322</span></a>    <span class="n">input_path</span> <span class="o">=</span> <span class="n">DOWNLOADS_PATH</span> <span class="o">/</span> <span class="s2">&quot;Standard&quot;</span> <span class="o">/</span> <span class="s2">&quot;V3&quot;</span> <span class="o">/</span> <span class="s2">&quot;OPCS4V3.DBF&quot;</span>
+</span><span id="L-323"><a href="#L-323"><span class="linenos">323</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">simpledbf</span><span class="o">.</span><span class="n">Dbf5</span><span class="p">(</span><span class="n">input_path</span><span class="p">)</span><span class="o">.</span><span class="n">to_dataframe</span><span class="p">()</span>
+</span><span id="L-324"><a href="#L-324"><span class="linenos">324</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[[</span><span class="s2">&quot;READ_CODE&quot;</span><span class="p">,</span> <span class="s2">&quot;TARG_CODE&quot;</span><span class="p">]]</span>
+</span><span id="L-325"><a href="#L-325"><span class="linenos">325</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;READ_CODE&quot;</span><span class="p">:</span> <span class="s2">&quot;read3&quot;</span><span class="p">,</span> <span class="s2">&quot;TARG_CODE&quot;</span><span class="p">:</span> <span class="s2">&quot;opcs4&quot;</span><span class="p">})</span>
+</span><span id="L-326"><a href="#L-326"><span class="linenos">326</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="o">~</span><span class="n">df</span><span class="p">[</span><span class="s2">&quot;opcs4&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="s2">&quot;^.*-.*$&quot;</span><span class="p">)]</span>  <span class="c1"># remove codes with &#39;-&#39;</span>
+</span><span id="L-327"><a href="#L-327"><span class="linenos">327</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="o">~</span><span class="n">df</span><span class="p">[</span><span class="s2">&quot;read3&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="s2">&quot;^.*-.*$&quot;</span><span class="p">)]</span>  <span class="c1"># remove codes with &#39;-&#39;</span>
+</span><span id="L-328"><a href="#L-328"><span class="linenos">328</span></a>    <span class="n">output_path</span> <span class="o">=</span> <span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;read3_to_opcs4.parquet&quot;</span>
+</span><span id="L-329"><a href="#L-329"><span class="linenos">329</span></a>    <span class="n">df</span><span class="o">.</span><span class="n">to_parquet</span><span class="p">(</span><span class="n">output_path</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="L-330"><a href="#L-330"><span class="linenos">330</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Extracted: </span><span class="si">{</span><span class="n">output_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="L-331"><a href="#L-331"><span class="linenos">331</span></a>
+</span><span id="L-332"><a href="#L-332"><span class="linenos">332</span></a>
+</span><span id="L-333"><a href="#L-333"><span class="linenos">333</span></a><span class="k">def</span><span class="w"> </span><span class="nf">create_map_directories</span><span class="p">():</span>
+</span><span id="L-334"><a href="#L-334"><span class="linenos">334</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Create map directories.&quot;&quot;&quot;</span>
+</span><span id="L-335"><a href="#L-335"><span class="linenos">335</span></a>
+</span><span id="L-336"><a href="#L-336"><span class="linenos">336</span></a>    <span class="c1"># Check if build directory exists</span>
+</span><span id="L-337"><a href="#L-337"><span class="linenos">337</span></a>    <span class="n">create_map_dirs</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="L-338"><a href="#L-338"><span class="linenos">338</span></a>    <span class="k">if</span> <span class="n">VOCAB_PATH</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
+</span><span id="L-339"><a href="#L-339"><span class="linenos">339</span></a>        <span class="n">user_input</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="L-340"><a href="#L-340"><span class="linenos">340</span></a>            <span class="nb">input</span><span class="p">(</span>
+</span><span id="L-341"><a href="#L-341"><span class="linenos">341</span></a>                <span class="sa">f</span><span class="s2">&quot;The map directory </span><span class="si">{</span><span class="n">VOCAB_PATH</span><span class="si">}</span><span class="s2"> already exists. Do you want to download and process trud data again? (y/n): &quot;</span>
+</span><span id="L-342"><a href="#L-342"><span class="linenos">342</span></a>            <span class="p">)</span>
+</span><span id="L-343"><a href="#L-343"><span class="linenos">343</span></a>            <span class="o">.</span><span class="n">strip</span><span class="p">()</span>
+</span><span id="L-344"><a href="#L-344"><span class="linenos">344</span></a>            <span class="o">.</span><span class="n">lower</span><span class="p">()</span>
+</span><span id="L-345"><a href="#L-345"><span class="linenos">345</span></a>        <span class="p">)</span>
+</span><span id="L-346"><a href="#L-346"><span class="linenos">346</span></a>        <span class="k">if</span> <span class="n">user_input</span> <span class="o">==</span> <span class="s2">&quot;y&quot;</span><span class="p">:</span>
+</span><span id="L-347"><a href="#L-347"><span class="linenos">347</span></a>            <span class="c1"># delete all build files</span>
+</span><span id="L-348"><a href="#L-348"><span class="linenos">348</span></a>            <span class="n">shutil</span><span class="o">.</span><span class="n">rmtree</span><span class="p">(</span><span class="n">VOCAB_PATH</span><span class="p">)</span>
+</span><span id="L-349"><a href="#L-349"><span class="linenos">349</span></a>            <span class="n">create_map_dirs</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-350"><a href="#L-350"><span class="linenos">350</span></a>        <span class="k">elif</span> <span class="n">user_input</span> <span class="o">==</span> <span class="s2">&quot;n&quot;</span><span class="p">:</span>
+</span><span id="L-351"><a href="#L-351"><span class="linenos">351</span></a>            <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Exiting TRUD installation&quot;</span><span class="p">)</span>
+</span><span id="L-352"><a href="#L-352"><span class="linenos">352</span></a>            <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
+</span><span id="L-353"><a href="#L-353"><span class="linenos">353</span></a>    <span class="k">else</span><span class="p">:</span>
+</span><span id="L-354"><a href="#L-354"><span class="linenos">354</span></a>        <span class="n">create_map_dirs</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-355"><a href="#L-355"><span class="linenos">355</span></a>
+</span><span id="L-356"><a href="#L-356"><span class="linenos">356</span></a>    <span class="k">if</span> <span class="n">create_map_dirs</span><span class="p">:</span>
+</span><span id="L-357"><a href="#L-357"><span class="linenos">357</span></a>        <span class="c1"># create maps directories</span>
+</span><span id="L-358"><a href="#L-358"><span class="linenos">358</span></a>        <span class="n">VOCAB_PATH</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">parents</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-359"><a href="#L-359"><span class="linenos">359</span></a>        <span class="n">DOWNLOADS_PATH</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">parents</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-360"><a href="#L-360"><span class="linenos">360</span></a>        <span class="n">PROCESSED_PATH</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">parents</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="L-361"><a href="#L-361"><span class="linenos">361</span></a>
+</span><span id="L-362"><a href="#L-362"><span class="linenos">362</span></a>
+</span><span id="L-363"><a href="#L-363"><span class="linenos">363</span></a><span class="k">def</span><span class="w"> </span><span class="nf">install</span><span class="p">():</span>
+</span><span id="L-364"><a href="#L-364"><span class="linenos">364</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Installing TRUD&quot;</span><span class="p">)</span>
+</span><span id="L-365"><a href="#L-365"><span class="linenos">365</span></a>
+</span><span id="L-366"><a href="#L-366"><span class="linenos">366</span></a>    <span class="c1"># get TRUD api key from environment variable</span>
+</span><span id="L-367"><a href="#L-367"><span class="linenos">367</span></a>    <span class="n">api_key</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">getenv</span><span class="p">(</span><span class="s2">&quot;ACMC_TRUD_API_KEY&quot;</span><span class="p">)</span>
+</span><span id="L-368"><a href="#L-368"><span class="linenos">368</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">api_key</span><span class="p">:</span>
+</span><span id="L-369"><a href="#L-369"><span class="linenos">369</span></a>        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
+</span><span id="L-370"><a href="#L-370"><span class="linenos">370</span></a>            <span class="s2">&quot;TRUD API KEY not found. Set the ACMC_TRUD_API_KEY environment variable.&quot;</span>
+</span><span id="L-371"><a href="#L-371"><span class="linenos">371</span></a>        <span class="p">)</span>
+</span><span id="L-372"><a href="#L-372"><span class="linenos">372</span></a>
+</span><span id="L-373"><a href="#L-373"><span class="linenos">373</span></a>    <span class="n">create_map_directories</span><span class="p">()</span>
+</span><span id="L-374"><a href="#L-374"><span class="linenos">374</span></a>
+</span><span id="L-375"><a href="#L-375"><span class="linenos">375</span></a>    <span class="n">items_latest</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="L-376"><a href="#L-376"><span class="linenos">376</span></a>    <span class="n">items</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="L-377"><a href="#L-377"><span class="linenos">377</span></a>        <span class="p">{</span>
+</span><span id="L-378"><a href="#L-378"><span class="linenos">378</span></a>            <span class="s2">&quot;id&quot;</span><span class="p">:</span> <span class="mi">259</span><span class="p">,</span>
+</span><span id="L-379"><a href="#L-379"><span class="linenos">379</span></a>            <span class="s2">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;NHS ICD-10 5th Edition XML data files&quot;</span><span class="p">,</span>
+</span><span id="L-380"><a href="#L-380"><span class="linenos">380</span></a>            <span class="s2">&quot;hash&quot;</span><span class="p">:</span> <span class="s2">&quot;A4F7BBA6E86349AADD0F4696C5E91152EB99CC06121427FC359160439B9F883F&quot;</span><span class="p">,</span>
+</span><span id="L-381"><a href="#L-381"><span class="linenos">381</span></a>            <span class="s2">&quot;extract&quot;</span><span class="p">:</span> <span class="n">extract_icd10</span><span class="p">,</span>
+</span><span id="L-382"><a href="#L-382"><span class="linenos">382</span></a>        <span class="p">},</span>
+</span><span id="L-383"><a href="#L-383"><span class="linenos">383</span></a>        <span class="p">{</span>
+</span><span id="L-384"><a href="#L-384"><span class="linenos">384</span></a>            <span class="s2">&quot;id&quot;</span><span class="p">:</span> <span class="mi">119</span><span class="p">,</span>
+</span><span id="L-385"><a href="#L-385"><span class="linenos">385</span></a>            <span class="s2">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;OPCS-4 data files&quot;</span><span class="p">,</span>
+</span><span id="L-386"><a href="#L-386"><span class="linenos">386</span></a>            <span class="s2">&quot;hash&quot;</span><span class="p">:</span> <span class="s2">&quot;0615A2BF43FFEF94517F1D1E0C05493B627839F323F22C52CBCD8B40BF767CD3&quot;</span><span class="p">,</span>
+</span><span id="L-387"><a href="#L-387"><span class="linenos">387</span></a>            <span class="s2">&quot;extract&quot;</span><span class="p">:</span> <span class="n">extract_opsc4</span><span class="p">,</span>
+</span><span id="L-388"><a href="#L-388"><span class="linenos">388</span></a>        <span class="p">},</span>
+</span><span id="L-389"><a href="#L-389"><span class="linenos">389</span></a>        <span class="p">{</span>
+</span><span id="L-390"><a href="#L-390"><span class="linenos">390</span></a>            <span class="s2">&quot;id&quot;</span><span class="p">:</span> <span class="mi">9</span><span class="p">,</span>
+</span><span id="L-391"><a href="#L-391"><span class="linenos">391</span></a>            <span class="s2">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;NHS Data Migration&quot;</span><span class="p">,</span>
+</span><span id="L-392"><a href="#L-392"><span class="linenos">392</span></a>            <span class="s2">&quot;hash&quot;</span><span class="p">:</span> <span class="s2">&quot;D4317B3ADBA6E1247CF17F0B7CD2B8850FD36C0EA2923BF684EA6159F3A54765&quot;</span><span class="p">,</span>
+</span><span id="L-393"><a href="#L-393"><span class="linenos">393</span></a>            <span class="s2">&quot;extract&quot;</span><span class="p">:</span> <span class="n">extract_nhs_data_migrations</span><span class="p">,</span>
+</span><span id="L-394"><a href="#L-394"><span class="linenos">394</span></a>        <span class="p">},</span>
+</span><span id="L-395"><a href="#L-395"><span class="linenos">395</span></a>        <span class="p">{</span>
+</span><span id="L-396"><a href="#L-396"><span class="linenos">396</span></a>            <span class="s2">&quot;id&quot;</span><span class="p">:</span> <span class="mi">8</span><span class="p">,</span>
+</span><span id="L-397"><a href="#L-397"><span class="linenos">397</span></a>            <span class="s2">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;NHS Read Browser&quot;</span><span class="p">,</span>
+</span><span id="L-398"><a href="#L-398"><span class="linenos">398</span></a>            <span class="s2">&quot;hash&quot;</span><span class="p">:</span> <span class="s2">&quot;1FFF2CBF11D0E6D7FC6CC6F13DD52D2F459095C3D83A3F754E6C359F16913C5E&quot;</span><span class="p">,</span>
+</span><span id="L-399"><a href="#L-399"><span class="linenos">399</span></a>            <span class="s2">&quot;extract&quot;</span><span class="p">:</span> <span class="n">extract_nhs_read_browser</span><span class="p">,</span>
+</span><span id="L-400"><a href="#L-400"><span class="linenos">400</span></a>        <span class="p">},</span>
+</span><span id="L-401"><a href="#L-401"><span class="linenos">401</span></a>        <span class="c1"># TODO: Download BNF from separate site? https://www.nhsbsa.nhs.uk/sites/default/files/2024-10/BNF%20Snomed%20Mapping%20data%2020241016.zip</span>
+</span><span id="L-402"><a href="#L-402"><span class="linenos">402</span></a>    <span class="p">]</span>
+</span><span id="L-403"><a href="#L-403"><span class="linenos">403</span></a>
+</span><span id="L-404"><a href="#L-404"><span class="linenos">404</span></a>    <span class="c1"># remove function from items to save versions</span>
+</span><span id="L-405"><a href="#L-405"><span class="linenos">405</span></a>    <span class="n">data</span> <span class="o">=</span> <span class="p">[{</span><span class="n">k</span><span class="p">:</span> <span class="n">v</span> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">d</span><span class="o">.</span><span class="n">items</span><span class="p">()</span> <span class="k">if</span> <span class="n">k</span> <span class="o">!=</span> <span class="s2">&quot;extract&quot;</span><span class="p">}</span> <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">items</span><span class="p">]</span>
+</span><span id="L-406"><a href="#L-406"><span class="linenos">406</span></a>    <span class="c1"># save TRUD versions to file to main record of what was downloaded</span>
+</span><span id="L-407"><a href="#L-407"><span class="linenos">407</span></a>    <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">VERSION_PATH</span><span class="p">,</span> <span class="s2">&quot;w&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
+</span><span id="L-408"><a href="#L-408"><span class="linenos">408</span></a>        <span class="n">yaml</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span>
+</span><span id="L-409"><a href="#L-409"><span class="linenos">409</span></a>            <span class="n">data</span><span class="p">,</span>
+</span><span id="L-410"><a href="#L-410"><span class="linenos">410</span></a>            <span class="n">file</span><span class="p">,</span>
+</span><span id="L-411"><a href="#L-411"><span class="linenos">411</span></a>            <span class="n">Dumper</span><span class="o">=</span><span class="n">util</span><span class="o">.</span><span class="n">QuotedDumper</span><span class="p">,</span>
+</span><span id="L-412"><a href="#L-412"><span class="linenos">412</span></a>            <span class="n">default_flow_style</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="L-413"><a href="#L-413"><span class="linenos">413</span></a>            <span class="n">sort_keys</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="L-414"><a href="#L-414"><span class="linenos">414</span></a>            <span class="n">default_style</span><span class="o">=</span><span class="s1">&#39;&quot;&#39;</span><span class="p">,</span>
+</span><span id="L-415"><a href="#L-415"><span class="linenos">415</span></a>        <span class="p">)</span>
 </span><span id="L-416"><a href="#L-416"><span class="linenos">416</span></a>
-</span><span id="L-417"><a href="#L-417"><span class="linenos">417</span></a>            <span class="c1"># Optional files</span>
-</span><span id="L-418"><a href="#L-418"><span class="linenos">418</span></a>            <span class="c1"># if items.checksum:</span>
-</span><span id="L-419"><a href="#L-419"><span class="linenos">419</span></a>            <span class="c1">#     download_release_file(item[&quot;id&quot;], release_ordinal, release, &quot;checksum&quot;)</span>
-</span><span id="L-420"><a href="#L-420"><span class="linenos">420</span></a>            <span class="c1"># if items.signature:</span>
-</span><span id="L-421"><a href="#L-421"><span class="linenos">421</span></a>            <span class="c1">#     download_release_file(item[&quot;id&quot;], release_ordinal, release, &quot;signature&quot;)</span>
-</span><span id="L-422"><a href="#L-422"><span class="linenos">422</span></a>            <span class="c1"># if items.public_key:</span>
-</span><span id="L-423"><a href="#L-423"><span class="linenos">423</span></a>            <span class="c1">#     download_release_file(item[&quot;id&quot;], release_ordinal, release, &quot;publicKey&quot;, &quot;public key&quot;)</span>
-</span><span id="L-424"><a href="#L-424"><span class="linenos">424</span></a>
-</span><span id="L-425"><a href="#L-425"><span class="linenos">425</span></a>            <span class="c1"># Verify Hash if available</span>
-</span><span id="L-426"><a href="#L-426"><span class="linenos">426</span></a>            <span class="k">if</span> <span class="s2">&quot;hash&quot;</span> <span class="ow">in</span> <span class="n">item</span><span class="p">:</span>
-</span><span id="L-427"><a href="#L-427"><span class="linenos">427</span></a>                <span class="n">validate_download_hash</span><span class="p">(</span><span class="n">file_destination</span><span class="p">,</span> <span class="n">item</span><span class="p">[</span><span class="s2">&quot;hash&quot;</span><span class="p">])</span>
-</span><span id="L-428"><a href="#L-428"><span class="linenos">428</span></a>
-</span><span id="L-429"><a href="#L-429"><span class="linenos">429</span></a>            <span class="c1"># Unzip downloaded .zip</span>
-</span><span id="L-430"><a href="#L-430"><span class="linenos">430</span></a>            <span class="n">unzip_download</span><span class="p">(</span><span class="n">file_destination</span><span class="p">)</span>
-</span><span id="L-431"><a href="#L-431"><span class="linenos">431</span></a>
-</span><span id="L-432"><a href="#L-432"><span class="linenos">432</span></a>            <span class="c1"># Extract Tables to parquet</span>
-</span><span id="L-433"><a href="#L-433"><span class="linenos">433</span></a>            <span class="k">if</span> <span class="s2">&quot;extract&quot;</span> <span class="ow">in</span> <span class="n">item</span><span class="p">:</span>
-</span><span id="L-434"><a href="#L-434"><span class="linenos">434</span></a>                <span class="n">item</span><span class="p">[</span><span class="s2">&quot;extract&quot;</span><span class="p">]()</span>
-</span><span id="L-435"><a href="#L-435"><span class="linenos">435</span></a>
-</span><span id="L-436"><a href="#L-436"><span class="linenos">436</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Downloaded </span><span class="si">{</span><span class="n">release_ordinal</span><span class="si">}</span><span class="s2"> release(s) for item </span><span class="si">{</span><span class="n">item_id</span><span class="si">}</span><span class="s2">.&quot;</span><span class="p">)</span>
-</span><span id="L-437"><a href="#L-437"><span class="linenos">437</span></a>
-</span><span id="L-438"><a href="#L-438"><span class="linenos">438</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;TRUD installation completed&quot;</span><span class="p">)</span>
+</span><span id="L-417"><a href="#L-417"><span class="linenos">417</span></a>    <span class="c1"># Validate and process each item ID</span>
+</span><span id="L-418"><a href="#L-418"><span class="linenos">418</span></a>    <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">items</span><span class="p">:</span>
+</span><span id="L-419"><a href="#L-419"><span class="linenos">419</span></a>        <span class="n">item_id</span> <span class="o">=</span> <span class="n">item</span><span class="p">[</span><span class="s2">&quot;id&quot;</span><span class="p">]</span>
+</span><span id="L-420"><a href="#L-420"><span class="linenos">420</span></a>        <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;--- </span><span class="si">{</span><span class="n">item</span><span class="p">[</span><span class="s1">&#39;name&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2"> ---&quot;</span><span class="p">)</span>
+</span><span id="L-421"><a href="#L-421"><span class="linenos">421</span></a>
+</span><span id="L-422"><a href="#L-422"><span class="linenos">422</span></a>        <span class="n">releases</span> <span class="o">=</span> <span class="n">get_releases</span><span class="p">(</span><span class="n">item_id</span><span class="p">,</span> <span class="n">API_KEY</span><span class="o">=</span><span class="n">api_key</span><span class="p">,</span> <span class="n">latest</span><span class="o">=</span><span class="n">items_latest</span><span class="p">)</span>
+</span><span id="L-423"><a href="#L-423"><span class="linenos">423</span></a>        <span class="k">if</span> <span class="ow">not</span> <span class="n">releases</span><span class="p">:</span>
+</span><span id="L-424"><a href="#L-424"><span class="linenos">424</span></a>            <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;No releases found for item </span><span class="si">{</span><span class="n">item_id</span><span class="si">}</span><span class="s2">.&quot;</span><span class="p">)</span>
+</span><span id="L-425"><a href="#L-425"><span class="linenos">425</span></a>
+</span><span id="L-426"><a href="#L-426"><span class="linenos">426</span></a>        <span class="c1"># Process each release in reverse order</span>
+</span><span id="L-427"><a href="#L-427"><span class="linenos">427</span></a>        <span class="k">for</span> <span class="n">release_ordinal</span><span class="p">,</span> <span class="n">release</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">releases</span><span class="p">[::</span><span class="o">-</span><span class="mi">1</span><span class="p">],</span> <span class="mi">1</span><span class="p">):</span>
+</span><span id="L-428"><a href="#L-428"><span class="linenos">428</span></a>            <span class="c1"># Download archive file</span>
+</span><span id="L-429"><a href="#L-429"><span class="linenos">429</span></a>            <span class="n">file_destination</span> <span class="o">=</span> <span class="n">download_release_file</span><span class="p">(</span>
+</span><span id="L-430"><a href="#L-430"><span class="linenos">430</span></a>                <span class="n">item_id</span><span class="p">,</span> <span class="n">release_ordinal</span><span class="p">,</span> <span class="n">release</span><span class="p">,</span> <span class="s2">&quot;archive&quot;</span>
+</span><span id="L-431"><a href="#L-431"><span class="linenos">431</span></a>            <span class="p">)</span>
+</span><span id="L-432"><a href="#L-432"><span class="linenos">432</span></a>
+</span><span id="L-433"><a href="#L-433"><span class="linenos">433</span></a>            <span class="c1"># Optional files</span>
+</span><span id="L-434"><a href="#L-434"><span class="linenos">434</span></a>            <span class="c1"># if items.checksum:</span>
+</span><span id="L-435"><a href="#L-435"><span class="linenos">435</span></a>            <span class="c1">#     download_release_file(item[&quot;id&quot;], release_ordinal, release, &quot;checksum&quot;)</span>
+</span><span id="L-436"><a href="#L-436"><span class="linenos">436</span></a>            <span class="c1"># if items.signature:</span>
+</span><span id="L-437"><a href="#L-437"><span class="linenos">437</span></a>            <span class="c1">#     download_release_file(item[&quot;id&quot;], release_ordinal, release, &quot;signature&quot;)</span>
+</span><span id="L-438"><a href="#L-438"><span class="linenos">438</span></a>            <span class="c1"># if items.public_key:</span>
+</span><span id="L-439"><a href="#L-439"><span class="linenos">439</span></a>            <span class="c1">#     download_release_file(item[&quot;id&quot;], release_ordinal, release, &quot;publicKey&quot;, &quot;public key&quot;)</span>
+</span><span id="L-440"><a href="#L-440"><span class="linenos">440</span></a>
+</span><span id="L-441"><a href="#L-441"><span class="linenos">441</span></a>            <span class="c1"># Verify Hash if available</span>
+</span><span id="L-442"><a href="#L-442"><span class="linenos">442</span></a>            <span class="k">if</span> <span class="s2">&quot;hash&quot;</span> <span class="ow">in</span> <span class="n">item</span><span class="p">:</span>
+</span><span id="L-443"><a href="#L-443"><span class="linenos">443</span></a>                <span class="n">validate_download_hash</span><span class="p">(</span><span class="n">file_destination</span><span class="p">,</span> <span class="n">item</span><span class="p">[</span><span class="s2">&quot;hash&quot;</span><span class="p">])</span>
+</span><span id="L-444"><a href="#L-444"><span class="linenos">444</span></a>
+</span><span id="L-445"><a href="#L-445"><span class="linenos">445</span></a>            <span class="c1"># Unzip downloaded .zip</span>
+</span><span id="L-446"><a href="#L-446"><span class="linenos">446</span></a>            <span class="n">unzip_download</span><span class="p">(</span><span class="n">file_destination</span><span class="p">)</span>
+</span><span id="L-447"><a href="#L-447"><span class="linenos">447</span></a>
+</span><span id="L-448"><a href="#L-448"><span class="linenos">448</span></a>            <span class="c1"># Extract Tables to parquet</span>
+</span><span id="L-449"><a href="#L-449"><span class="linenos">449</span></a>            <span class="k">if</span> <span class="s2">&quot;extract&quot;</span> <span class="ow">in</span> <span class="n">item</span><span class="p">:</span>
+</span><span id="L-450"><a href="#L-450"><span class="linenos">450</span></a>                <span class="n">item</span><span class="p">[</span><span class="s2">&quot;extract&quot;</span><span class="p">]()</span>
+</span><span id="L-451"><a href="#L-451"><span class="linenos">451</span></a>
+</span><span id="L-452"><a href="#L-452"><span class="linenos">452</span></a>        <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Downloaded </span><span class="si">{</span><span class="n">release_ordinal</span><span class="si">}</span><span class="s2"> release(s) for item </span><span class="si">{</span><span class="n">item_id</span><span class="si">}</span><span class="s2">.&quot;</span><span class="p">)</span>
+</span><span id="L-453"><a href="#L-453"><span class="linenos">453</span></a>
+</span><span id="L-454"><a href="#L-454"><span class="linenos">454</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;TRUD installation completed&quot;</span><span class="p">)</span>
 </span></pre></div>
 
 
             </section>
-                <section id="logger">
-                    <div class="attr variable">
-            <span class="name">logger</span>        =
-<span class="default_value">&lt;Logger acmc_logger (INFO)&gt;</span>
-
-        
-    </div>
-    <a class="headerlink" href="#logger"></a>
-    
-    
-
-                </section>
                 <section id="FQDN">
                     <div class="attr variable">
             <span class="name">FQDN</span>        =
@@ -565,7 +570,9 @@
     </div>
     <a class="headerlink" href="#FQDN"></a>
     
-    
+            <div class="docstring"><p>Fully Qualified Domain Name of NHS digital TRUD service API</p>
+</div>
+
 
                 </section>
                 <section id="VOCAB_PATH">
@@ -577,7 +584,9 @@
     </div>
     <a class="headerlink" href="#VOCAB_PATH"></a>
     
-    
+            <div class="docstring"><p>Default path to the TRUD vocabulary directory relative to the the acmc execution directory</p>
+</div>
+
 
                 </section>
                 <section id="VERSION_FILE">
@@ -589,7 +598,9 @@
     </div>
     <a class="headerlink" href="#VERSION_FILE"></a>
     
-    
+            <div class="docstring"><p>TRUD version file</p>
+</div>
+
 
                 </section>
                 <section id="VERSION_PATH">
@@ -601,7 +612,9 @@
     </div>
     <a class="headerlink" href="#VERSION_PATH"></a>
     
-    
+            <div class="docstring"><p>Default path to the TRUD version file</p>
+</div>
+
 
                 </section>
                 <section id="DOWNLOADS_PATH">
@@ -613,7 +626,9 @@
     </div>
     <a class="headerlink" href="#DOWNLOADS_PATH"></a>
     
-    
+            <div class="docstring"><p>Default path to the TRUD vocabulary downloads directory</p>
+</div>
+
 
                 </section>
                 <section id="PROCESSED_PATH">
@@ -625,7 +640,9 @@
     </div>
     <a class="headerlink" href="#PROCESSED_PATH"></a>
     
-    
+            <div class="docstring"><p>Default path to the processed TRUD mappings directory</p>
+</div>
+
 
                 </section>
                 <section id="get_releases">
@@ -639,26 +656,26 @@
 
     </div>
     <a class="headerlink" href="#get_releases"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="get_releases-28"><a href="#get_releases-28"><span class="linenos">28</span></a><span class="k">def</span><span class="w"> </span><span class="nf">get_releases</span><span class="p">(</span><span class="n">item_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">API_KEY</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">latest</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">list</span><span class="p">:</span>
-</span><span id="get_releases-29"><a href="#get_releases-29"><span class="linenos">29</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Retrieve release information for an item from the TRUD API.&quot;&quot;&quot;</span>
-</span><span id="get_releases-30"><a href="#get_releases-30"><span class="linenos">30</span></a>    <span class="n">url</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;https://</span><span class="si">{</span><span class="n">FQDN</span><span class="si">}</span><span class="s2">/trud/api/v1/keys/</span><span class="si">{</span><span class="n">API_KEY</span><span class="si">}</span><span class="s2">/items/</span><span class="si">{</span><span class="n">item_id</span><span class="si">}</span><span class="s2">/releases&quot;</span>
-</span><span id="get_releases-31"><a href="#get_releases-31"><span class="linenos">31</span></a>    <span class="k">if</span> <span class="n">latest</span><span class="p">:</span>
-</span><span id="get_releases-32"><a href="#get_releases-32"><span class="linenos">32</span></a>        <span class="n">url</span> <span class="o">+=</span> <span class="s2">&quot;?latest&quot;</span>
-</span><span id="get_releases-33"><a href="#get_releases-33"><span class="linenos">33</span></a>
-</span><span id="get_releases-34"><a href="#get_releases-34"><span class="linenos">34</span></a>    <span class="n">response</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">url</span><span class="p">)</span>
-</span><span id="get_releases-35"><a href="#get_releases-35"><span class="linenos">35</span></a>    <span class="k">if</span> <span class="n">response</span><span class="o">.</span><span class="n">status_code</span> <span class="o">!=</span> <span class="mi">200</span><span class="p">:</span>
-</span><span id="get_releases-36"><a href="#get_releases-36"><span class="linenos">36</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span>
-</span><span id="get_releases-37"><a href="#get_releases-37"><span class="linenos">37</span></a>            <span class="sa">f</span><span class="s2">&quot;Failed to fetch releases for item </span><span class="si">{</span><span class="n">item_id</span><span class="si">}</span><span class="s2">. Status code: </span><span class="si">{</span><span class="n">response</span><span class="o">.</span><span class="n">status_code</span><span class="si">}</span><span class="s2">, error </span><span class="si">{</span><span class="n">response</span><span class="o">.</span><span class="n">json</span><span class="p">()[</span><span class="s1">&#39;message&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">. If no releases found for API key, please ensure you are subscribed to the data release and that it is not pending approval&quot;</span>
-</span><span id="get_releases-38"><a href="#get_releases-38"><span class="linenos">38</span></a>        <span class="p">)</span>
-</span><span id="get_releases-39"><a href="#get_releases-39"><span class="linenos">39</span></a>        <span class="n">response</span><span class="o">.</span><span class="n">raise_for_status</span><span class="p">()</span>
-</span><span id="get_releases-40"><a href="#get_releases-40"><span class="linenos">40</span></a>
-</span><span id="get_releases-41"><a href="#get_releases-41"><span class="linenos">41</span></a>    <span class="n">data</span> <span class="o">=</span> <span class="n">response</span><span class="o">.</span><span class="n">json</span><span class="p">()</span>
-</span><span id="get_releases-42"><a href="#get_releases-42"><span class="linenos">42</span></a>    <span class="k">if</span> <span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;message&quot;</span><span class="p">)</span> <span class="o">!=</span> <span class="s2">&quot;OK&quot;</span><span class="p">:</span>
-</span><span id="get_releases-43"><a href="#get_releases-43"><span class="linenos">43</span></a>        <span class="n">msg</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;Unknown error occurred </span><span class="si">{</span><span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;message&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="get_releases-44"><a href="#get_releases-44"><span class="linenos">44</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
-</span><span id="get_releases-45"><a href="#get_releases-45"><span class="linenos">45</span></a>        <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
-</span><span id="get_releases-46"><a href="#get_releases-46"><span class="linenos">46</span></a>
-</span><span id="get_releases-47"><a href="#get_releases-47"><span class="linenos">47</span></a>    <span class="k">return</span> <span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;releases&quot;</span><span class="p">,</span> <span class="p">[])</span>
+            <div class="pdoc-code codehilite"><pre><span></span><span id="get_releases-44"><a href="#get_releases-44"><span class="linenos">44</span></a><span class="k">def</span><span class="w"> </span><span class="nf">get_releases</span><span class="p">(</span><span class="n">item_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">API_KEY</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">latest</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">list</span><span class="p">:</span>
+</span><span id="get_releases-45"><a href="#get_releases-45"><span class="linenos">45</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Retrieve release information for an item from the TRUD API.&quot;&quot;&quot;</span>
+</span><span id="get_releases-46"><a href="#get_releases-46"><span class="linenos">46</span></a>    <span class="n">url</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;https://</span><span class="si">{</span><span class="n">FQDN</span><span class="si">}</span><span class="s2">/trud/api/v1/keys/</span><span class="si">{</span><span class="n">API_KEY</span><span class="si">}</span><span class="s2">/items/</span><span class="si">{</span><span class="n">item_id</span><span class="si">}</span><span class="s2">/releases&quot;</span>
+</span><span id="get_releases-47"><a href="#get_releases-47"><span class="linenos">47</span></a>    <span class="k">if</span> <span class="n">latest</span><span class="p">:</span>
+</span><span id="get_releases-48"><a href="#get_releases-48"><span class="linenos">48</span></a>        <span class="n">url</span> <span class="o">+=</span> <span class="s2">&quot;?latest&quot;</span>
+</span><span id="get_releases-49"><a href="#get_releases-49"><span class="linenos">49</span></a>
+</span><span id="get_releases-50"><a href="#get_releases-50"><span class="linenos">50</span></a>    <span class="n">response</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">url</span><span class="p">)</span>
+</span><span id="get_releases-51"><a href="#get_releases-51"><span class="linenos">51</span></a>    <span class="k">if</span> <span class="n">response</span><span class="o">.</span><span class="n">status_code</span> <span class="o">!=</span> <span class="mi">200</span><span class="p">:</span>
+</span><span id="get_releases-52"><a href="#get_releases-52"><span class="linenos">52</span></a>        <span class="n">_logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span>
+</span><span id="get_releases-53"><a href="#get_releases-53"><span class="linenos">53</span></a>            <span class="sa">f</span><span class="s2">&quot;Failed to fetch releases for item </span><span class="si">{</span><span class="n">item_id</span><span class="si">}</span><span class="s2">. Status code: </span><span class="si">{</span><span class="n">response</span><span class="o">.</span><span class="n">status_code</span><span class="si">}</span><span class="s2">, error </span><span class="si">{</span><span class="n">response</span><span class="o">.</span><span class="n">json</span><span class="p">()[</span><span class="s1">&#39;message&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">. If no releases found for API key, please ensure you are subscribed to the data release and that it is not pending approval&quot;</span>
+</span><span id="get_releases-54"><a href="#get_releases-54"><span class="linenos">54</span></a>        <span class="p">)</span>
+</span><span id="get_releases-55"><a href="#get_releases-55"><span class="linenos">55</span></a>        <span class="n">response</span><span class="o">.</span><span class="n">raise_for_status</span><span class="p">()</span>
+</span><span id="get_releases-56"><a href="#get_releases-56"><span class="linenos">56</span></a>
+</span><span id="get_releases-57"><a href="#get_releases-57"><span class="linenos">57</span></a>    <span class="n">data</span> <span class="o">=</span> <span class="n">response</span><span class="o">.</span><span class="n">json</span><span class="p">()</span>
+</span><span id="get_releases-58"><a href="#get_releases-58"><span class="linenos">58</span></a>    <span class="k">if</span> <span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;message&quot;</span><span class="p">)</span> <span class="o">!=</span> <span class="s2">&quot;OK&quot;</span><span class="p">:</span>
+</span><span id="get_releases-59"><a href="#get_releases-59"><span class="linenos">59</span></a>        <span class="n">msg</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;Unknown error occurred </span><span class="si">{</span><span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;message&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="get_releases-60"><a href="#get_releases-60"><span class="linenos">60</span></a>        <span class="n">_logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+</span><span id="get_releases-61"><a href="#get_releases-61"><span class="linenos">61</span></a>        <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+</span><span id="get_releases-62"><a href="#get_releases-62"><span class="linenos">62</span></a>
+</span><span id="get_releases-63"><a href="#get_releases-63"><span class="linenos">63</span></a>    <span class="k">return</span> <span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;releases&quot;</span><span class="p">,</span> <span class="p">[])</span>
 </span></pre></div>
 
 
@@ -678,48 +695,48 @@
 
     </div>
     <a class="headerlink" href="#download_release_file"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="download_release_file-50"><a href="#download_release_file-50"><span class="linenos">50</span></a><span class="k">def</span><span class="w"> </span><span class="nf">download_release_file</span><span class="p">(</span>
-</span><span id="download_release_file-51"><a href="#download_release_file-51"><span class="linenos">51</span></a>    <span class="n">item_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">release_ordinal</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">release</span><span class="p">:</span> <span class="nb">dict</span><span class="p">,</span> <span class="n">file_json_prefix</span><span class="p">:</span> <span class="nb">str</span>
-</span><span id="download_release_file-52"><a href="#download_release_file-52"><span class="linenos">52</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Path</span><span class="p">:</span>
-</span><span id="download_release_file-53"><a href="#download_release_file-53"><span class="linenos">53</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Download specified file type for a given release of an item.&quot;&quot;&quot;</span>
-</span><span id="download_release_file-54"><a href="#download_release_file-54"><span class="linenos">54</span></a>
-</span><span id="download_release_file-55"><a href="#download_release_file-55"><span class="linenos">55</span></a>    <span class="c1"># check folder is a directory</span>
-</span><span id="download_release_file-56"><a href="#download_release_file-56"><span class="linenos">56</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">DOWNLOADS_PATH</span><span class="o">.</span><span class="n">is_dir</span><span class="p">():</span>
-</span><span id="download_release_file-57"><a href="#download_release_file-57"><span class="linenos">57</span></a>        <span class="k">raise</span> <span class="ne">NotADirectoryError</span><span class="p">(</span>
-</span><span id="download_release_file-58"><a href="#download_release_file-58"><span class="linenos">58</span></a>            <span class="sa">f</span><span class="s2">&quot;Error: &#39;</span><span class="si">{</span><span class="n">DOWNLOADS_PATH</span><span class="si">}</span><span class="s2">&#39; for TRUD resources is not a directory&quot;</span>
-</span><span id="download_release_file-59"><a href="#download_release_file-59"><span class="linenos">59</span></a>        <span class="p">)</span>
-</span><span id="download_release_file-60"><a href="#download_release_file-60"><span class="linenos">60</span></a>
-</span><span id="download_release_file-61"><a href="#download_release_file-61"><span class="linenos">61</span></a>    <span class="n">file_type</span> <span class="o">=</span> <span class="n">file_json_prefix</span>
-</span><span id="download_release_file-62"><a href="#download_release_file-62"><span class="linenos">62</span></a>    <span class="n">file_url</span> <span class="o">=</span> <span class="n">release</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">file_json_prefix</span><span class="si">}</span><span class="s2">FileUrl&quot;</span><span class="p">)</span>
-</span><span id="download_release_file-63"><a href="#download_release_file-63"><span class="linenos">63</span></a>    <span class="k">if</span> <span class="n">file_url</span> <span class="o">==</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="download_release_file-64"><a href="#download_release_file-64"><span class="linenos">64</span></a>        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;File url not in json data </span><span class="si">{</span><span class="n">file_json_prefix</span><span class="si">}</span><span class="s2">FileUrl&quot;</span><span class="p">)</span>
-</span><span id="download_release_file-65"><a href="#download_release_file-65"><span class="linenos">65</span></a>
-</span><span id="download_release_file-66"><a href="#download_release_file-66"><span class="linenos">66</span></a>    <span class="n">file_name</span> <span class="o">=</span> <span class="n">release</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">file_json_prefix</span><span class="si">}</span><span class="s2">FileName&quot;</span><span class="p">)</span>
-</span><span id="download_release_file-67"><a href="#download_release_file-67"><span class="linenos">67</span></a>    <span class="k">if</span> <span class="n">file_name</span> <span class="o">==</span> <span class="kc">None</span><span class="p">:</span>
-</span><span id="download_release_file-68"><a href="#download_release_file-68"><span class="linenos">68</span></a>        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;File name not in json data </span><span class="si">{</span><span class="n">file_json_prefix</span><span class="si">}</span><span class="s2">FileName&quot;</span><span class="p">)</span>
-</span><span id="download_release_file-69"><a href="#download_release_file-69"><span class="linenos">69</span></a>
-</span><span id="download_release_file-70"><a href="#download_release_file-70"><span class="linenos">70</span></a>    <span class="n">file_destination</span> <span class="o">=</span> <span class="n">DOWNLOADS_PATH</span> <span class="o">/</span> <span class="n">file_name</span>
-</span><span id="download_release_file-71"><a href="#download_release_file-71"><span class="linenos">71</span></a>
-</span><span id="download_release_file-72"><a href="#download_release_file-72"><span class="linenos">72</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">file_url</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">file_name</span><span class="p">:</span>
-</span><span id="download_release_file-73"><a href="#download_release_file-73"><span class="linenos">73</span></a>        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
-</span><span id="download_release_file-74"><a href="#download_release_file-74"><span class="linenos">74</span></a>            <span class="sa">f</span><span class="s2">&quot;Missing </span><span class="si">{</span><span class="n">file_type</span><span class="si">}</span><span class="s2"> file information for release </span><span class="si">{</span><span class="n">release_ordinal</span><span class="si">}</span><span class="s2"> of item </span><span class="si">{</span><span class="n">item_id</span><span class="si">}</span><span class="s2">.&quot;</span>
-</span><span id="download_release_file-75"><a href="#download_release_file-75"><span class="linenos">75</span></a>        <span class="p">)</span>
-</span><span id="download_release_file-76"><a href="#download_release_file-76"><span class="linenos">76</span></a>
-</span><span id="download_release_file-77"><a href="#download_release_file-77"><span class="linenos">77</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span>
-</span><span id="download_release_file-78"><a href="#download_release_file-78"><span class="linenos">78</span></a>        <span class="sa">f</span><span class="s2">&quot;Downloading item </span><span class="si">{</span><span class="n">item_id</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">file_type</span><span class="si">}</span><span class="s2"> file: </span><span class="si">{</span><span class="n">file_name</span><span class="si">}</span><span class="s2"> from </span><span class="si">{</span><span class="n">file_url</span><span class="si">}</span><span class="s2"> to </span><span class="si">{</span><span class="n">file_destination</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="download_release_file-79"><a href="#download_release_file-79"><span class="linenos">79</span></a>    <span class="p">)</span>
-</span><span id="download_release_file-80"><a href="#download_release_file-80"><span class="linenos">80</span></a>    <span class="n">response</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">file_url</span><span class="p">,</span> <span class="n">stream</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="download_release_file-81"><a href="#download_release_file-81"><span class="linenos">81</span></a>
-</span><span id="download_release_file-82"><a href="#download_release_file-82"><span class="linenos">82</span></a>    <span class="k">if</span> <span class="n">response</span><span class="o">.</span><span class="n">status_code</span> <span class="o">==</span> <span class="mi">200</span><span class="p">:</span>
-</span><span id="download_release_file-83"><a href="#download_release_file-83"><span class="linenos">83</span></a>        <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">file_destination</span><span class="p">,</span> <span class="s2">&quot;wb&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
-</span><span id="download_release_file-84"><a href="#download_release_file-84"><span class="linenos">84</span></a>            <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">response</span><span class="o">.</span><span class="n">content</span><span class="p">)</span>
-</span><span id="download_release_file-85"><a href="#download_release_file-85"><span class="linenos">85</span></a>    <span class="k">else</span><span class="p">:</span>
-</span><span id="download_release_file-86"><a href="#download_release_file-86"><span class="linenos">86</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span>
-</span><span id="download_release_file-87"><a href="#download_release_file-87"><span class="linenos">87</span></a>            <span class="sa">f</span><span class="s2">&quot;Failed to download </span><span class="si">{</span><span class="n">file_type</span><span class="si">}</span><span class="s2"> file for item </span><span class="si">{</span><span class="n">item_id</span><span class="si">}</span><span class="s2">. Status code: </span><span class="si">{</span><span class="n">response</span><span class="o">.</span><span class="n">status_code</span><span class="si">}</span><span class="s2">&quot;</span>
-</span><span id="download_release_file-88"><a href="#download_release_file-88"><span class="linenos">88</span></a>        <span class="p">)</span>
-</span><span id="download_release_file-89"><a href="#download_release_file-89"><span class="linenos">89</span></a>        <span class="n">response</span><span class="o">.</span><span class="n">raise_for_status</span><span class="p">()</span>
-</span><span id="download_release_file-90"><a href="#download_release_file-90"><span class="linenos">90</span></a>
-</span><span id="download_release_file-91"><a href="#download_release_file-91"><span class="linenos">91</span></a>    <span class="k">return</span> <span class="n">file_destination</span>
+            <div class="pdoc-code codehilite"><pre><span></span><span id="download_release_file-66"><a href="#download_release_file-66"><span class="linenos"> 66</span></a><span class="k">def</span><span class="w"> </span><span class="nf">download_release_file</span><span class="p">(</span>
+</span><span id="download_release_file-67"><a href="#download_release_file-67"><span class="linenos"> 67</span></a>    <span class="n">item_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">release_ordinal</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">release</span><span class="p">:</span> <span class="nb">dict</span><span class="p">,</span> <span class="n">file_json_prefix</span><span class="p">:</span> <span class="nb">str</span>
+</span><span id="download_release_file-68"><a href="#download_release_file-68"><span class="linenos"> 68</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Path</span><span class="p">:</span>
+</span><span id="download_release_file-69"><a href="#download_release_file-69"><span class="linenos"> 69</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Download specified file type for a given release of an item.&quot;&quot;&quot;</span>
+</span><span id="download_release_file-70"><a href="#download_release_file-70"><span class="linenos"> 70</span></a>
+</span><span id="download_release_file-71"><a href="#download_release_file-71"><span class="linenos"> 71</span></a>    <span class="c1"># check folder is a directory</span>
+</span><span id="download_release_file-72"><a href="#download_release_file-72"><span class="linenos"> 72</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">DOWNLOADS_PATH</span><span class="o">.</span><span class="n">is_dir</span><span class="p">():</span>
+</span><span id="download_release_file-73"><a href="#download_release_file-73"><span class="linenos"> 73</span></a>        <span class="k">raise</span> <span class="ne">NotADirectoryError</span><span class="p">(</span>
+</span><span id="download_release_file-74"><a href="#download_release_file-74"><span class="linenos"> 74</span></a>            <span class="sa">f</span><span class="s2">&quot;Error: &#39;</span><span class="si">{</span><span class="n">DOWNLOADS_PATH</span><span class="si">}</span><span class="s2">&#39; for TRUD resources is not a directory&quot;</span>
+</span><span id="download_release_file-75"><a href="#download_release_file-75"><span class="linenos"> 75</span></a>        <span class="p">)</span>
+</span><span id="download_release_file-76"><a href="#download_release_file-76"><span class="linenos"> 76</span></a>
+</span><span id="download_release_file-77"><a href="#download_release_file-77"><span class="linenos"> 77</span></a>    <span class="n">file_type</span> <span class="o">=</span> <span class="n">file_json_prefix</span>
+</span><span id="download_release_file-78"><a href="#download_release_file-78"><span class="linenos"> 78</span></a>    <span class="n">file_url</span> <span class="o">=</span> <span class="n">release</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">file_json_prefix</span><span class="si">}</span><span class="s2">FileUrl&quot;</span><span class="p">)</span>
+</span><span id="download_release_file-79"><a href="#download_release_file-79"><span class="linenos"> 79</span></a>    <span class="k">if</span> <span class="n">file_url</span> <span class="o">==</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="download_release_file-80"><a href="#download_release_file-80"><span class="linenos"> 80</span></a>        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;File url not in json data </span><span class="si">{</span><span class="n">file_json_prefix</span><span class="si">}</span><span class="s2">FileUrl&quot;</span><span class="p">)</span>
+</span><span id="download_release_file-81"><a href="#download_release_file-81"><span class="linenos"> 81</span></a>
+</span><span id="download_release_file-82"><a href="#download_release_file-82"><span class="linenos"> 82</span></a>    <span class="n">file_name</span> <span class="o">=</span> <span class="n">release</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">file_json_prefix</span><span class="si">}</span><span class="s2">FileName&quot;</span><span class="p">)</span>
+</span><span id="download_release_file-83"><a href="#download_release_file-83"><span class="linenos"> 83</span></a>    <span class="k">if</span> <span class="n">file_name</span> <span class="o">==</span> <span class="kc">None</span><span class="p">:</span>
+</span><span id="download_release_file-84"><a href="#download_release_file-84"><span class="linenos"> 84</span></a>        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;File name not in json data </span><span class="si">{</span><span class="n">file_json_prefix</span><span class="si">}</span><span class="s2">FileName&quot;</span><span class="p">)</span>
+</span><span id="download_release_file-85"><a href="#download_release_file-85"><span class="linenos"> 85</span></a>
+</span><span id="download_release_file-86"><a href="#download_release_file-86"><span class="linenos"> 86</span></a>    <span class="n">file_destination</span> <span class="o">=</span> <span class="n">DOWNLOADS_PATH</span> <span class="o">/</span> <span class="n">file_name</span>
+</span><span id="download_release_file-87"><a href="#download_release_file-87"><span class="linenos"> 87</span></a>
+</span><span id="download_release_file-88"><a href="#download_release_file-88"><span class="linenos"> 88</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">file_url</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">file_name</span><span class="p">:</span>
+</span><span id="download_release_file-89"><a href="#download_release_file-89"><span class="linenos"> 89</span></a>        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
+</span><span id="download_release_file-90"><a href="#download_release_file-90"><span class="linenos"> 90</span></a>            <span class="sa">f</span><span class="s2">&quot;Missing </span><span class="si">{</span><span class="n">file_type</span><span class="si">}</span><span class="s2"> file information for release </span><span class="si">{</span><span class="n">release_ordinal</span><span class="si">}</span><span class="s2"> of item </span><span class="si">{</span><span class="n">item_id</span><span class="si">}</span><span class="s2">.&quot;</span>
+</span><span id="download_release_file-91"><a href="#download_release_file-91"><span class="linenos"> 91</span></a>        <span class="p">)</span>
+</span><span id="download_release_file-92"><a href="#download_release_file-92"><span class="linenos"> 92</span></a>
+</span><span id="download_release_file-93"><a href="#download_release_file-93"><span class="linenos"> 93</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span>
+</span><span id="download_release_file-94"><a href="#download_release_file-94"><span class="linenos"> 94</span></a>        <span class="sa">f</span><span class="s2">&quot;Downloading item </span><span class="si">{</span><span class="n">item_id</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">file_type</span><span class="si">}</span><span class="s2"> file: </span><span class="si">{</span><span class="n">file_name</span><span class="si">}</span><span class="s2"> from </span><span class="si">{</span><span class="n">file_url</span><span class="si">}</span><span class="s2"> to </span><span class="si">{</span><span class="n">file_destination</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="download_release_file-95"><a href="#download_release_file-95"><span class="linenos"> 95</span></a>    <span class="p">)</span>
+</span><span id="download_release_file-96"><a href="#download_release_file-96"><span class="linenos"> 96</span></a>    <span class="n">response</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">file_url</span><span class="p">,</span> <span class="n">stream</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="download_release_file-97"><a href="#download_release_file-97"><span class="linenos"> 97</span></a>
+</span><span id="download_release_file-98"><a href="#download_release_file-98"><span class="linenos"> 98</span></a>    <span class="k">if</span> <span class="n">response</span><span class="o">.</span><span class="n">status_code</span> <span class="o">==</span> <span class="mi">200</span><span class="p">:</span>
+</span><span id="download_release_file-99"><a href="#download_release_file-99"><span class="linenos"> 99</span></a>        <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">file_destination</span><span class="p">,</span> <span class="s2">&quot;wb&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
+</span><span id="download_release_file-100"><a href="#download_release_file-100"><span class="linenos">100</span></a>            <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">response</span><span class="o">.</span><span class="n">content</span><span class="p">)</span>
+</span><span id="download_release_file-101"><a href="#download_release_file-101"><span class="linenos">101</span></a>    <span class="k">else</span><span class="p">:</span>
+</span><span id="download_release_file-102"><a href="#download_release_file-102"><span class="linenos">102</span></a>        <span class="n">_logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span>
+</span><span id="download_release_file-103"><a href="#download_release_file-103"><span class="linenos">103</span></a>            <span class="sa">f</span><span class="s2">&quot;Failed to download </span><span class="si">{</span><span class="n">file_type</span><span class="si">}</span><span class="s2"> file for item </span><span class="si">{</span><span class="n">item_id</span><span class="si">}</span><span class="s2">. Status code: </span><span class="si">{</span><span class="n">response</span><span class="o">.</span><span class="n">status_code</span><span class="si">}</span><span class="s2">&quot;</span>
+</span><span id="download_release_file-104"><a href="#download_release_file-104"><span class="linenos">104</span></a>        <span class="p">)</span>
+</span><span id="download_release_file-105"><a href="#download_release_file-105"><span class="linenos">105</span></a>        <span class="n">response</span><span class="o">.</span><span class="n">raise_for_status</span><span class="p">()</span>
+</span><span id="download_release_file-106"><a href="#download_release_file-106"><span class="linenos">106</span></a>
+</span><span id="download_release_file-107"><a href="#download_release_file-107"><span class="linenos">107</span></a>    <span class="k">return</span> <span class="n">file_destination</span>
 </span></pre></div>
 
 
@@ -739,16 +756,16 @@
 
     </div>
     <a class="headerlink" href="#validate_download_hash"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="validate_download_hash-94"><a href="#validate_download_hash-94"><span class="linenos"> 94</span></a><span class="k">def</span><span class="w"> </span><span class="nf">validate_download_hash</span><span class="p">(</span><span class="n">file_destination</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">item_hash</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
-</span><span id="validate_download_hash-95"><a href="#validate_download_hash-95"><span class="linenos"> 95</span></a>    <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">file_destination</span><span class="p">,</span> <span class="s2">&quot;rb&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
-</span><span id="validate_download_hash-96"><a href="#validate_download_hash-96"><span class="linenos"> 96</span></a>        <span class="nb">hash</span> <span class="o">=</span> <span class="n">hashlib</span><span class="o">.</span><span class="n">sha256</span><span class="p">(</span><span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">())</span><span class="o">.</span><span class="n">hexdigest</span><span class="p">()</span>
-</span><span id="validate_download_hash-97"><a href="#validate_download_hash-97"><span class="linenos"> 97</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="nb">hash</span><span class="p">)</span>
-</span><span id="validate_download_hash-98"><a href="#validate_download_hash-98"><span class="linenos"> 98</span></a>    <span class="k">if</span> <span class="nb">hash</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="n">item_hash</span><span class="o">.</span><span class="n">upper</span><span class="p">():</span>
-</span><span id="validate_download_hash-99"><a href="#validate_download_hash-99"><span class="linenos"> 99</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Verified hash of </span><span class="si">{</span><span class="n">file_destination</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="nb">hash</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="validate_download_hash-100"><a href="#validate_download_hash-100"><span class="linenos">100</span></a>    <span class="k">else</span><span class="p">:</span>
-</span><span id="validate_download_hash-101"><a href="#validate_download_hash-101"><span class="linenos">101</span></a>        <span class="n">msg</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;Could not validate origin of </span><span class="si">{</span><span class="n">file_destination</span><span class="si">}</span><span class="s2">. The SHA-256 hash should be: </span><span class="si">{</span><span class="n">item_hash</span><span class="si">}</span><span class="s2">, but got </span><span class="si">{</span><span class="nb">hash</span><span class="si">}</span><span class="s2"> instead&quot;</span>
-</span><span id="validate_download_hash-102"><a href="#validate_download_hash-102"><span class="linenos">102</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
-</span><span id="validate_download_hash-103"><a href="#validate_download_hash-103"><span class="linenos">103</span></a>        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+            <div class="pdoc-code codehilite"><pre><span></span><span id="validate_download_hash-110"><a href="#validate_download_hash-110"><span class="linenos">110</span></a><span class="k">def</span><span class="w"> </span><span class="nf">validate_download_hash</span><span class="p">(</span><span class="n">file_destination</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">item_hash</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
+</span><span id="validate_download_hash-111"><a href="#validate_download_hash-111"><span class="linenos">111</span></a>    <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">file_destination</span><span class="p">,</span> <span class="s2">&quot;rb&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
+</span><span id="validate_download_hash-112"><a href="#validate_download_hash-112"><span class="linenos">112</span></a>        <span class="nb">hash</span> <span class="o">=</span> <span class="n">hashlib</span><span class="o">.</span><span class="n">sha256</span><span class="p">(</span><span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">())</span><span class="o">.</span><span class="n">hexdigest</span><span class="p">()</span>
+</span><span id="validate_download_hash-113"><a href="#validate_download_hash-113"><span class="linenos">113</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="nb">hash</span><span class="p">)</span>
+</span><span id="validate_download_hash-114"><a href="#validate_download_hash-114"><span class="linenos">114</span></a>    <span class="k">if</span> <span class="nb">hash</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="n">item_hash</span><span class="o">.</span><span class="n">upper</span><span class="p">():</span>
+</span><span id="validate_download_hash-115"><a href="#validate_download_hash-115"><span class="linenos">115</span></a>        <span class="n">_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Verified hash of </span><span class="si">{</span><span class="n">file_destination</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="nb">hash</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="validate_download_hash-116"><a href="#validate_download_hash-116"><span class="linenos">116</span></a>    <span class="k">else</span><span class="p">:</span>
+</span><span id="validate_download_hash-117"><a href="#validate_download_hash-117"><span class="linenos">117</span></a>        <span class="n">msg</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;Could not validate origin of </span><span class="si">{</span><span class="n">file_destination</span><span class="si">}</span><span class="s2">. The SHA-256 hash should be: </span><span class="si">{</span><span class="n">item_hash</span><span class="si">}</span><span class="s2">, but got </span><span class="si">{</span><span class="nb">hash</span><span class="si">}</span><span class="s2"> instead&quot;</span>
+</span><span id="validate_download_hash-118"><a href="#validate_download_hash-118"><span class="linenos">118</span></a>        <span class="n">_logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
+</span><span id="validate_download_hash-119"><a href="#validate_download_hash-119"><span class="linenos">119</span></a>        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
 </span></pre></div>
 
 
@@ -766,15 +783,15 @@
 
     </div>
     <a class="headerlink" href="#unzip_download"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="unzip_download-106"><a href="#unzip_download-106"><span class="linenos">106</span></a><span class="k">def</span><span class="w"> </span><span class="nf">unzip_download</span><span class="p">(</span><span class="n">file_destination</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
-</span><span id="unzip_download-107"><a href="#unzip_download-107"><span class="linenos">107</span></a>    <span class="c1"># check folder is a directory</span>
-</span><span id="unzip_download-108"><a href="#unzip_download-108"><span class="linenos">108</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">DOWNLOADS_PATH</span><span class="o">.</span><span class="n">is_dir</span><span class="p">():</span>
-</span><span id="unzip_download-109"><a href="#unzip_download-109"><span class="linenos">109</span></a>        <span class="k">raise</span> <span class="ne">NotADirectoryError</span><span class="p">(</span>
-</span><span id="unzip_download-110"><a href="#unzip_download-110"><span class="linenos">110</span></a>            <span class="sa">f</span><span class="s2">&quot;Error: &#39;</span><span class="si">{</span><span class="n">DOWNLOADS_PATH</span><span class="si">}</span><span class="s2">&#39; for TRUD resoruces is not a directory&quot;</span>
-</span><span id="unzip_download-111"><a href="#unzip_download-111"><span class="linenos">111</span></a>        <span class="p">)</span>
-</span><span id="unzip_download-112"><a href="#unzip_download-112"><span class="linenos">112</span></a>
-</span><span id="unzip_download-113"><a href="#unzip_download-113"><span class="linenos">113</span></a>    <span class="k">with</span> <span class="n">zipfile</span><span class="o">.</span><span class="n">ZipFile</span><span class="p">(</span><span class="n">file_destination</span><span class="p">,</span> <span class="s2">&quot;r&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">zip_ref</span><span class="p">:</span>
-</span><span id="unzip_download-114"><a href="#unzip_download-114"><span class="linenos">114</span></a>        <span class="n">zip_ref</span><span class="o">.</span><span class="n">extractall</span><span class="p">(</span><span class="n">DOWNLOADS_PATH</span><span class="p">)</span>
+            <div class="pdoc-code codehilite"><pre><span></span><span id="unzip_download-122"><a href="#unzip_download-122"><span class="linenos">122</span></a><span class="k">def</span><span class="w"> </span><span class="nf">unzip_download</span><span class="p">(</span><span class="n">file_destination</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
+</span><span id="unzip_download-123"><a href="#unzip_download-123"><span class="linenos">123</span></a>    <span class="c1"># check folder is a directory</span>
+</span><span id="unzip_download-124"><a href="#unzip_download-124"><span class="linenos">124</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">DOWNLOADS_PATH</span><span class="o">.</span><span class="n">is_dir</span><span class="p">():</span>
+</span><span id="unzip_download-125"><a href="#unzip_download-125"><span class="linenos">125</span></a>        <span class="k">raise</span> <span class="ne">NotADirectoryError</span><span class="p">(</span>
+</span><span id="unzip_download-126"><a href="#unzip_download-126"><span class="linenos">126</span></a>            <span class="sa">f</span><span class="s2">&quot;Error: &#39;</span><span class="si">{</span><span class="n">DOWNLOADS_PATH</span><span class="si">}</span><span class="s2">&#39; for TRUD resoruces is not a directory&quot;</span>
+</span><span id="unzip_download-127"><a href="#unzip_download-127"><span class="linenos">127</span></a>        <span class="p">)</span>
+</span><span id="unzip_download-128"><a href="#unzip_download-128"><span class="linenos">128</span></a>
+</span><span id="unzip_download-129"><a href="#unzip_download-129"><span class="linenos">129</span></a>    <span class="k">with</span> <span class="n">zipfile</span><span class="o">.</span><span class="n">ZipFile</span><span class="p">(</span><span class="n">file_destination</span><span class="p">,</span> <span class="s2">&quot;r&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">zip_ref</span><span class="p">:</span>
+</span><span id="unzip_download-130"><a href="#unzip_download-130"><span class="linenos">130</span></a>        <span class="n">zip_ref</span><span class="o">.</span><span class="n">extractall</span><span class="p">(</span><span class="n">DOWNLOADS_PATH</span><span class="p">)</span>
 </span></pre></div>
 
 
@@ -792,22 +809,22 @@
 
     </div>
     <a class="headerlink" href="#extract_icd10"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="extract_icd10-117"><a href="#extract_icd10-117"><span class="linenos">117</span></a><span class="k">def</span><span class="w"> </span><span class="nf">extract_icd10</span><span class="p">():</span>
-</span><span id="extract_icd10-118"><a href="#extract_icd10-118"><span class="linenos">118</span></a>    <span class="c1"># ICD10_edition5</span>
-</span><span id="extract_icd10-119"><a href="#extract_icd10-119"><span class="linenos">119</span></a>    <span class="n">file_path</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="extract_icd10-120"><a href="#extract_icd10-120"><span class="linenos">120</span></a>        <span class="n">DOWNLOADS_PATH</span>
-</span><span id="extract_icd10-121"><a href="#extract_icd10-121"><span class="linenos">121</span></a>        <span class="o">/</span> <span class="s2">&quot;ICD10_Edition5_XML_20160401&quot;</span>
-</span><span id="extract_icd10-122"><a href="#extract_icd10-122"><span class="linenos">122</span></a>        <span class="o">/</span> <span class="s2">&quot;Content&quot;</span>
-</span><span id="extract_icd10-123"><a href="#extract_icd10-123"><span class="linenos">123</span></a>        <span class="o">/</span> <span class="s2">&quot;ICD10_Edition5_CodesAndTitlesAndMetadata_GB_20160401.xml&quot;</span>
-</span><span id="extract_icd10-124"><a href="#extract_icd10-124"><span class="linenos">124</span></a>    <span class="p">)</span>
-</span><span id="extract_icd10-125"><a href="#extract_icd10-125"><span class="linenos">125</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_xml</span><span class="p">(</span><span class="n">file_path</span><span class="p">)</span>
-</span><span id="extract_icd10-126"><a href="#extract_icd10-126"><span class="linenos">126</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[[</span><span class="s2">&quot;CODE&quot;</span><span class="p">,</span> <span class="s2">&quot;ALT_CODE&quot;</span><span class="p">,</span> <span class="s2">&quot;DESCRIPTION&quot;</span><span class="p">]]</span>
-</span><span id="extract_icd10-127"><a href="#extract_icd10-127"><span class="linenos">127</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span>
-</span><span id="extract_icd10-128"><a href="#extract_icd10-128"><span class="linenos">128</span></a>        <span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;CODE&quot;</span><span class="p">:</span> <span class="s2">&quot;icd10&quot;</span><span class="p">,</span> <span class="s2">&quot;ALT_CODE&quot;</span><span class="p">:</span> <span class="s2">&quot;icd10_alt&quot;</span><span class="p">,</span> <span class="s2">&quot;DESCRIPTION&quot;</span><span class="p">:</span> <span class="s2">&quot;description&quot;</span><span class="p">}</span>
-</span><span id="extract_icd10-129"><a href="#extract_icd10-129"><span class="linenos">129</span></a>    <span class="p">)</span>
-</span><span id="extract_icd10-130"><a href="#extract_icd10-130"><span class="linenos">130</span></a>    <span class="n">output_path</span> <span class="o">=</span> <span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;icd10.parquet&quot;</span>
-</span><span id="extract_icd10-131"><a href="#extract_icd10-131"><span class="linenos">131</span></a>    <span class="n">df</span><span class="o">.</span><span class="n">to_parquet</span><span class="p">(</span><span class="n">output_path</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="extract_icd10-132"><a href="#extract_icd10-132"><span class="linenos">132</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Extracted: </span><span class="si">{</span><span class="n">output_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+            <div class="pdoc-code codehilite"><pre><span></span><span id="extract_icd10-133"><a href="#extract_icd10-133"><span class="linenos">133</span></a><span class="k">def</span><span class="w"> </span><span class="nf">extract_icd10</span><span class="p">():</span>
+</span><span id="extract_icd10-134"><a href="#extract_icd10-134"><span class="linenos">134</span></a>    <span class="c1"># ICD10_edition5</span>
+</span><span id="extract_icd10-135"><a href="#extract_icd10-135"><span class="linenos">135</span></a>    <span class="n">file_path</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="extract_icd10-136"><a href="#extract_icd10-136"><span class="linenos">136</span></a>        <span class="n">DOWNLOADS_PATH</span>
+</span><span id="extract_icd10-137"><a href="#extract_icd10-137"><span class="linenos">137</span></a>        <span class="o">/</span> <span class="s2">&quot;ICD10_Edition5_XML_20160401&quot;</span>
+</span><span id="extract_icd10-138"><a href="#extract_icd10-138"><span class="linenos">138</span></a>        <span class="o">/</span> <span class="s2">&quot;Content&quot;</span>
+</span><span id="extract_icd10-139"><a href="#extract_icd10-139"><span class="linenos">139</span></a>        <span class="o">/</span> <span class="s2">&quot;ICD10_Edition5_CodesAndTitlesAndMetadata_GB_20160401.xml&quot;</span>
+</span><span id="extract_icd10-140"><a href="#extract_icd10-140"><span class="linenos">140</span></a>    <span class="p">)</span>
+</span><span id="extract_icd10-141"><a href="#extract_icd10-141"><span class="linenos">141</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_xml</span><span class="p">(</span><span class="n">file_path</span><span class="p">)</span>
+</span><span id="extract_icd10-142"><a href="#extract_icd10-142"><span class="linenos">142</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[[</span><span class="s2">&quot;CODE&quot;</span><span class="p">,</span> <span class="s2">&quot;ALT_CODE&quot;</span><span class="p">,</span> <span class="s2">&quot;DESCRIPTION&quot;</span><span class="p">]]</span>
+</span><span id="extract_icd10-143"><a href="#extract_icd10-143"><span class="linenos">143</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span>
+</span><span id="extract_icd10-144"><a href="#extract_icd10-144"><span class="linenos">144</span></a>        <span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;CODE&quot;</span><span class="p">:</span> <span class="s2">&quot;icd10&quot;</span><span class="p">,</span> <span class="s2">&quot;ALT_CODE&quot;</span><span class="p">:</span> <span class="s2">&quot;icd10_alt&quot;</span><span class="p">,</span> <span class="s2">&quot;DESCRIPTION&quot;</span><span class="p">:</span> <span class="s2">&quot;description&quot;</span><span class="p">}</span>
+</span><span id="extract_icd10-145"><a href="#extract_icd10-145"><span class="linenos">145</span></a>    <span class="p">)</span>
+</span><span id="extract_icd10-146"><a href="#extract_icd10-146"><span class="linenos">146</span></a>    <span class="n">output_path</span> <span class="o">=</span> <span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;icd10.parquet&quot;</span>
+</span><span id="extract_icd10-147"><a href="#extract_icd10-147"><span class="linenos">147</span></a>    <span class="n">df</span><span class="o">.</span><span class="n">to_parquet</span><span class="p">(</span><span class="n">output_path</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="extract_icd10-148"><a href="#extract_icd10-148"><span class="linenos">148</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Extracted: </span><span class="si">{</span><span class="n">output_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
 </span></pre></div>
 
 
@@ -825,19 +842,19 @@
 
     </div>
     <a class="headerlink" href="#extract_opsc4"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="extract_opsc4-135"><a href="#extract_opsc4-135"><span class="linenos">135</span></a><span class="k">def</span><span class="w"> </span><span class="nf">extract_opsc4</span><span class="p">():</span>
-</span><span id="extract_opsc4-136"><a href="#extract_opsc4-136"><span class="linenos">136</span></a>    <span class="n">file_path</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="extract_opsc4-137"><a href="#extract_opsc4-137"><span class="linenos">137</span></a>        <span class="n">DOWNLOADS_PATH</span>
-</span><span id="extract_opsc4-138"><a href="#extract_opsc4-138"><span class="linenos">138</span></a>        <span class="o">/</span> <span class="s2">&quot;OPCS410 Data files txt&quot;</span>
-</span><span id="extract_opsc4-139"><a href="#extract_opsc4-139"><span class="linenos">139</span></a>        <span class="o">/</span> <span class="s2">&quot;OPCS410 CodesAndTitles Nov 2022 V1.0.txt&quot;</span>
-</span><span id="extract_opsc4-140"><a href="#extract_opsc4-140"><span class="linenos">140</span></a>    <span class="p">)</span>
-</span><span id="extract_opsc4-141"><a href="#extract_opsc4-141"><span class="linenos">141</span></a>
-</span><span id="extract_opsc4-142"><a href="#extract_opsc4-142"><span class="linenos">142</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_csv</span><span class="p">(</span><span class="n">file_path</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;</span><span class="se">\t</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="nb">str</span><span class="p">,</span> <span class="n">header</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
-</span><span id="extract_opsc4-143"><a href="#extract_opsc4-143"><span class="linenos">143</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="mi">0</span><span class="p">:</span> <span class="s2">&quot;opcs4&quot;</span><span class="p">,</span> <span class="mi">1</span><span class="p">:</span> <span class="s2">&quot;description&quot;</span><span class="p">})</span>
-</span><span id="extract_opsc4-144"><a href="#extract_opsc4-144"><span class="linenos">144</span></a>
-</span><span id="extract_opsc4-145"><a href="#extract_opsc4-145"><span class="linenos">145</span></a>    <span class="n">output_path</span> <span class="o">=</span> <span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;opcs4.parquet&quot;</span>
-</span><span id="extract_opsc4-146"><a href="#extract_opsc4-146"><span class="linenos">146</span></a>    <span class="n">df</span><span class="o">.</span><span class="n">to_parquet</span><span class="p">(</span><span class="n">output_path</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="extract_opsc4-147"><a href="#extract_opsc4-147"><span class="linenos">147</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Extracted: </span><span class="si">{</span><span class="n">output_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+            <div class="pdoc-code codehilite"><pre><span></span><span id="extract_opsc4-151"><a href="#extract_opsc4-151"><span class="linenos">151</span></a><span class="k">def</span><span class="w"> </span><span class="nf">extract_opsc4</span><span class="p">():</span>
+</span><span id="extract_opsc4-152"><a href="#extract_opsc4-152"><span class="linenos">152</span></a>    <span class="n">file_path</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="extract_opsc4-153"><a href="#extract_opsc4-153"><span class="linenos">153</span></a>        <span class="n">DOWNLOADS_PATH</span>
+</span><span id="extract_opsc4-154"><a href="#extract_opsc4-154"><span class="linenos">154</span></a>        <span class="o">/</span> <span class="s2">&quot;OPCS410 Data files txt&quot;</span>
+</span><span id="extract_opsc4-155"><a href="#extract_opsc4-155"><span class="linenos">155</span></a>        <span class="o">/</span> <span class="s2">&quot;OPCS410 CodesAndTitles Nov 2022 V1.0.txt&quot;</span>
+</span><span id="extract_opsc4-156"><a href="#extract_opsc4-156"><span class="linenos">156</span></a>    <span class="p">)</span>
+</span><span id="extract_opsc4-157"><a href="#extract_opsc4-157"><span class="linenos">157</span></a>
+</span><span id="extract_opsc4-158"><a href="#extract_opsc4-158"><span class="linenos">158</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_csv</span><span class="p">(</span><span class="n">file_path</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;</span><span class="se">\t</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="nb">str</span><span class="p">,</span> <span class="n">header</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
+</span><span id="extract_opsc4-159"><a href="#extract_opsc4-159"><span class="linenos">159</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="mi">0</span><span class="p">:</span> <span class="s2">&quot;opcs4&quot;</span><span class="p">,</span> <span class="mi">1</span><span class="p">:</span> <span class="s2">&quot;description&quot;</span><span class="p">})</span>
+</span><span id="extract_opsc4-160"><a href="#extract_opsc4-160"><span class="linenos">160</span></a>
+</span><span id="extract_opsc4-161"><a href="#extract_opsc4-161"><span class="linenos">161</span></a>    <span class="n">output_path</span> <span class="o">=</span> <span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;opcs4.parquet&quot;</span>
+</span><span id="extract_opsc4-162"><a href="#extract_opsc4-162"><span class="linenos">162</span></a>    <span class="n">df</span><span class="o">.</span><span class="n">to_parquet</span><span class="p">(</span><span class="n">output_path</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="extract_opsc4-163"><a href="#extract_opsc4-163"><span class="linenos">163</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Extracted: </span><span class="si">{</span><span class="n">output_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
 </span></pre></div>
 
 
@@ -855,94 +872,94 @@
 
     </div>
     <a class="headerlink" href="#extract_nhs_data_migrations"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="extract_nhs_data_migrations-150"><a href="#extract_nhs_data_migrations-150"><span class="linenos">150</span></a><span class="k">def</span><span class="w"> </span><span class="nf">extract_nhs_data_migrations</span><span class="p">():</span>
-</span><span id="extract_nhs_data_migrations-151"><a href="#extract_nhs_data_migrations-151"><span class="linenos">151</span></a>    <span class="c1"># NHS Data Migrations</span>
-</span><span id="extract_nhs_data_migrations-152"><a href="#extract_nhs_data_migrations-152"><span class="linenos">152</span></a>
-</span><span id="extract_nhs_data_migrations-153"><a href="#extract_nhs_data_migrations-153"><span class="linenos">153</span></a>    <span class="c1"># snomed only</span>
-</span><span id="extract_nhs_data_migrations-154"><a href="#extract_nhs_data_migrations-154"><span class="linenos">154</span></a>    <span class="n">file_path</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="extract_nhs_data_migrations-155"><a href="#extract_nhs_data_migrations-155"><span class="linenos">155</span></a>        <span class="n">DOWNLOADS_PATH</span>
-</span><span id="extract_nhs_data_migrations-156"><a href="#extract_nhs_data_migrations-156"><span class="linenos">156</span></a>        <span class="o">/</span> <span class="s2">&quot;Mapping Tables&quot;</span>
-</span><span id="extract_nhs_data_migrations-157"><a href="#extract_nhs_data_migrations-157"><span class="linenos">157</span></a>        <span class="o">/</span> <span class="s2">&quot;Updated&quot;</span>
-</span><span id="extract_nhs_data_migrations-158"><a href="#extract_nhs_data_migrations-158"><span class="linenos">158</span></a>        <span class="o">/</span> <span class="s2">&quot;Clinically Assured&quot;</span>
-</span><span id="extract_nhs_data_migrations-159"><a href="#extract_nhs_data_migrations-159"><span class="linenos">159</span></a>        <span class="o">/</span> <span class="s2">&quot;sctcremap_uk_20200401000001.txt&quot;</span>
-</span><span id="extract_nhs_data_migrations-160"><a href="#extract_nhs_data_migrations-160"><span class="linenos">160</span></a>    <span class="p">)</span>
-</span><span id="extract_nhs_data_migrations-161"><a href="#extract_nhs_data_migrations-161"><span class="linenos">161</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_csv</span><span class="p">(</span><span class="n">file_path</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;</span><span class="se">\t</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="extract_nhs_data_migrations-162"><a href="#extract_nhs_data_migrations-162"><span class="linenos">162</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[[</span><span class="s2">&quot;SCT_CONCEPTID&quot;</span><span class="p">]]</span>
-</span><span id="extract_nhs_data_migrations-163"><a href="#extract_nhs_data_migrations-163"><span class="linenos">163</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;SCT_CONCEPTID&quot;</span><span class="p">:</span> <span class="s2">&quot;snomed&quot;</span><span class="p">})</span>
-</span><span id="extract_nhs_data_migrations-164"><a href="#extract_nhs_data_migrations-164"><span class="linenos">164</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">drop_duplicates</span><span class="p">()</span>
-</span><span id="extract_nhs_data_migrations-165"><a href="#extract_nhs_data_migrations-165"><span class="linenos">165</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">astype</span><span class="p">(</span><span class="nb">str</span><span class="p">)</span>
-</span><span id="extract_nhs_data_migrations-166"><a href="#extract_nhs_data_migrations-166"><span class="linenos">166</span></a>
-</span><span id="extract_nhs_data_migrations-167"><a href="#extract_nhs_data_migrations-167"><span class="linenos">167</span></a>    <span class="n">output_path</span> <span class="o">=</span> <span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;snomed.parquet&quot;</span>
-</span><span id="extract_nhs_data_migrations-168"><a href="#extract_nhs_data_migrations-168"><span class="linenos">168</span></a>    <span class="n">df</span><span class="o">.</span><span class="n">to_parquet</span><span class="p">(</span><span class="n">output_path</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="extract_nhs_data_migrations-169"><a href="#extract_nhs_data_migrations-169"><span class="linenos">169</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Extracted: </span><span class="si">{</span><span class="n">output_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="extract_nhs_data_migrations-170"><a href="#extract_nhs_data_migrations-170"><span class="linenos">170</span></a>
-</span><span id="extract_nhs_data_migrations-171"><a href="#extract_nhs_data_migrations-171"><span class="linenos">171</span></a>    <span class="c1"># r2 -&gt; r3</span>
-</span><span id="extract_nhs_data_migrations-172"><a href="#extract_nhs_data_migrations-172"><span class="linenos">172</span></a>    <span class="n">file_path</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="extract_nhs_data_migrations-173"><a href="#extract_nhs_data_migrations-173"><span class="linenos">173</span></a>        <span class="n">DOWNLOADS_PATH</span>
-</span><span id="extract_nhs_data_migrations-174"><a href="#extract_nhs_data_migrations-174"><span class="linenos">174</span></a>        <span class="o">/</span> <span class="s2">&quot;Mapping Tables&quot;</span>
-</span><span id="extract_nhs_data_migrations-175"><a href="#extract_nhs_data_migrations-175"><span class="linenos">175</span></a>        <span class="o">/</span> <span class="s2">&quot;Updated&quot;</span>
-</span><span id="extract_nhs_data_migrations-176"><a href="#extract_nhs_data_migrations-176"><span class="linenos">176</span></a>        <span class="o">/</span> <span class="s2">&quot;Clinically Assured&quot;</span>
-</span><span id="extract_nhs_data_migrations-177"><a href="#extract_nhs_data_migrations-177"><span class="linenos">177</span></a>        <span class="o">/</span> <span class="s2">&quot;rctctv3map_uk_20200401000001.txt&quot;</span>
-</span><span id="extract_nhs_data_migrations-178"><a href="#extract_nhs_data_migrations-178"><span class="linenos">178</span></a>    <span class="p">)</span>
-</span><span id="extract_nhs_data_migrations-179"><a href="#extract_nhs_data_migrations-179"><span class="linenos">179</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_csv</span><span class="p">(</span><span class="n">file_path</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;</span><span class="se">\t</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="extract_nhs_data_migrations-180"><a href="#extract_nhs_data_migrations-180"><span class="linenos">180</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[[</span><span class="s2">&quot;V2_CONCEPTID&quot;</span><span class="p">,</span> <span class="s2">&quot;CTV3_CONCEPTID&quot;</span><span class="p">]]</span>
-</span><span id="extract_nhs_data_migrations-181"><a href="#extract_nhs_data_migrations-181"><span class="linenos">181</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;V2_CONCEPTID&quot;</span><span class="p">:</span> <span class="s2">&quot;read2&quot;</span><span class="p">,</span> <span class="s2">&quot;CTV3_CONCEPTID&quot;</span><span class="p">:</span> <span class="s2">&quot;read3&quot;</span><span class="p">})</span>
+            <div class="pdoc-code codehilite"><pre><span></span><span id="extract_nhs_data_migrations-166"><a href="#extract_nhs_data_migrations-166"><span class="linenos">166</span></a><span class="k">def</span><span class="w"> </span><span class="nf">extract_nhs_data_migrations</span><span class="p">():</span>
+</span><span id="extract_nhs_data_migrations-167"><a href="#extract_nhs_data_migrations-167"><span class="linenos">167</span></a>    <span class="c1"># NHS Data Migrations</span>
+</span><span id="extract_nhs_data_migrations-168"><a href="#extract_nhs_data_migrations-168"><span class="linenos">168</span></a>
+</span><span id="extract_nhs_data_migrations-169"><a href="#extract_nhs_data_migrations-169"><span class="linenos">169</span></a>    <span class="c1"># snomed only</span>
+</span><span id="extract_nhs_data_migrations-170"><a href="#extract_nhs_data_migrations-170"><span class="linenos">170</span></a>    <span class="n">file_path</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="extract_nhs_data_migrations-171"><a href="#extract_nhs_data_migrations-171"><span class="linenos">171</span></a>        <span class="n">DOWNLOADS_PATH</span>
+</span><span id="extract_nhs_data_migrations-172"><a href="#extract_nhs_data_migrations-172"><span class="linenos">172</span></a>        <span class="o">/</span> <span class="s2">&quot;Mapping Tables&quot;</span>
+</span><span id="extract_nhs_data_migrations-173"><a href="#extract_nhs_data_migrations-173"><span class="linenos">173</span></a>        <span class="o">/</span> <span class="s2">&quot;Updated&quot;</span>
+</span><span id="extract_nhs_data_migrations-174"><a href="#extract_nhs_data_migrations-174"><span class="linenos">174</span></a>        <span class="o">/</span> <span class="s2">&quot;Clinically Assured&quot;</span>
+</span><span id="extract_nhs_data_migrations-175"><a href="#extract_nhs_data_migrations-175"><span class="linenos">175</span></a>        <span class="o">/</span> <span class="s2">&quot;sctcremap_uk_20200401000001.txt&quot;</span>
+</span><span id="extract_nhs_data_migrations-176"><a href="#extract_nhs_data_migrations-176"><span class="linenos">176</span></a>    <span class="p">)</span>
+</span><span id="extract_nhs_data_migrations-177"><a href="#extract_nhs_data_migrations-177"><span class="linenos">177</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_csv</span><span class="p">(</span><span class="n">file_path</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;</span><span class="se">\t</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="extract_nhs_data_migrations-178"><a href="#extract_nhs_data_migrations-178"><span class="linenos">178</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[[</span><span class="s2">&quot;SCT_CONCEPTID&quot;</span><span class="p">]]</span>
+</span><span id="extract_nhs_data_migrations-179"><a href="#extract_nhs_data_migrations-179"><span class="linenos">179</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;SCT_CONCEPTID&quot;</span><span class="p">:</span> <span class="s2">&quot;snomed&quot;</span><span class="p">})</span>
+</span><span id="extract_nhs_data_migrations-180"><a href="#extract_nhs_data_migrations-180"><span class="linenos">180</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">drop_duplicates</span><span class="p">()</span>
+</span><span id="extract_nhs_data_migrations-181"><a href="#extract_nhs_data_migrations-181"><span class="linenos">181</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">astype</span><span class="p">(</span><span class="nb">str</span><span class="p">)</span>
 </span><span id="extract_nhs_data_migrations-182"><a href="#extract_nhs_data_migrations-182"><span class="linenos">182</span></a>
-</span><span id="extract_nhs_data_migrations-183"><a href="#extract_nhs_data_migrations-183"><span class="linenos">183</span></a>    <span class="n">output_path</span> <span class="o">=</span> <span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;read2_to_read3.parquet&quot;</span>
+</span><span id="extract_nhs_data_migrations-183"><a href="#extract_nhs_data_migrations-183"><span class="linenos">183</span></a>    <span class="n">output_path</span> <span class="o">=</span> <span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;snomed.parquet&quot;</span>
 </span><span id="extract_nhs_data_migrations-184"><a href="#extract_nhs_data_migrations-184"><span class="linenos">184</span></a>    <span class="n">df</span><span class="o">.</span><span class="n">to_parquet</span><span class="p">(</span><span class="n">output_path</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="extract_nhs_data_migrations-185"><a href="#extract_nhs_data_migrations-185"><span class="linenos">185</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Extracted: </span><span class="si">{</span><span class="n">output_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="extract_nhs_data_migrations-185"><a href="#extract_nhs_data_migrations-185"><span class="linenos">185</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Extracted: </span><span class="si">{</span><span class="n">output_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
 </span><span id="extract_nhs_data_migrations-186"><a href="#extract_nhs_data_migrations-186"><span class="linenos">186</span></a>
-</span><span id="extract_nhs_data_migrations-187"><a href="#extract_nhs_data_migrations-187"><span class="linenos">187</span></a>    <span class="c1"># r3-&gt;r2</span>
+</span><span id="extract_nhs_data_migrations-187"><a href="#extract_nhs_data_migrations-187"><span class="linenos">187</span></a>    <span class="c1"># r2 -&gt; r3</span>
 </span><span id="extract_nhs_data_migrations-188"><a href="#extract_nhs_data_migrations-188"><span class="linenos">188</span></a>    <span class="n">file_path</span> <span class="o">=</span> <span class="p">(</span>
 </span><span id="extract_nhs_data_migrations-189"><a href="#extract_nhs_data_migrations-189"><span class="linenos">189</span></a>        <span class="n">DOWNLOADS_PATH</span>
 </span><span id="extract_nhs_data_migrations-190"><a href="#extract_nhs_data_migrations-190"><span class="linenos">190</span></a>        <span class="o">/</span> <span class="s2">&quot;Mapping Tables&quot;</span>
 </span><span id="extract_nhs_data_migrations-191"><a href="#extract_nhs_data_migrations-191"><span class="linenos">191</span></a>        <span class="o">/</span> <span class="s2">&quot;Updated&quot;</span>
 </span><span id="extract_nhs_data_migrations-192"><a href="#extract_nhs_data_migrations-192"><span class="linenos">192</span></a>        <span class="o">/</span> <span class="s2">&quot;Clinically Assured&quot;</span>
-</span><span id="extract_nhs_data_migrations-193"><a href="#extract_nhs_data_migrations-193"><span class="linenos">193</span></a>        <span class="o">/</span> <span class="s2">&quot;ctv3rctmap_uk_20200401000002.txt&quot;</span>
+</span><span id="extract_nhs_data_migrations-193"><a href="#extract_nhs_data_migrations-193"><span class="linenos">193</span></a>        <span class="o">/</span> <span class="s2">&quot;rctctv3map_uk_20200401000001.txt&quot;</span>
 </span><span id="extract_nhs_data_migrations-194"><a href="#extract_nhs_data_migrations-194"><span class="linenos">194</span></a>    <span class="p">)</span>
 </span><span id="extract_nhs_data_migrations-195"><a href="#extract_nhs_data_migrations-195"><span class="linenos">195</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_csv</span><span class="p">(</span><span class="n">file_path</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;</span><span class="se">\t</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="extract_nhs_data_migrations-196"><a href="#extract_nhs_data_migrations-196"><span class="linenos">196</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[[</span><span class="s2">&quot;CTV3_CONCEPTID&quot;</span><span class="p">,</span> <span class="s2">&quot;V2_CONCEPTID&quot;</span><span class="p">]]</span>
-</span><span id="extract_nhs_data_migrations-197"><a href="#extract_nhs_data_migrations-197"><span class="linenos">197</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;CTV3_CONCEPTID&quot;</span><span class="p">:</span> <span class="s2">&quot;read3&quot;</span><span class="p">,</span> <span class="s2">&quot;V2_CONCEPTID&quot;</span><span class="p">:</span> <span class="s2">&quot;read2&quot;</span><span class="p">})</span>
-</span><span id="extract_nhs_data_migrations-198"><a href="#extract_nhs_data_migrations-198"><span class="linenos">198</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">drop_duplicates</span><span class="p">()</span>
-</span><span id="extract_nhs_data_migrations-199"><a href="#extract_nhs_data_migrations-199"><span class="linenos">199</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="o">~</span><span class="n">df</span><span class="p">[</span><span class="s2">&quot;read2&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="s2">&quot;^.*_.*$&quot;</span><span class="p">)]</span>  <span class="c1"># remove r2 codes with &#39;_&#39;</span>
-</span><span id="extract_nhs_data_migrations-200"><a href="#extract_nhs_data_migrations-200"><span class="linenos">200</span></a>
-</span><span id="extract_nhs_data_migrations-201"><a href="#extract_nhs_data_migrations-201"><span class="linenos">201</span></a>    <span class="n">output_path</span> <span class="o">=</span> <span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;read3_to_read2.parquet&quot;</span>
-</span><span id="extract_nhs_data_migrations-202"><a href="#extract_nhs_data_migrations-202"><span class="linenos">202</span></a>    <span class="n">df</span><span class="o">.</span><span class="n">to_parquet</span><span class="p">(</span><span class="n">output_path</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="extract_nhs_data_migrations-203"><a href="#extract_nhs_data_migrations-203"><span class="linenos">203</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Extracted: </span><span class="si">{</span><span class="n">output_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="extract_nhs_data_migrations-204"><a href="#extract_nhs_data_migrations-204"><span class="linenos">204</span></a>
-</span><span id="extract_nhs_data_migrations-205"><a href="#extract_nhs_data_migrations-205"><span class="linenos">205</span></a>    <span class="c1"># r2 -&gt; snomed</span>
-</span><span id="extract_nhs_data_migrations-206"><a href="#extract_nhs_data_migrations-206"><span class="linenos">206</span></a>    <span class="n">file_path</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="extract_nhs_data_migrations-207"><a href="#extract_nhs_data_migrations-207"><span class="linenos">207</span></a>        <span class="n">DOWNLOADS_PATH</span>
-</span><span id="extract_nhs_data_migrations-208"><a href="#extract_nhs_data_migrations-208"><span class="linenos">208</span></a>        <span class="o">/</span> <span class="s2">&quot;Mapping Tables&quot;</span>
-</span><span id="extract_nhs_data_migrations-209"><a href="#extract_nhs_data_migrations-209"><span class="linenos">209</span></a>        <span class="o">/</span> <span class="s2">&quot;Updated&quot;</span>
-</span><span id="extract_nhs_data_migrations-210"><a href="#extract_nhs_data_migrations-210"><span class="linenos">210</span></a>        <span class="o">/</span> <span class="s2">&quot;Clinically Assured&quot;</span>
-</span><span id="extract_nhs_data_migrations-211"><a href="#extract_nhs_data_migrations-211"><span class="linenos">211</span></a>        <span class="o">/</span> <span class="s2">&quot;rcsctmap2_uk_20200401000001.txt&quot;</span>
-</span><span id="extract_nhs_data_migrations-212"><a href="#extract_nhs_data_migrations-212"><span class="linenos">212</span></a>    <span class="p">)</span>
-</span><span id="extract_nhs_data_migrations-213"><a href="#extract_nhs_data_migrations-213"><span class="linenos">213</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_csv</span><span class="p">(</span><span class="n">file_path</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;</span><span class="se">\t</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="nb">str</span><span class="p">)</span>
-</span><span id="extract_nhs_data_migrations-214"><a href="#extract_nhs_data_migrations-214"><span class="linenos">214</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[[</span><span class="s2">&quot;ReadCode&quot;</span><span class="p">,</span> <span class="s2">&quot;ConceptId&quot;</span><span class="p">]]</span>
-</span><span id="extract_nhs_data_migrations-215"><a href="#extract_nhs_data_migrations-215"><span class="linenos">215</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;ReadCode&quot;</span><span class="p">:</span> <span class="s2">&quot;read2&quot;</span><span class="p">,</span> <span class="s2">&quot;ConceptId&quot;</span><span class="p">:</span> <span class="s2">&quot;snomed&quot;</span><span class="p">})</span>
+</span><span id="extract_nhs_data_migrations-196"><a href="#extract_nhs_data_migrations-196"><span class="linenos">196</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[[</span><span class="s2">&quot;V2_CONCEPTID&quot;</span><span class="p">,</span> <span class="s2">&quot;CTV3_CONCEPTID&quot;</span><span class="p">]]</span>
+</span><span id="extract_nhs_data_migrations-197"><a href="#extract_nhs_data_migrations-197"><span class="linenos">197</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;V2_CONCEPTID&quot;</span><span class="p">:</span> <span class="s2">&quot;read2&quot;</span><span class="p">,</span> <span class="s2">&quot;CTV3_CONCEPTID&quot;</span><span class="p">:</span> <span class="s2">&quot;read3&quot;</span><span class="p">})</span>
+</span><span id="extract_nhs_data_migrations-198"><a href="#extract_nhs_data_migrations-198"><span class="linenos">198</span></a>
+</span><span id="extract_nhs_data_migrations-199"><a href="#extract_nhs_data_migrations-199"><span class="linenos">199</span></a>    <span class="n">output_path</span> <span class="o">=</span> <span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;read2_to_read3.parquet&quot;</span>
+</span><span id="extract_nhs_data_migrations-200"><a href="#extract_nhs_data_migrations-200"><span class="linenos">200</span></a>    <span class="n">df</span><span class="o">.</span><span class="n">to_parquet</span><span class="p">(</span><span class="n">output_path</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="extract_nhs_data_migrations-201"><a href="#extract_nhs_data_migrations-201"><span class="linenos">201</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Extracted: </span><span class="si">{</span><span class="n">output_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="extract_nhs_data_migrations-202"><a href="#extract_nhs_data_migrations-202"><span class="linenos">202</span></a>
+</span><span id="extract_nhs_data_migrations-203"><a href="#extract_nhs_data_migrations-203"><span class="linenos">203</span></a>    <span class="c1"># r3-&gt;r2</span>
+</span><span id="extract_nhs_data_migrations-204"><a href="#extract_nhs_data_migrations-204"><span class="linenos">204</span></a>    <span class="n">file_path</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="extract_nhs_data_migrations-205"><a href="#extract_nhs_data_migrations-205"><span class="linenos">205</span></a>        <span class="n">DOWNLOADS_PATH</span>
+</span><span id="extract_nhs_data_migrations-206"><a href="#extract_nhs_data_migrations-206"><span class="linenos">206</span></a>        <span class="o">/</span> <span class="s2">&quot;Mapping Tables&quot;</span>
+</span><span id="extract_nhs_data_migrations-207"><a href="#extract_nhs_data_migrations-207"><span class="linenos">207</span></a>        <span class="o">/</span> <span class="s2">&quot;Updated&quot;</span>
+</span><span id="extract_nhs_data_migrations-208"><a href="#extract_nhs_data_migrations-208"><span class="linenos">208</span></a>        <span class="o">/</span> <span class="s2">&quot;Clinically Assured&quot;</span>
+</span><span id="extract_nhs_data_migrations-209"><a href="#extract_nhs_data_migrations-209"><span class="linenos">209</span></a>        <span class="o">/</span> <span class="s2">&quot;ctv3rctmap_uk_20200401000002.txt&quot;</span>
+</span><span id="extract_nhs_data_migrations-210"><a href="#extract_nhs_data_migrations-210"><span class="linenos">210</span></a>    <span class="p">)</span>
+</span><span id="extract_nhs_data_migrations-211"><a href="#extract_nhs_data_migrations-211"><span class="linenos">211</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_csv</span><span class="p">(</span><span class="n">file_path</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;</span><span class="se">\t</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="extract_nhs_data_migrations-212"><a href="#extract_nhs_data_migrations-212"><span class="linenos">212</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[[</span><span class="s2">&quot;CTV3_CONCEPTID&quot;</span><span class="p">,</span> <span class="s2">&quot;V2_CONCEPTID&quot;</span><span class="p">]]</span>
+</span><span id="extract_nhs_data_migrations-213"><a href="#extract_nhs_data_migrations-213"><span class="linenos">213</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;CTV3_CONCEPTID&quot;</span><span class="p">:</span> <span class="s2">&quot;read3&quot;</span><span class="p">,</span> <span class="s2">&quot;V2_CONCEPTID&quot;</span><span class="p">:</span> <span class="s2">&quot;read2&quot;</span><span class="p">})</span>
+</span><span id="extract_nhs_data_migrations-214"><a href="#extract_nhs_data_migrations-214"><span class="linenos">214</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">drop_duplicates</span><span class="p">()</span>
+</span><span id="extract_nhs_data_migrations-215"><a href="#extract_nhs_data_migrations-215"><span class="linenos">215</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="o">~</span><span class="n">df</span><span class="p">[</span><span class="s2">&quot;read2&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="s2">&quot;^.*_.*$&quot;</span><span class="p">)]</span>  <span class="c1"># remove r2 codes with &#39;_&#39;</span>
 </span><span id="extract_nhs_data_migrations-216"><a href="#extract_nhs_data_migrations-216"><span class="linenos">216</span></a>
-</span><span id="extract_nhs_data_migrations-217"><a href="#extract_nhs_data_migrations-217"><span class="linenos">217</span></a>    <span class="n">output_path</span> <span class="o">=</span> <span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;read2_to_snomed.parquet&quot;</span>
+</span><span id="extract_nhs_data_migrations-217"><a href="#extract_nhs_data_migrations-217"><span class="linenos">217</span></a>    <span class="n">output_path</span> <span class="o">=</span> <span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;read3_to_read2.parquet&quot;</span>
 </span><span id="extract_nhs_data_migrations-218"><a href="#extract_nhs_data_migrations-218"><span class="linenos">218</span></a>    <span class="n">df</span><span class="o">.</span><span class="n">to_parquet</span><span class="p">(</span><span class="n">output_path</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="extract_nhs_data_migrations-219"><a href="#extract_nhs_data_migrations-219"><span class="linenos">219</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Extracted: </span><span class="si">{</span><span class="n">output_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="extract_nhs_data_migrations-219"><a href="#extract_nhs_data_migrations-219"><span class="linenos">219</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Extracted: </span><span class="si">{</span><span class="n">output_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
 </span><span id="extract_nhs_data_migrations-220"><a href="#extract_nhs_data_migrations-220"><span class="linenos">220</span></a>
-</span><span id="extract_nhs_data_migrations-221"><a href="#extract_nhs_data_migrations-221"><span class="linenos">221</span></a>    <span class="c1"># r3-&gt;snomed</span>
+</span><span id="extract_nhs_data_migrations-221"><a href="#extract_nhs_data_migrations-221"><span class="linenos">221</span></a>    <span class="c1"># r2 -&gt; snomed</span>
 </span><span id="extract_nhs_data_migrations-222"><a href="#extract_nhs_data_migrations-222"><span class="linenos">222</span></a>    <span class="n">file_path</span> <span class="o">=</span> <span class="p">(</span>
 </span><span id="extract_nhs_data_migrations-223"><a href="#extract_nhs_data_migrations-223"><span class="linenos">223</span></a>        <span class="n">DOWNLOADS_PATH</span>
 </span><span id="extract_nhs_data_migrations-224"><a href="#extract_nhs_data_migrations-224"><span class="linenos">224</span></a>        <span class="o">/</span> <span class="s2">&quot;Mapping Tables&quot;</span>
 </span><span id="extract_nhs_data_migrations-225"><a href="#extract_nhs_data_migrations-225"><span class="linenos">225</span></a>        <span class="o">/</span> <span class="s2">&quot;Updated&quot;</span>
 </span><span id="extract_nhs_data_migrations-226"><a href="#extract_nhs_data_migrations-226"><span class="linenos">226</span></a>        <span class="o">/</span> <span class="s2">&quot;Clinically Assured&quot;</span>
-</span><span id="extract_nhs_data_migrations-227"><a href="#extract_nhs_data_migrations-227"><span class="linenos">227</span></a>        <span class="o">/</span> <span class="s2">&quot;ctv3sctmap2_uk_20200401000001.txt&quot;</span>
+</span><span id="extract_nhs_data_migrations-227"><a href="#extract_nhs_data_migrations-227"><span class="linenos">227</span></a>        <span class="o">/</span> <span class="s2">&quot;rcsctmap2_uk_20200401000001.txt&quot;</span>
 </span><span id="extract_nhs_data_migrations-228"><a href="#extract_nhs_data_migrations-228"><span class="linenos">228</span></a>    <span class="p">)</span>
 </span><span id="extract_nhs_data_migrations-229"><a href="#extract_nhs_data_migrations-229"><span class="linenos">229</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_csv</span><span class="p">(</span><span class="n">file_path</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;</span><span class="se">\t</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="nb">str</span><span class="p">)</span>
-</span><span id="extract_nhs_data_migrations-230"><a href="#extract_nhs_data_migrations-230"><span class="linenos">230</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[[</span><span class="s2">&quot;CTV3_TERMID&quot;</span><span class="p">,</span> <span class="s2">&quot;SCT_CONCEPTID&quot;</span><span class="p">]]</span>
-</span><span id="extract_nhs_data_migrations-231"><a href="#extract_nhs_data_migrations-231"><span class="linenos">231</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;CTV3_TERMID&quot;</span><span class="p">:</span> <span class="s2">&quot;read3&quot;</span><span class="p">,</span> <span class="s2">&quot;SCT_CONCEPTID&quot;</span><span class="p">:</span> <span class="s2">&quot;snomed&quot;</span><span class="p">})</span>
-</span><span id="extract_nhs_data_migrations-232"><a href="#extract_nhs_data_migrations-232"><span class="linenos">232</span></a>    <span class="n">df</span><span class="p">[</span><span class="s2">&quot;snomed&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="s2">&quot;snomed&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">astype</span><span class="p">(</span><span class="nb">str</span><span class="p">)</span>
-</span><span id="extract_nhs_data_migrations-233"><a href="#extract_nhs_data_migrations-233"><span class="linenos">233</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="o">~</span><span class="n">df</span><span class="p">[</span><span class="s2">&quot;snomed&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="s2">&quot;^.*_.*$&quot;</span><span class="p">)]</span>  <span class="c1"># remove snomed codes with &#39;_&#39;</span>
-</span><span id="extract_nhs_data_migrations-234"><a href="#extract_nhs_data_migrations-234"><span class="linenos">234</span></a>
-</span><span id="extract_nhs_data_migrations-235"><a href="#extract_nhs_data_migrations-235"><span class="linenos">235</span></a>    <span class="n">output_path</span> <span class="o">=</span> <span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;read3_to_snomed.parquet&quot;</span>
-</span><span id="extract_nhs_data_migrations-236"><a href="#extract_nhs_data_migrations-236"><span class="linenos">236</span></a>    <span class="n">df</span><span class="o">.</span><span class="n">to_parquet</span><span class="p">(</span><span class="n">output_path</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="extract_nhs_data_migrations-237"><a href="#extract_nhs_data_migrations-237"><span class="linenos">237</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Extracted: </span><span class="si">{</span><span class="n">output_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="extract_nhs_data_migrations-230"><a href="#extract_nhs_data_migrations-230"><span class="linenos">230</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[[</span><span class="s2">&quot;ReadCode&quot;</span><span class="p">,</span> <span class="s2">&quot;ConceptId&quot;</span><span class="p">]]</span>
+</span><span id="extract_nhs_data_migrations-231"><a href="#extract_nhs_data_migrations-231"><span class="linenos">231</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;ReadCode&quot;</span><span class="p">:</span> <span class="s2">&quot;read2&quot;</span><span class="p">,</span> <span class="s2">&quot;ConceptId&quot;</span><span class="p">:</span> <span class="s2">&quot;snomed&quot;</span><span class="p">})</span>
+</span><span id="extract_nhs_data_migrations-232"><a href="#extract_nhs_data_migrations-232"><span class="linenos">232</span></a>
+</span><span id="extract_nhs_data_migrations-233"><a href="#extract_nhs_data_migrations-233"><span class="linenos">233</span></a>    <span class="n">output_path</span> <span class="o">=</span> <span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;read2_to_snomed.parquet&quot;</span>
+</span><span id="extract_nhs_data_migrations-234"><a href="#extract_nhs_data_migrations-234"><span class="linenos">234</span></a>    <span class="n">df</span><span class="o">.</span><span class="n">to_parquet</span><span class="p">(</span><span class="n">output_path</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="extract_nhs_data_migrations-235"><a href="#extract_nhs_data_migrations-235"><span class="linenos">235</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Extracted: </span><span class="si">{</span><span class="n">output_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="extract_nhs_data_migrations-236"><a href="#extract_nhs_data_migrations-236"><span class="linenos">236</span></a>
+</span><span id="extract_nhs_data_migrations-237"><a href="#extract_nhs_data_migrations-237"><span class="linenos">237</span></a>    <span class="c1"># r3-&gt;snomed</span>
+</span><span id="extract_nhs_data_migrations-238"><a href="#extract_nhs_data_migrations-238"><span class="linenos">238</span></a>    <span class="n">file_path</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="extract_nhs_data_migrations-239"><a href="#extract_nhs_data_migrations-239"><span class="linenos">239</span></a>        <span class="n">DOWNLOADS_PATH</span>
+</span><span id="extract_nhs_data_migrations-240"><a href="#extract_nhs_data_migrations-240"><span class="linenos">240</span></a>        <span class="o">/</span> <span class="s2">&quot;Mapping Tables&quot;</span>
+</span><span id="extract_nhs_data_migrations-241"><a href="#extract_nhs_data_migrations-241"><span class="linenos">241</span></a>        <span class="o">/</span> <span class="s2">&quot;Updated&quot;</span>
+</span><span id="extract_nhs_data_migrations-242"><a href="#extract_nhs_data_migrations-242"><span class="linenos">242</span></a>        <span class="o">/</span> <span class="s2">&quot;Clinically Assured&quot;</span>
+</span><span id="extract_nhs_data_migrations-243"><a href="#extract_nhs_data_migrations-243"><span class="linenos">243</span></a>        <span class="o">/</span> <span class="s2">&quot;ctv3sctmap2_uk_20200401000001.txt&quot;</span>
+</span><span id="extract_nhs_data_migrations-244"><a href="#extract_nhs_data_migrations-244"><span class="linenos">244</span></a>    <span class="p">)</span>
+</span><span id="extract_nhs_data_migrations-245"><a href="#extract_nhs_data_migrations-245"><span class="linenos">245</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_csv</span><span class="p">(</span><span class="n">file_path</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot;</span><span class="se">\t</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="nb">str</span><span class="p">)</span>
+</span><span id="extract_nhs_data_migrations-246"><a href="#extract_nhs_data_migrations-246"><span class="linenos">246</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[[</span><span class="s2">&quot;CTV3_TERMID&quot;</span><span class="p">,</span> <span class="s2">&quot;SCT_CONCEPTID&quot;</span><span class="p">]]</span>
+</span><span id="extract_nhs_data_migrations-247"><a href="#extract_nhs_data_migrations-247"><span class="linenos">247</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;CTV3_TERMID&quot;</span><span class="p">:</span> <span class="s2">&quot;read3&quot;</span><span class="p">,</span> <span class="s2">&quot;SCT_CONCEPTID&quot;</span><span class="p">:</span> <span class="s2">&quot;snomed&quot;</span><span class="p">})</span>
+</span><span id="extract_nhs_data_migrations-248"><a href="#extract_nhs_data_migrations-248"><span class="linenos">248</span></a>    <span class="n">df</span><span class="p">[</span><span class="s2">&quot;snomed&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="s2">&quot;snomed&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">astype</span><span class="p">(</span><span class="nb">str</span><span class="p">)</span>
+</span><span id="extract_nhs_data_migrations-249"><a href="#extract_nhs_data_migrations-249"><span class="linenos">249</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="o">~</span><span class="n">df</span><span class="p">[</span><span class="s2">&quot;snomed&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="s2">&quot;^.*_.*$&quot;</span><span class="p">)]</span>  <span class="c1"># remove snomed codes with &#39;_&#39;</span>
+</span><span id="extract_nhs_data_migrations-250"><a href="#extract_nhs_data_migrations-250"><span class="linenos">250</span></a>
+</span><span id="extract_nhs_data_migrations-251"><a href="#extract_nhs_data_migrations-251"><span class="linenos">251</span></a>    <span class="n">output_path</span> <span class="o">=</span> <span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;read3_to_snomed.parquet&quot;</span>
+</span><span id="extract_nhs_data_migrations-252"><a href="#extract_nhs_data_migrations-252"><span class="linenos">252</span></a>    <span class="n">df</span><span class="o">.</span><span class="n">to_parquet</span><span class="p">(</span><span class="n">output_path</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="extract_nhs_data_migrations-253"><a href="#extract_nhs_data_migrations-253"><span class="linenos">253</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Extracted: </span><span class="si">{</span><span class="n">output_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
 </span></pre></div>
 
 
@@ -960,82 +977,82 @@
 
     </div>
     <a class="headerlink" href="#extract_nhs_read_browser"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="extract_nhs_read_browser-240"><a href="#extract_nhs_read_browser-240"><span class="linenos">240</span></a><span class="k">def</span><span class="w"> </span><span class="nf">extract_nhs_read_browser</span><span class="p">():</span>
-</span><span id="extract_nhs_read_browser-241"><a href="#extract_nhs_read_browser-241"><span class="linenos">241</span></a>    <span class="c1"># r2 only</span>
-</span><span id="extract_nhs_read_browser-242"><a href="#extract_nhs_read_browser-242"><span class="linenos">242</span></a>    <span class="n">input_path</span> <span class="o">=</span> <span class="n">DOWNLOADS_PATH</span> <span class="o">/</span> <span class="s2">&quot;Standard&quot;</span> <span class="o">/</span> <span class="s2">&quot;V2&quot;</span> <span class="o">/</span> <span class="s2">&quot;ANCESTOR.DBF&quot;</span>
-</span><span id="extract_nhs_read_browser-243"><a href="#extract_nhs_read_browser-243"><span class="linenos">243</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">simpledbf</span><span class="o">.</span><span class="n">Dbf5</span><span class="p">(</span><span class="n">input_path</span><span class="p">)</span><span class="o">.</span><span class="n">to_dataframe</span><span class="p">()</span>
-</span><span id="extract_nhs_read_browser-244"><a href="#extract_nhs_read_browser-244"><span class="linenos">244</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">concat</span><span class="p">([</span><span class="n">df</span><span class="p">[</span><span class="s2">&quot;READCODE&quot;</span><span class="p">],</span> <span class="n">df</span><span class="p">[</span><span class="s2">&quot;DESCENDANT&quot;</span><span class="p">]])</span>
-</span><span id="extract_nhs_read_browser-245"><a href="#extract_nhs_read_browser-245"><span class="linenos">245</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">(</span><span class="n">df</span><span class="o">.</span><span class="n">drop_duplicates</span><span class="p">())</span>
-</span><span id="extract_nhs_read_browser-246"><a href="#extract_nhs_read_browser-246"><span class="linenos">246</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="mi">0</span><span class="p">:</span> <span class="s2">&quot;read2&quot;</span><span class="p">})</span>
-</span><span id="extract_nhs_read_browser-247"><a href="#extract_nhs_read_browser-247"><span class="linenos">247</span></a>    <span class="n">output_path</span> <span class="o">=</span> <span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;read2.parquet&quot;</span>
-</span><span id="extract_nhs_read_browser-248"><a href="#extract_nhs_read_browser-248"><span class="linenos">248</span></a>    <span class="n">df</span><span class="o">.</span><span class="n">to_parquet</span><span class="p">(</span><span class="n">output_path</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="extract_nhs_read_browser-249"><a href="#extract_nhs_read_browser-249"><span class="linenos">249</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Extracted: </span><span class="si">{</span><span class="n">output_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="extract_nhs_read_browser-250"><a href="#extract_nhs_read_browser-250"><span class="linenos">250</span></a>
-</span><span id="extract_nhs_read_browser-251"><a href="#extract_nhs_read_browser-251"><span class="linenos">251</span></a>    <span class="c1"># r2 -&gt; atc</span>
-</span><span id="extract_nhs_read_browser-252"><a href="#extract_nhs_read_browser-252"><span class="linenos">252</span></a>    <span class="n">input_path</span> <span class="o">=</span> <span class="n">DOWNLOADS_PATH</span> <span class="o">/</span> <span class="s2">&quot;Standard&quot;</span> <span class="o">/</span> <span class="s2">&quot;V2&quot;</span> <span class="o">/</span> <span class="s2">&quot;ATC.DBF&quot;</span>
-</span><span id="extract_nhs_read_browser-253"><a href="#extract_nhs_read_browser-253"><span class="linenos">253</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">simpledbf</span><span class="o">.</span><span class="n">Dbf5</span><span class="p">(</span><span class="n">input_path</span><span class="p">)</span><span class="o">.</span><span class="n">to_dataframe</span><span class="p">()</span>
-</span><span id="extract_nhs_read_browser-254"><a href="#extract_nhs_read_browser-254"><span class="linenos">254</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[[</span><span class="s2">&quot;READCODE&quot;</span><span class="p">,</span> <span class="s2">&quot;ATC&quot;</span><span class="p">]]</span>
-</span><span id="extract_nhs_read_browser-255"><a href="#extract_nhs_read_browser-255"><span class="linenos">255</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;READCODE&quot;</span><span class="p">:</span> <span class="s2">&quot;read2&quot;</span><span class="p">,</span> <span class="s2">&quot;ATC&quot;</span><span class="p">:</span> <span class="s2">&quot;atc&quot;</span><span class="p">})</span>
-</span><span id="extract_nhs_read_browser-256"><a href="#extract_nhs_read_browser-256"><span class="linenos">256</span></a>    <span class="n">output_path</span> <span class="o">=</span> <span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;read2_to_atc.parquet&quot;</span>
-</span><span id="extract_nhs_read_browser-257"><a href="#extract_nhs_read_browser-257"><span class="linenos">257</span></a>    <span class="n">df</span><span class="o">.</span><span class="n">to_parquet</span><span class="p">(</span><span class="n">output_path</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="extract_nhs_read_browser-258"><a href="#extract_nhs_read_browser-258"><span class="linenos">258</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Extracted: </span><span class="si">{</span><span class="n">output_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="extract_nhs_read_browser-259"><a href="#extract_nhs_read_browser-259"><span class="linenos">259</span></a>
-</span><span id="extract_nhs_read_browser-260"><a href="#extract_nhs_read_browser-260"><span class="linenos">260</span></a>    <span class="c1"># r2 -&gt; icd10</span>
-</span><span id="extract_nhs_read_browser-261"><a href="#extract_nhs_read_browser-261"><span class="linenos">261</span></a>    <span class="n">input_path</span> <span class="o">=</span> <span class="n">DOWNLOADS_PATH</span> <span class="o">/</span> <span class="s2">&quot;Standard&quot;</span> <span class="o">/</span> <span class="s2">&quot;V2&quot;</span> <span class="o">/</span> <span class="s2">&quot;ICD10.DBF&quot;</span>
-</span><span id="extract_nhs_read_browser-262"><a href="#extract_nhs_read_browser-262"><span class="linenos">262</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">simpledbf</span><span class="o">.</span><span class="n">Dbf5</span><span class="p">(</span><span class="n">input_path</span><span class="p">)</span><span class="o">.</span><span class="n">to_dataframe</span><span class="p">()</span>
-</span><span id="extract_nhs_read_browser-263"><a href="#extract_nhs_read_browser-263"><span class="linenos">263</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[[</span><span class="s2">&quot;READ_CODE&quot;</span><span class="p">,</span> <span class="s2">&quot;TARG_CODE&quot;</span><span class="p">]]</span>
-</span><span id="extract_nhs_read_browser-264"><a href="#extract_nhs_read_browser-264"><span class="linenos">264</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;READ_CODE&quot;</span><span class="p">:</span> <span class="s2">&quot;read2&quot;</span><span class="p">,</span> <span class="s2">&quot;TARG_CODE&quot;</span><span class="p">:</span> <span class="s2">&quot;icd10&quot;</span><span class="p">})</span>
-</span><span id="extract_nhs_read_browser-265"><a href="#extract_nhs_read_browser-265"><span class="linenos">265</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="o">~</span><span class="n">df</span><span class="p">[</span><span class="s2">&quot;icd10&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="s2">&quot;^.*-.*$&quot;</span><span class="p">)]</span>  <span class="c1"># remove codes with &#39;-&#39;</span>
-</span><span id="extract_nhs_read_browser-266"><a href="#extract_nhs_read_browser-266"><span class="linenos">266</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="o">~</span><span class="n">df</span><span class="p">[</span><span class="s2">&quot;read2&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="s2">&quot;^.*-.*$&quot;</span><span class="p">)]</span>  <span class="c1"># remove codes with &#39;-&#39;</span>
-</span><span id="extract_nhs_read_browser-267"><a href="#extract_nhs_read_browser-267"><span class="linenos">267</span></a>    <span class="n">output_path</span> <span class="o">=</span> <span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;read2_to_icd10.parquet&quot;</span>
-</span><span id="extract_nhs_read_browser-268"><a href="#extract_nhs_read_browser-268"><span class="linenos">268</span></a>    <span class="n">df</span><span class="o">.</span><span class="n">to_parquet</span><span class="p">(</span><span class="n">output_path</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="extract_nhs_read_browser-269"><a href="#extract_nhs_read_browser-269"><span class="linenos">269</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Extracted: </span><span class="si">{</span><span class="n">output_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="extract_nhs_read_browser-270"><a href="#extract_nhs_read_browser-270"><span class="linenos">270</span></a>
-</span><span id="extract_nhs_read_browser-271"><a href="#extract_nhs_read_browser-271"><span class="linenos">271</span></a>    <span class="c1"># r2 -&gt; opcs4</span>
-</span><span id="extract_nhs_read_browser-272"><a href="#extract_nhs_read_browser-272"><span class="linenos">272</span></a>    <span class="n">input_path</span> <span class="o">=</span> <span class="n">DOWNLOADS_PATH</span> <span class="o">/</span> <span class="s2">&quot;Standard&quot;</span> <span class="o">/</span> <span class="s2">&quot;V2&quot;</span> <span class="o">/</span> <span class="s2">&quot;OPCS4V3.DBF&quot;</span>
-</span><span id="extract_nhs_read_browser-273"><a href="#extract_nhs_read_browser-273"><span class="linenos">273</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">simpledbf</span><span class="o">.</span><span class="n">Dbf5</span><span class="p">(</span><span class="n">input_path</span><span class="p">)</span><span class="o">.</span><span class="n">to_dataframe</span><span class="p">()</span>
-</span><span id="extract_nhs_read_browser-274"><a href="#extract_nhs_read_browser-274"><span class="linenos">274</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[[</span><span class="s2">&quot;READ_CODE&quot;</span><span class="p">,</span> <span class="s2">&quot;TARG_CODE&quot;</span><span class="p">]]</span>
-</span><span id="extract_nhs_read_browser-275"><a href="#extract_nhs_read_browser-275"><span class="linenos">275</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;READ_CODE&quot;</span><span class="p">:</span> <span class="s2">&quot;read2&quot;</span><span class="p">,</span> <span class="s2">&quot;TARG_CODE&quot;</span><span class="p">:</span> <span class="s2">&quot;opcs4&quot;</span><span class="p">})</span>
-</span><span id="extract_nhs_read_browser-276"><a href="#extract_nhs_read_browser-276"><span class="linenos">276</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="o">~</span><span class="n">df</span><span class="p">[</span><span class="s2">&quot;opcs4&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="s2">&quot;^.*-.*$&quot;</span><span class="p">)]</span>  <span class="c1"># remove codes with &#39;-&#39;</span>
-</span><span id="extract_nhs_read_browser-277"><a href="#extract_nhs_read_browser-277"><span class="linenos">277</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="o">~</span><span class="n">df</span><span class="p">[</span><span class="s2">&quot;read2&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="s2">&quot;^.*-.*$&quot;</span><span class="p">)]</span>  <span class="c1"># remove codes with &#39;-&#39;</span>
-</span><span id="extract_nhs_read_browser-278"><a href="#extract_nhs_read_browser-278"><span class="linenos">278</span></a>    <span class="n">output_path</span> <span class="o">=</span> <span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;read2_to_opcs4.parquet&quot;</span>
-</span><span id="extract_nhs_read_browser-279"><a href="#extract_nhs_read_browser-279"><span class="linenos">279</span></a>    <span class="n">df</span><span class="o">.</span><span class="n">to_parquet</span><span class="p">(</span><span class="n">output_path</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="extract_nhs_read_browser-280"><a href="#extract_nhs_read_browser-280"><span class="linenos">280</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Extracted: </span><span class="si">{</span><span class="n">output_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="extract_nhs_read_browser-281"><a href="#extract_nhs_read_browser-281"><span class="linenos">281</span></a>
-</span><span id="extract_nhs_read_browser-282"><a href="#extract_nhs_read_browser-282"><span class="linenos">282</span></a>    <span class="c1"># r3 only</span>
-</span><span id="extract_nhs_read_browser-283"><a href="#extract_nhs_read_browser-283"><span class="linenos">283</span></a>    <span class="n">input_path</span> <span class="o">=</span> <span class="n">DOWNLOADS_PATH</span> <span class="o">/</span> <span class="s2">&quot;Standard&quot;</span> <span class="o">/</span> <span class="s2">&quot;V3&quot;</span> <span class="o">/</span> <span class="s2">&quot;ANCESTOR.DBF&quot;</span>
-</span><span id="extract_nhs_read_browser-284"><a href="#extract_nhs_read_browser-284"><span class="linenos">284</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">simpledbf</span><span class="o">.</span><span class="n">Dbf5</span><span class="p">(</span><span class="n">input_path</span><span class="p">)</span><span class="o">.</span><span class="n">to_dataframe</span><span class="p">()</span>
-</span><span id="extract_nhs_read_browser-285"><a href="#extract_nhs_read_browser-285"><span class="linenos">285</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">concat</span><span class="p">([</span><span class="n">df</span><span class="p">[</span><span class="s2">&quot;READCODE&quot;</span><span class="p">],</span> <span class="n">df</span><span class="p">[</span><span class="s2">&quot;DESCENDANT&quot;</span><span class="p">]])</span>
-</span><span id="extract_nhs_read_browser-286"><a href="#extract_nhs_read_browser-286"><span class="linenos">286</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">(</span><span class="n">df</span><span class="o">.</span><span class="n">drop_duplicates</span><span class="p">())</span>
-</span><span id="extract_nhs_read_browser-287"><a href="#extract_nhs_read_browser-287"><span class="linenos">287</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="mi">0</span><span class="p">:</span> <span class="s2">&quot;read3&quot;</span><span class="p">})</span>
-</span><span id="extract_nhs_read_browser-288"><a href="#extract_nhs_read_browser-288"><span class="linenos">288</span></a>    <span class="n">output_path</span> <span class="o">=</span> <span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;read3.parquet&quot;</span>
-</span><span id="extract_nhs_read_browser-289"><a href="#extract_nhs_read_browser-289"><span class="linenos">289</span></a>    <span class="n">df</span><span class="o">.</span><span class="n">to_parquet</span><span class="p">(</span><span class="n">output_path</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="extract_nhs_read_browser-290"><a href="#extract_nhs_read_browser-290"><span class="linenos">290</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Extracted: </span><span class="si">{</span><span class="n">output_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="extract_nhs_read_browser-291"><a href="#extract_nhs_read_browser-291"><span class="linenos">291</span></a>
-</span><span id="extract_nhs_read_browser-292"><a href="#extract_nhs_read_browser-292"><span class="linenos">292</span></a>    <span class="c1"># r3 -&gt; icd10</span>
-</span><span id="extract_nhs_read_browser-293"><a href="#extract_nhs_read_browser-293"><span class="linenos">293</span></a>    <span class="n">input_path</span> <span class="o">=</span> <span class="n">DOWNLOADS_PATH</span> <span class="o">/</span> <span class="s2">&quot;Standard&quot;</span> <span class="o">/</span> <span class="s2">&quot;V3&quot;</span> <span class="o">/</span> <span class="s2">&quot;ICD10.DBF&quot;</span>
-</span><span id="extract_nhs_read_browser-294"><a href="#extract_nhs_read_browser-294"><span class="linenos">294</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">simpledbf</span><span class="o">.</span><span class="n">Dbf5</span><span class="p">(</span><span class="n">input_path</span><span class="p">)</span><span class="o">.</span><span class="n">to_dataframe</span><span class="p">()</span>
-</span><span id="extract_nhs_read_browser-295"><a href="#extract_nhs_read_browser-295"><span class="linenos">295</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[[</span><span class="s2">&quot;READ_CODE&quot;</span><span class="p">,</span> <span class="s2">&quot;TARG_CODE&quot;</span><span class="p">]]</span>
-</span><span id="extract_nhs_read_browser-296"><a href="#extract_nhs_read_browser-296"><span class="linenos">296</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;READ_CODE&quot;</span><span class="p">:</span> <span class="s2">&quot;read3&quot;</span><span class="p">,</span> <span class="s2">&quot;TARG_CODE&quot;</span><span class="p">:</span> <span class="s2">&quot;icd10&quot;</span><span class="p">})</span>
-</span><span id="extract_nhs_read_browser-297"><a href="#extract_nhs_read_browser-297"><span class="linenos">297</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="o">~</span><span class="n">df</span><span class="p">[</span><span class="s2">&quot;icd10&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="s2">&quot;^.*-.*$&quot;</span><span class="p">)]</span>  <span class="c1"># remove codes with &#39;-&#39;</span>
-</span><span id="extract_nhs_read_browser-298"><a href="#extract_nhs_read_browser-298"><span class="linenos">298</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="o">~</span><span class="n">df</span><span class="p">[</span><span class="s2">&quot;read3&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="s2">&quot;^.*-.*$&quot;</span><span class="p">)]</span>  <span class="c1"># remove codes with &#39;-&#39;</span>
-</span><span id="extract_nhs_read_browser-299"><a href="#extract_nhs_read_browser-299"><span class="linenos">299</span></a>    <span class="n">output_path</span> <span class="o">=</span> <span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;read3_to_icd10.parquet&quot;</span>
-</span><span id="extract_nhs_read_browser-300"><a href="#extract_nhs_read_browser-300"><span class="linenos">300</span></a>    <span class="n">df</span><span class="o">.</span><span class="n">to_parquet</span><span class="p">(</span><span class="n">output_path</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="extract_nhs_read_browser-301"><a href="#extract_nhs_read_browser-301"><span class="linenos">301</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Extracted: </span><span class="si">{</span><span class="n">output_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
-</span><span id="extract_nhs_read_browser-302"><a href="#extract_nhs_read_browser-302"><span class="linenos">302</span></a>
-</span><span id="extract_nhs_read_browser-303"><a href="#extract_nhs_read_browser-303"><span class="linenos">303</span></a>    <span class="c1"># r3 -&gt; icd9</span>
-</span><span id="extract_nhs_read_browser-304"><a href="#extract_nhs_read_browser-304"><span class="linenos">304</span></a>    <span class="c1"># dbf = simpledbf.Dbf5(&#39;build/maps/downloads/Standard/V3/ICD9V3.DBF&#39;)</span>
-</span><span id="extract_nhs_read_browser-305"><a href="#extract_nhs_read_browser-305"><span class="linenos">305</span></a>
-</span><span id="extract_nhs_read_browser-306"><a href="#extract_nhs_read_browser-306"><span class="linenos">306</span></a>    <span class="c1"># r3 -&gt; opcs4</span>
-</span><span id="extract_nhs_read_browser-307"><a href="#extract_nhs_read_browser-307"><span class="linenos">307</span></a>    <span class="n">input_path</span> <span class="o">=</span> <span class="n">DOWNLOADS_PATH</span> <span class="o">/</span> <span class="s2">&quot;Standard&quot;</span> <span class="o">/</span> <span class="s2">&quot;V3&quot;</span> <span class="o">/</span> <span class="s2">&quot;OPCS4V3.DBF&quot;</span>
-</span><span id="extract_nhs_read_browser-308"><a href="#extract_nhs_read_browser-308"><span class="linenos">308</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">simpledbf</span><span class="o">.</span><span class="n">Dbf5</span><span class="p">(</span><span class="n">input_path</span><span class="p">)</span><span class="o">.</span><span class="n">to_dataframe</span><span class="p">()</span>
-</span><span id="extract_nhs_read_browser-309"><a href="#extract_nhs_read_browser-309"><span class="linenos">309</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[[</span><span class="s2">&quot;READ_CODE&quot;</span><span class="p">,</span> <span class="s2">&quot;TARG_CODE&quot;</span><span class="p">]]</span>
-</span><span id="extract_nhs_read_browser-310"><a href="#extract_nhs_read_browser-310"><span class="linenos">310</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;READ_CODE&quot;</span><span class="p">:</span> <span class="s2">&quot;read3&quot;</span><span class="p">,</span> <span class="s2">&quot;TARG_CODE&quot;</span><span class="p">:</span> <span class="s2">&quot;opcs4&quot;</span><span class="p">})</span>
-</span><span id="extract_nhs_read_browser-311"><a href="#extract_nhs_read_browser-311"><span class="linenos">311</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="o">~</span><span class="n">df</span><span class="p">[</span><span class="s2">&quot;opcs4&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="s2">&quot;^.*-.*$&quot;</span><span class="p">)]</span>  <span class="c1"># remove codes with &#39;-&#39;</span>
-</span><span id="extract_nhs_read_browser-312"><a href="#extract_nhs_read_browser-312"><span class="linenos">312</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="o">~</span><span class="n">df</span><span class="p">[</span><span class="s2">&quot;read3&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="s2">&quot;^.*-.*$&quot;</span><span class="p">)]</span>  <span class="c1"># remove codes with &#39;-&#39;</span>
-</span><span id="extract_nhs_read_browser-313"><a href="#extract_nhs_read_browser-313"><span class="linenos">313</span></a>    <span class="n">output_path</span> <span class="o">=</span> <span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;read3_to_opcs4.parquet&quot;</span>
-</span><span id="extract_nhs_read_browser-314"><a href="#extract_nhs_read_browser-314"><span class="linenos">314</span></a>    <span class="n">df</span><span class="o">.</span><span class="n">to_parquet</span><span class="p">(</span><span class="n">output_path</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
-</span><span id="extract_nhs_read_browser-315"><a href="#extract_nhs_read_browser-315"><span class="linenos">315</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Extracted: </span><span class="si">{</span><span class="n">output_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+            <div class="pdoc-code codehilite"><pre><span></span><span id="extract_nhs_read_browser-256"><a href="#extract_nhs_read_browser-256"><span class="linenos">256</span></a><span class="k">def</span><span class="w"> </span><span class="nf">extract_nhs_read_browser</span><span class="p">():</span>
+</span><span id="extract_nhs_read_browser-257"><a href="#extract_nhs_read_browser-257"><span class="linenos">257</span></a>    <span class="c1"># r2 only</span>
+</span><span id="extract_nhs_read_browser-258"><a href="#extract_nhs_read_browser-258"><span class="linenos">258</span></a>    <span class="n">input_path</span> <span class="o">=</span> <span class="n">DOWNLOADS_PATH</span> <span class="o">/</span> <span class="s2">&quot;Standard&quot;</span> <span class="o">/</span> <span class="s2">&quot;V2&quot;</span> <span class="o">/</span> <span class="s2">&quot;ANCESTOR.DBF&quot;</span>
+</span><span id="extract_nhs_read_browser-259"><a href="#extract_nhs_read_browser-259"><span class="linenos">259</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">simpledbf</span><span class="o">.</span><span class="n">Dbf5</span><span class="p">(</span><span class="n">input_path</span><span class="p">)</span><span class="o">.</span><span class="n">to_dataframe</span><span class="p">()</span>
+</span><span id="extract_nhs_read_browser-260"><a href="#extract_nhs_read_browser-260"><span class="linenos">260</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">concat</span><span class="p">([</span><span class="n">df</span><span class="p">[</span><span class="s2">&quot;READCODE&quot;</span><span class="p">],</span> <span class="n">df</span><span class="p">[</span><span class="s2">&quot;DESCENDANT&quot;</span><span class="p">]])</span>
+</span><span id="extract_nhs_read_browser-261"><a href="#extract_nhs_read_browser-261"><span class="linenos">261</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">(</span><span class="n">df</span><span class="o">.</span><span class="n">drop_duplicates</span><span class="p">())</span>
+</span><span id="extract_nhs_read_browser-262"><a href="#extract_nhs_read_browser-262"><span class="linenos">262</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="mi">0</span><span class="p">:</span> <span class="s2">&quot;read2&quot;</span><span class="p">})</span>
+</span><span id="extract_nhs_read_browser-263"><a href="#extract_nhs_read_browser-263"><span class="linenos">263</span></a>    <span class="n">output_path</span> <span class="o">=</span> <span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;read2.parquet&quot;</span>
+</span><span id="extract_nhs_read_browser-264"><a href="#extract_nhs_read_browser-264"><span class="linenos">264</span></a>    <span class="n">df</span><span class="o">.</span><span class="n">to_parquet</span><span class="p">(</span><span class="n">output_path</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="extract_nhs_read_browser-265"><a href="#extract_nhs_read_browser-265"><span class="linenos">265</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Extracted: </span><span class="si">{</span><span class="n">output_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="extract_nhs_read_browser-266"><a href="#extract_nhs_read_browser-266"><span class="linenos">266</span></a>
+</span><span id="extract_nhs_read_browser-267"><a href="#extract_nhs_read_browser-267"><span class="linenos">267</span></a>    <span class="c1"># r2 -&gt; atc</span>
+</span><span id="extract_nhs_read_browser-268"><a href="#extract_nhs_read_browser-268"><span class="linenos">268</span></a>    <span class="n">input_path</span> <span class="o">=</span> <span class="n">DOWNLOADS_PATH</span> <span class="o">/</span> <span class="s2">&quot;Standard&quot;</span> <span class="o">/</span> <span class="s2">&quot;V2&quot;</span> <span class="o">/</span> <span class="s2">&quot;ATC.DBF&quot;</span>
+</span><span id="extract_nhs_read_browser-269"><a href="#extract_nhs_read_browser-269"><span class="linenos">269</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">simpledbf</span><span class="o">.</span><span class="n">Dbf5</span><span class="p">(</span><span class="n">input_path</span><span class="p">)</span><span class="o">.</span><span class="n">to_dataframe</span><span class="p">()</span>
+</span><span id="extract_nhs_read_browser-270"><a href="#extract_nhs_read_browser-270"><span class="linenos">270</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[[</span><span class="s2">&quot;READCODE&quot;</span><span class="p">,</span> <span class="s2">&quot;ATC&quot;</span><span class="p">]]</span>
+</span><span id="extract_nhs_read_browser-271"><a href="#extract_nhs_read_browser-271"><span class="linenos">271</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;READCODE&quot;</span><span class="p">:</span> <span class="s2">&quot;read2&quot;</span><span class="p">,</span> <span class="s2">&quot;ATC&quot;</span><span class="p">:</span> <span class="s2">&quot;atc&quot;</span><span class="p">})</span>
+</span><span id="extract_nhs_read_browser-272"><a href="#extract_nhs_read_browser-272"><span class="linenos">272</span></a>    <span class="n">output_path</span> <span class="o">=</span> <span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;read2_to_atc.parquet&quot;</span>
+</span><span id="extract_nhs_read_browser-273"><a href="#extract_nhs_read_browser-273"><span class="linenos">273</span></a>    <span class="n">df</span><span class="o">.</span><span class="n">to_parquet</span><span class="p">(</span><span class="n">output_path</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="extract_nhs_read_browser-274"><a href="#extract_nhs_read_browser-274"><span class="linenos">274</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Extracted: </span><span class="si">{</span><span class="n">output_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="extract_nhs_read_browser-275"><a href="#extract_nhs_read_browser-275"><span class="linenos">275</span></a>
+</span><span id="extract_nhs_read_browser-276"><a href="#extract_nhs_read_browser-276"><span class="linenos">276</span></a>    <span class="c1"># r2 -&gt; icd10</span>
+</span><span id="extract_nhs_read_browser-277"><a href="#extract_nhs_read_browser-277"><span class="linenos">277</span></a>    <span class="n">input_path</span> <span class="o">=</span> <span class="n">DOWNLOADS_PATH</span> <span class="o">/</span> <span class="s2">&quot;Standard&quot;</span> <span class="o">/</span> <span class="s2">&quot;V2&quot;</span> <span class="o">/</span> <span class="s2">&quot;ICD10.DBF&quot;</span>
+</span><span id="extract_nhs_read_browser-278"><a href="#extract_nhs_read_browser-278"><span class="linenos">278</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">simpledbf</span><span class="o">.</span><span class="n">Dbf5</span><span class="p">(</span><span class="n">input_path</span><span class="p">)</span><span class="o">.</span><span class="n">to_dataframe</span><span class="p">()</span>
+</span><span id="extract_nhs_read_browser-279"><a href="#extract_nhs_read_browser-279"><span class="linenos">279</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[[</span><span class="s2">&quot;READ_CODE&quot;</span><span class="p">,</span> <span class="s2">&quot;TARG_CODE&quot;</span><span class="p">]]</span>
+</span><span id="extract_nhs_read_browser-280"><a href="#extract_nhs_read_browser-280"><span class="linenos">280</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;READ_CODE&quot;</span><span class="p">:</span> <span class="s2">&quot;read2&quot;</span><span class="p">,</span> <span class="s2">&quot;TARG_CODE&quot;</span><span class="p">:</span> <span class="s2">&quot;icd10&quot;</span><span class="p">})</span>
+</span><span id="extract_nhs_read_browser-281"><a href="#extract_nhs_read_browser-281"><span class="linenos">281</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="o">~</span><span class="n">df</span><span class="p">[</span><span class="s2">&quot;icd10&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="s2">&quot;^.*-.*$&quot;</span><span class="p">)]</span>  <span class="c1"># remove codes with &#39;-&#39;</span>
+</span><span id="extract_nhs_read_browser-282"><a href="#extract_nhs_read_browser-282"><span class="linenos">282</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="o">~</span><span class="n">df</span><span class="p">[</span><span class="s2">&quot;read2&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="s2">&quot;^.*-.*$&quot;</span><span class="p">)]</span>  <span class="c1"># remove codes with &#39;-&#39;</span>
+</span><span id="extract_nhs_read_browser-283"><a href="#extract_nhs_read_browser-283"><span class="linenos">283</span></a>    <span class="n">output_path</span> <span class="o">=</span> <span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;read2_to_icd10.parquet&quot;</span>
+</span><span id="extract_nhs_read_browser-284"><a href="#extract_nhs_read_browser-284"><span class="linenos">284</span></a>    <span class="n">df</span><span class="o">.</span><span class="n">to_parquet</span><span class="p">(</span><span class="n">output_path</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="extract_nhs_read_browser-285"><a href="#extract_nhs_read_browser-285"><span class="linenos">285</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Extracted: </span><span class="si">{</span><span class="n">output_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="extract_nhs_read_browser-286"><a href="#extract_nhs_read_browser-286"><span class="linenos">286</span></a>
+</span><span id="extract_nhs_read_browser-287"><a href="#extract_nhs_read_browser-287"><span class="linenos">287</span></a>    <span class="c1"># r2 -&gt; opcs4</span>
+</span><span id="extract_nhs_read_browser-288"><a href="#extract_nhs_read_browser-288"><span class="linenos">288</span></a>    <span class="n">input_path</span> <span class="o">=</span> <span class="n">DOWNLOADS_PATH</span> <span class="o">/</span> <span class="s2">&quot;Standard&quot;</span> <span class="o">/</span> <span class="s2">&quot;V2&quot;</span> <span class="o">/</span> <span class="s2">&quot;OPCS4V3.DBF&quot;</span>
+</span><span id="extract_nhs_read_browser-289"><a href="#extract_nhs_read_browser-289"><span class="linenos">289</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">simpledbf</span><span class="o">.</span><span class="n">Dbf5</span><span class="p">(</span><span class="n">input_path</span><span class="p">)</span><span class="o">.</span><span class="n">to_dataframe</span><span class="p">()</span>
+</span><span id="extract_nhs_read_browser-290"><a href="#extract_nhs_read_browser-290"><span class="linenos">290</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[[</span><span class="s2">&quot;READ_CODE&quot;</span><span class="p">,</span> <span class="s2">&quot;TARG_CODE&quot;</span><span class="p">]]</span>
+</span><span id="extract_nhs_read_browser-291"><a href="#extract_nhs_read_browser-291"><span class="linenos">291</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;READ_CODE&quot;</span><span class="p">:</span> <span class="s2">&quot;read2&quot;</span><span class="p">,</span> <span class="s2">&quot;TARG_CODE&quot;</span><span class="p">:</span> <span class="s2">&quot;opcs4&quot;</span><span class="p">})</span>
+</span><span id="extract_nhs_read_browser-292"><a href="#extract_nhs_read_browser-292"><span class="linenos">292</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="o">~</span><span class="n">df</span><span class="p">[</span><span class="s2">&quot;opcs4&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="s2">&quot;^.*-.*$&quot;</span><span class="p">)]</span>  <span class="c1"># remove codes with &#39;-&#39;</span>
+</span><span id="extract_nhs_read_browser-293"><a href="#extract_nhs_read_browser-293"><span class="linenos">293</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="o">~</span><span class="n">df</span><span class="p">[</span><span class="s2">&quot;read2&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="s2">&quot;^.*-.*$&quot;</span><span class="p">)]</span>  <span class="c1"># remove codes with &#39;-&#39;</span>
+</span><span id="extract_nhs_read_browser-294"><a href="#extract_nhs_read_browser-294"><span class="linenos">294</span></a>    <span class="n">output_path</span> <span class="o">=</span> <span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;read2_to_opcs4.parquet&quot;</span>
+</span><span id="extract_nhs_read_browser-295"><a href="#extract_nhs_read_browser-295"><span class="linenos">295</span></a>    <span class="n">df</span><span class="o">.</span><span class="n">to_parquet</span><span class="p">(</span><span class="n">output_path</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="extract_nhs_read_browser-296"><a href="#extract_nhs_read_browser-296"><span class="linenos">296</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Extracted: </span><span class="si">{</span><span class="n">output_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="extract_nhs_read_browser-297"><a href="#extract_nhs_read_browser-297"><span class="linenos">297</span></a>
+</span><span id="extract_nhs_read_browser-298"><a href="#extract_nhs_read_browser-298"><span class="linenos">298</span></a>    <span class="c1"># r3 only</span>
+</span><span id="extract_nhs_read_browser-299"><a href="#extract_nhs_read_browser-299"><span class="linenos">299</span></a>    <span class="n">input_path</span> <span class="o">=</span> <span class="n">DOWNLOADS_PATH</span> <span class="o">/</span> <span class="s2">&quot;Standard&quot;</span> <span class="o">/</span> <span class="s2">&quot;V3&quot;</span> <span class="o">/</span> <span class="s2">&quot;ANCESTOR.DBF&quot;</span>
+</span><span id="extract_nhs_read_browser-300"><a href="#extract_nhs_read_browser-300"><span class="linenos">300</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">simpledbf</span><span class="o">.</span><span class="n">Dbf5</span><span class="p">(</span><span class="n">input_path</span><span class="p">)</span><span class="o">.</span><span class="n">to_dataframe</span><span class="p">()</span>
+</span><span id="extract_nhs_read_browser-301"><a href="#extract_nhs_read_browser-301"><span class="linenos">301</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">concat</span><span class="p">([</span><span class="n">df</span><span class="p">[</span><span class="s2">&quot;READCODE&quot;</span><span class="p">],</span> <span class="n">df</span><span class="p">[</span><span class="s2">&quot;DESCENDANT&quot;</span><span class="p">]])</span>
+</span><span id="extract_nhs_read_browser-302"><a href="#extract_nhs_read_browser-302"><span class="linenos">302</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">(</span><span class="n">df</span><span class="o">.</span><span class="n">drop_duplicates</span><span class="p">())</span>
+</span><span id="extract_nhs_read_browser-303"><a href="#extract_nhs_read_browser-303"><span class="linenos">303</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="mi">0</span><span class="p">:</span> <span class="s2">&quot;read3&quot;</span><span class="p">})</span>
+</span><span id="extract_nhs_read_browser-304"><a href="#extract_nhs_read_browser-304"><span class="linenos">304</span></a>    <span class="n">output_path</span> <span class="o">=</span> <span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;read3.parquet&quot;</span>
+</span><span id="extract_nhs_read_browser-305"><a href="#extract_nhs_read_browser-305"><span class="linenos">305</span></a>    <span class="n">df</span><span class="o">.</span><span class="n">to_parquet</span><span class="p">(</span><span class="n">output_path</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="extract_nhs_read_browser-306"><a href="#extract_nhs_read_browser-306"><span class="linenos">306</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Extracted: </span><span class="si">{</span><span class="n">output_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="extract_nhs_read_browser-307"><a href="#extract_nhs_read_browser-307"><span class="linenos">307</span></a>
+</span><span id="extract_nhs_read_browser-308"><a href="#extract_nhs_read_browser-308"><span class="linenos">308</span></a>    <span class="c1"># r3 -&gt; icd10</span>
+</span><span id="extract_nhs_read_browser-309"><a href="#extract_nhs_read_browser-309"><span class="linenos">309</span></a>    <span class="n">input_path</span> <span class="o">=</span> <span class="n">DOWNLOADS_PATH</span> <span class="o">/</span> <span class="s2">&quot;Standard&quot;</span> <span class="o">/</span> <span class="s2">&quot;V3&quot;</span> <span class="o">/</span> <span class="s2">&quot;ICD10.DBF&quot;</span>
+</span><span id="extract_nhs_read_browser-310"><a href="#extract_nhs_read_browser-310"><span class="linenos">310</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">simpledbf</span><span class="o">.</span><span class="n">Dbf5</span><span class="p">(</span><span class="n">input_path</span><span class="p">)</span><span class="o">.</span><span class="n">to_dataframe</span><span class="p">()</span>
+</span><span id="extract_nhs_read_browser-311"><a href="#extract_nhs_read_browser-311"><span class="linenos">311</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[[</span><span class="s2">&quot;READ_CODE&quot;</span><span class="p">,</span> <span class="s2">&quot;TARG_CODE&quot;</span><span class="p">]]</span>
+</span><span id="extract_nhs_read_browser-312"><a href="#extract_nhs_read_browser-312"><span class="linenos">312</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;READ_CODE&quot;</span><span class="p">:</span> <span class="s2">&quot;read3&quot;</span><span class="p">,</span> <span class="s2">&quot;TARG_CODE&quot;</span><span class="p">:</span> <span class="s2">&quot;icd10&quot;</span><span class="p">})</span>
+</span><span id="extract_nhs_read_browser-313"><a href="#extract_nhs_read_browser-313"><span class="linenos">313</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="o">~</span><span class="n">df</span><span class="p">[</span><span class="s2">&quot;icd10&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="s2">&quot;^.*-.*$&quot;</span><span class="p">)]</span>  <span class="c1"># remove codes with &#39;-&#39;</span>
+</span><span id="extract_nhs_read_browser-314"><a href="#extract_nhs_read_browser-314"><span class="linenos">314</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="o">~</span><span class="n">df</span><span class="p">[</span><span class="s2">&quot;read3&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="s2">&quot;^.*-.*$&quot;</span><span class="p">)]</span>  <span class="c1"># remove codes with &#39;-&#39;</span>
+</span><span id="extract_nhs_read_browser-315"><a href="#extract_nhs_read_browser-315"><span class="linenos">315</span></a>    <span class="n">output_path</span> <span class="o">=</span> <span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;read3_to_icd10.parquet&quot;</span>
+</span><span id="extract_nhs_read_browser-316"><a href="#extract_nhs_read_browser-316"><span class="linenos">316</span></a>    <span class="n">df</span><span class="o">.</span><span class="n">to_parquet</span><span class="p">(</span><span class="n">output_path</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="extract_nhs_read_browser-317"><a href="#extract_nhs_read_browser-317"><span class="linenos">317</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Extracted: </span><span class="si">{</span><span class="n">output_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
+</span><span id="extract_nhs_read_browser-318"><a href="#extract_nhs_read_browser-318"><span class="linenos">318</span></a>
+</span><span id="extract_nhs_read_browser-319"><a href="#extract_nhs_read_browser-319"><span class="linenos">319</span></a>    <span class="c1"># r3 -&gt; icd9</span>
+</span><span id="extract_nhs_read_browser-320"><a href="#extract_nhs_read_browser-320"><span class="linenos">320</span></a>    <span class="c1"># dbf = simpledbf.Dbf5(&#39;build/maps/downloads/Standard/V3/ICD9V3.DBF&#39;)</span>
+</span><span id="extract_nhs_read_browser-321"><a href="#extract_nhs_read_browser-321"><span class="linenos">321</span></a>
+</span><span id="extract_nhs_read_browser-322"><a href="#extract_nhs_read_browser-322"><span class="linenos">322</span></a>    <span class="c1"># r3 -&gt; opcs4</span>
+</span><span id="extract_nhs_read_browser-323"><a href="#extract_nhs_read_browser-323"><span class="linenos">323</span></a>    <span class="n">input_path</span> <span class="o">=</span> <span class="n">DOWNLOADS_PATH</span> <span class="o">/</span> <span class="s2">&quot;Standard&quot;</span> <span class="o">/</span> <span class="s2">&quot;V3&quot;</span> <span class="o">/</span> <span class="s2">&quot;OPCS4V3.DBF&quot;</span>
+</span><span id="extract_nhs_read_browser-324"><a href="#extract_nhs_read_browser-324"><span class="linenos">324</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">simpledbf</span><span class="o">.</span><span class="n">Dbf5</span><span class="p">(</span><span class="n">input_path</span><span class="p">)</span><span class="o">.</span><span class="n">to_dataframe</span><span class="p">()</span>
+</span><span id="extract_nhs_read_browser-325"><a href="#extract_nhs_read_browser-325"><span class="linenos">325</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[[</span><span class="s2">&quot;READ_CODE&quot;</span><span class="p">,</span> <span class="s2">&quot;TARG_CODE&quot;</span><span class="p">]]</span>
+</span><span id="extract_nhs_read_browser-326"><a href="#extract_nhs_read_browser-326"><span class="linenos">326</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">columns</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;READ_CODE&quot;</span><span class="p">:</span> <span class="s2">&quot;read3&quot;</span><span class="p">,</span> <span class="s2">&quot;TARG_CODE&quot;</span><span class="p">:</span> <span class="s2">&quot;opcs4&quot;</span><span class="p">})</span>
+</span><span id="extract_nhs_read_browser-327"><a href="#extract_nhs_read_browser-327"><span class="linenos">327</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="o">~</span><span class="n">df</span><span class="p">[</span><span class="s2">&quot;opcs4&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="s2">&quot;^.*-.*$&quot;</span><span class="p">)]</span>  <span class="c1"># remove codes with &#39;-&#39;</span>
+</span><span id="extract_nhs_read_browser-328"><a href="#extract_nhs_read_browser-328"><span class="linenos">328</span></a>    <span class="n">df</span> <span class="o">=</span> <span class="n">df</span><span class="p">[</span><span class="o">~</span><span class="n">df</span><span class="p">[</span><span class="s2">&quot;read3&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">str</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="s2">&quot;^.*-.*$&quot;</span><span class="p">)]</span>  <span class="c1"># remove codes with &#39;-&#39;</span>
+</span><span id="extract_nhs_read_browser-329"><a href="#extract_nhs_read_browser-329"><span class="linenos">329</span></a>    <span class="n">output_path</span> <span class="o">=</span> <span class="n">PROCESSED_PATH</span> <span class="o">/</span> <span class="s2">&quot;read3_to_opcs4.parquet&quot;</span>
+</span><span id="extract_nhs_read_browser-330"><a href="#extract_nhs_read_browser-330"><span class="linenos">330</span></a>    <span class="n">df</span><span class="o">.</span><span class="n">to_parquet</span><span class="p">(</span><span class="n">output_path</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+</span><span id="extract_nhs_read_browser-331"><a href="#extract_nhs_read_browser-331"><span class="linenos">331</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Extracted: </span><span class="si">{</span><span class="n">output_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
 </span></pre></div>
 
 
@@ -1053,34 +1070,34 @@
 
     </div>
     <a class="headerlink" href="#create_map_directories"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="create_map_directories-318"><a href="#create_map_directories-318"><span class="linenos">318</span></a><span class="k">def</span><span class="w"> </span><span class="nf">create_map_directories</span><span class="p">():</span>
-</span><span id="create_map_directories-319"><a href="#create_map_directories-319"><span class="linenos">319</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Create map directories.&quot;&quot;&quot;</span>
-</span><span id="create_map_directories-320"><a href="#create_map_directories-320"><span class="linenos">320</span></a>
-</span><span id="create_map_directories-321"><a href="#create_map_directories-321"><span class="linenos">321</span></a>    <span class="c1"># Check if build directory exists</span>
-</span><span id="create_map_directories-322"><a href="#create_map_directories-322"><span class="linenos">322</span></a>    <span class="n">create_map_dirs</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="create_map_directories-323"><a href="#create_map_directories-323"><span class="linenos">323</span></a>    <span class="k">if</span> <span class="n">VOCAB_PATH</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
-</span><span id="create_map_directories-324"><a href="#create_map_directories-324"><span class="linenos">324</span></a>        <span class="n">user_input</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="create_map_directories-325"><a href="#create_map_directories-325"><span class="linenos">325</span></a>            <span class="nb">input</span><span class="p">(</span>
-</span><span id="create_map_directories-326"><a href="#create_map_directories-326"><span class="linenos">326</span></a>                <span class="sa">f</span><span class="s2">&quot;The map directory </span><span class="si">{</span><span class="n">VOCAB_PATH</span><span class="si">}</span><span class="s2"> already exists. Do you want to download and process trud data again? (y/n): &quot;</span>
-</span><span id="create_map_directories-327"><a href="#create_map_directories-327"><span class="linenos">327</span></a>            <span class="p">)</span>
-</span><span id="create_map_directories-328"><a href="#create_map_directories-328"><span class="linenos">328</span></a>            <span class="o">.</span><span class="n">strip</span><span class="p">()</span>
-</span><span id="create_map_directories-329"><a href="#create_map_directories-329"><span class="linenos">329</span></a>            <span class="o">.</span><span class="n">lower</span><span class="p">()</span>
-</span><span id="create_map_directories-330"><a href="#create_map_directories-330"><span class="linenos">330</span></a>        <span class="p">)</span>
-</span><span id="create_map_directories-331"><a href="#create_map_directories-331"><span class="linenos">331</span></a>        <span class="k">if</span> <span class="n">user_input</span> <span class="o">==</span> <span class="s2">&quot;y&quot;</span><span class="p">:</span>
-</span><span id="create_map_directories-332"><a href="#create_map_directories-332"><span class="linenos">332</span></a>            <span class="c1"># delete all build files</span>
-</span><span id="create_map_directories-333"><a href="#create_map_directories-333"><span class="linenos">333</span></a>            <span class="n">shutil</span><span class="o">.</span><span class="n">rmtree</span><span class="p">(</span><span class="n">VOCAB_PATH</span><span class="p">)</span>
-</span><span id="create_map_directories-334"><a href="#create_map_directories-334"><span class="linenos">334</span></a>            <span class="n">create_map_dirs</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="create_map_directories-335"><a href="#create_map_directories-335"><span class="linenos">335</span></a>        <span class="k">elif</span> <span class="n">user_input</span> <span class="o">==</span> <span class="s2">&quot;n&quot;</span><span class="p">:</span>
-</span><span id="create_map_directories-336"><a href="#create_map_directories-336"><span class="linenos">336</span></a>            <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Exiting TRUD installation&quot;</span><span class="p">)</span>
-</span><span id="create_map_directories-337"><a href="#create_map_directories-337"><span class="linenos">337</span></a>            <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
-</span><span id="create_map_directories-338"><a href="#create_map_directories-338"><span class="linenos">338</span></a>    <span class="k">else</span><span class="p">:</span>
-</span><span id="create_map_directories-339"><a href="#create_map_directories-339"><span class="linenos">339</span></a>        <span class="n">create_map_dirs</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="create_map_directories-340"><a href="#create_map_directories-340"><span class="linenos">340</span></a>
-</span><span id="create_map_directories-341"><a href="#create_map_directories-341"><span class="linenos">341</span></a>    <span class="k">if</span> <span class="n">create_map_dirs</span><span class="p">:</span>
-</span><span id="create_map_directories-342"><a href="#create_map_directories-342"><span class="linenos">342</span></a>        <span class="c1"># create maps directories</span>
-</span><span id="create_map_directories-343"><a href="#create_map_directories-343"><span class="linenos">343</span></a>        <span class="n">VOCAB_PATH</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">parents</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="create_map_directories-344"><a href="#create_map_directories-344"><span class="linenos">344</span></a>        <span class="n">DOWNLOADS_PATH</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">parents</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-</span><span id="create_map_directories-345"><a href="#create_map_directories-345"><span class="linenos">345</span></a>        <span class="n">PROCESSED_PATH</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">parents</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+            <div class="pdoc-code codehilite"><pre><span></span><span id="create_map_directories-334"><a href="#create_map_directories-334"><span class="linenos">334</span></a><span class="k">def</span><span class="w"> </span><span class="nf">create_map_directories</span><span class="p">():</span>
+</span><span id="create_map_directories-335"><a href="#create_map_directories-335"><span class="linenos">335</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Create map directories.&quot;&quot;&quot;</span>
+</span><span id="create_map_directories-336"><a href="#create_map_directories-336"><span class="linenos">336</span></a>
+</span><span id="create_map_directories-337"><a href="#create_map_directories-337"><span class="linenos">337</span></a>    <span class="c1"># Check if build directory exists</span>
+</span><span id="create_map_directories-338"><a href="#create_map_directories-338"><span class="linenos">338</span></a>    <span class="n">create_map_dirs</span> <span class="o">=</span> <span class="kc">False</span>
+</span><span id="create_map_directories-339"><a href="#create_map_directories-339"><span class="linenos">339</span></a>    <span class="k">if</span> <span class="n">VOCAB_PATH</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
+</span><span id="create_map_directories-340"><a href="#create_map_directories-340"><span class="linenos">340</span></a>        <span class="n">user_input</span> <span class="o">=</span> <span class="p">(</span>
+</span><span id="create_map_directories-341"><a href="#create_map_directories-341"><span class="linenos">341</span></a>            <span class="nb">input</span><span class="p">(</span>
+</span><span id="create_map_directories-342"><a href="#create_map_directories-342"><span class="linenos">342</span></a>                <span class="sa">f</span><span class="s2">&quot;The map directory </span><span class="si">{</span><span class="n">VOCAB_PATH</span><span class="si">}</span><span class="s2"> already exists. Do you want to download and process trud data again? (y/n): &quot;</span>
+</span><span id="create_map_directories-343"><a href="#create_map_directories-343"><span class="linenos">343</span></a>            <span class="p">)</span>
+</span><span id="create_map_directories-344"><a href="#create_map_directories-344"><span class="linenos">344</span></a>            <span class="o">.</span><span class="n">strip</span><span class="p">()</span>
+</span><span id="create_map_directories-345"><a href="#create_map_directories-345"><span class="linenos">345</span></a>            <span class="o">.</span><span class="n">lower</span><span class="p">()</span>
+</span><span id="create_map_directories-346"><a href="#create_map_directories-346"><span class="linenos">346</span></a>        <span class="p">)</span>
+</span><span id="create_map_directories-347"><a href="#create_map_directories-347"><span class="linenos">347</span></a>        <span class="k">if</span> <span class="n">user_input</span> <span class="o">==</span> <span class="s2">&quot;y&quot;</span><span class="p">:</span>
+</span><span id="create_map_directories-348"><a href="#create_map_directories-348"><span class="linenos">348</span></a>            <span class="c1"># delete all build files</span>
+</span><span id="create_map_directories-349"><a href="#create_map_directories-349"><span class="linenos">349</span></a>            <span class="n">shutil</span><span class="o">.</span><span class="n">rmtree</span><span class="p">(</span><span class="n">VOCAB_PATH</span><span class="p">)</span>
+</span><span id="create_map_directories-350"><a href="#create_map_directories-350"><span class="linenos">350</span></a>            <span class="n">create_map_dirs</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="create_map_directories-351"><a href="#create_map_directories-351"><span class="linenos">351</span></a>        <span class="k">elif</span> <span class="n">user_input</span> <span class="o">==</span> <span class="s2">&quot;n&quot;</span><span class="p">:</span>
+</span><span id="create_map_directories-352"><a href="#create_map_directories-352"><span class="linenos">352</span></a>            <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">&quot;Exiting TRUD installation&quot;</span><span class="p">)</span>
+</span><span id="create_map_directories-353"><a href="#create_map_directories-353"><span class="linenos">353</span></a>            <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
+</span><span id="create_map_directories-354"><a href="#create_map_directories-354"><span class="linenos">354</span></a>    <span class="k">else</span><span class="p">:</span>
+</span><span id="create_map_directories-355"><a href="#create_map_directories-355"><span class="linenos">355</span></a>        <span class="n">create_map_dirs</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="create_map_directories-356"><a href="#create_map_directories-356"><span class="linenos">356</span></a>
+</span><span id="create_map_directories-357"><a href="#create_map_directories-357"><span class="linenos">357</span></a>    <span class="k">if</span> <span class="n">create_map_dirs</span><span class="p">:</span>
+</span><span id="create_map_directories-358"><a href="#create_map_directories-358"><span class="linenos">358</span></a>        <span class="c1"># create maps directories</span>
+</span><span id="create_map_directories-359"><a href="#create_map_directories-359"><span class="linenos">359</span></a>        <span class="n">VOCAB_PATH</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">parents</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="create_map_directories-360"><a href="#create_map_directories-360"><span class="linenos">360</span></a>        <span class="n">DOWNLOADS_PATH</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">parents</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+</span><span id="create_map_directories-361"><a href="#create_map_directories-361"><span class="linenos">361</span></a>        <span class="n">PROCESSED_PATH</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">parents</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
 </span></pre></div>
 
 
@@ -1100,98 +1117,98 @@
 
     </div>
     <a class="headerlink" href="#install"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="install-348"><a href="#install-348"><span class="linenos">348</span></a><span class="k">def</span><span class="w"> </span><span class="nf">install</span><span class="p">():</span>
-</span><span id="install-349"><a href="#install-349"><span class="linenos">349</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Installing TRUD&quot;</span><span class="p">)</span>
-</span><span id="install-350"><a href="#install-350"><span class="linenos">350</span></a>
-</span><span id="install-351"><a href="#install-351"><span class="linenos">351</span></a>    <span class="c1"># get TRUD api key from environment variable</span>
-</span><span id="install-352"><a href="#install-352"><span class="linenos">352</span></a>    <span class="n">api_key</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">getenv</span><span class="p">(</span><span class="s2">&quot;ACMC_TRUD_API_KEY&quot;</span><span class="p">)</span>
-</span><span id="install-353"><a href="#install-353"><span class="linenos">353</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">api_key</span><span class="p">:</span>
-</span><span id="install-354"><a href="#install-354"><span class="linenos">354</span></a>        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
-</span><span id="install-355"><a href="#install-355"><span class="linenos">355</span></a>            <span class="s2">&quot;TRUD API KEY not found. Set the ACMC_TRUD_API_KEY environment variable.&quot;</span>
-</span><span id="install-356"><a href="#install-356"><span class="linenos">356</span></a>        <span class="p">)</span>
-</span><span id="install-357"><a href="#install-357"><span class="linenos">357</span></a>
-</span><span id="install-358"><a href="#install-358"><span class="linenos">358</span></a>    <span class="n">create_map_directories</span><span class="p">()</span>
-</span><span id="install-359"><a href="#install-359"><span class="linenos">359</span></a>
-</span><span id="install-360"><a href="#install-360"><span class="linenos">360</span></a>    <span class="n">items_latest</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="install-361"><a href="#install-361"><span class="linenos">361</span></a>    <span class="n">items</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="install-362"><a href="#install-362"><span class="linenos">362</span></a>        <span class="p">{</span>
-</span><span id="install-363"><a href="#install-363"><span class="linenos">363</span></a>            <span class="s2">&quot;id&quot;</span><span class="p">:</span> <span class="mi">259</span><span class="p">,</span>
-</span><span id="install-364"><a href="#install-364"><span class="linenos">364</span></a>            <span class="s2">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;NHS ICD-10 5th Edition XML data files&quot;</span><span class="p">,</span>
-</span><span id="install-365"><a href="#install-365"><span class="linenos">365</span></a>            <span class="s2">&quot;hash&quot;</span><span class="p">:</span> <span class="s2">&quot;A4F7BBA6E86349AADD0F4696C5E91152EB99CC06121427FC359160439B9F883F&quot;</span><span class="p">,</span>
-</span><span id="install-366"><a href="#install-366"><span class="linenos">366</span></a>            <span class="s2">&quot;extract&quot;</span><span class="p">:</span> <span class="n">extract_icd10</span><span class="p">,</span>
-</span><span id="install-367"><a href="#install-367"><span class="linenos">367</span></a>        <span class="p">},</span>
-</span><span id="install-368"><a href="#install-368"><span class="linenos">368</span></a>        <span class="p">{</span>
-</span><span id="install-369"><a href="#install-369"><span class="linenos">369</span></a>            <span class="s2">&quot;id&quot;</span><span class="p">:</span> <span class="mi">119</span><span class="p">,</span>
-</span><span id="install-370"><a href="#install-370"><span class="linenos">370</span></a>            <span class="s2">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;OPCS-4 data files&quot;</span><span class="p">,</span>
-</span><span id="install-371"><a href="#install-371"><span class="linenos">371</span></a>            <span class="s2">&quot;hash&quot;</span><span class="p">:</span> <span class="s2">&quot;0615A2BF43FFEF94517F1D1E0C05493B627839F323F22C52CBCD8B40BF767CD3&quot;</span><span class="p">,</span>
-</span><span id="install-372"><a href="#install-372"><span class="linenos">372</span></a>            <span class="s2">&quot;extract&quot;</span><span class="p">:</span> <span class="n">extract_opsc4</span><span class="p">,</span>
-</span><span id="install-373"><a href="#install-373"><span class="linenos">373</span></a>        <span class="p">},</span>
-</span><span id="install-374"><a href="#install-374"><span class="linenos">374</span></a>        <span class="p">{</span>
-</span><span id="install-375"><a href="#install-375"><span class="linenos">375</span></a>            <span class="s2">&quot;id&quot;</span><span class="p">:</span> <span class="mi">9</span><span class="p">,</span>
-</span><span id="install-376"><a href="#install-376"><span class="linenos">376</span></a>            <span class="s2">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;NHS Data Migration&quot;</span><span class="p">,</span>
-</span><span id="install-377"><a href="#install-377"><span class="linenos">377</span></a>            <span class="s2">&quot;hash&quot;</span><span class="p">:</span> <span class="s2">&quot;D4317B3ADBA6E1247CF17F0B7CD2B8850FD36C0EA2923BF684EA6159F3A54765&quot;</span><span class="p">,</span>
-</span><span id="install-378"><a href="#install-378"><span class="linenos">378</span></a>            <span class="s2">&quot;extract&quot;</span><span class="p">:</span> <span class="n">extract_nhs_data_migrations</span><span class="p">,</span>
-</span><span id="install-379"><a href="#install-379"><span class="linenos">379</span></a>        <span class="p">},</span>
-</span><span id="install-380"><a href="#install-380"><span class="linenos">380</span></a>        <span class="p">{</span>
-</span><span id="install-381"><a href="#install-381"><span class="linenos">381</span></a>            <span class="s2">&quot;id&quot;</span><span class="p">:</span> <span class="mi">8</span><span class="p">,</span>
-</span><span id="install-382"><a href="#install-382"><span class="linenos">382</span></a>            <span class="s2">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;NHS Read Browser&quot;</span><span class="p">,</span>
-</span><span id="install-383"><a href="#install-383"><span class="linenos">383</span></a>            <span class="s2">&quot;hash&quot;</span><span class="p">:</span> <span class="s2">&quot;1FFF2CBF11D0E6D7FC6CC6F13DD52D2F459095C3D83A3F754E6C359F16913C5E&quot;</span><span class="p">,</span>
-</span><span id="install-384"><a href="#install-384"><span class="linenos">384</span></a>            <span class="s2">&quot;extract&quot;</span><span class="p">:</span> <span class="n">extract_nhs_read_browser</span><span class="p">,</span>
-</span><span id="install-385"><a href="#install-385"><span class="linenos">385</span></a>        <span class="p">},</span>
-</span><span id="install-386"><a href="#install-386"><span class="linenos">386</span></a>        <span class="c1"># TODO: Download BNF from separate site? https://www.nhsbsa.nhs.uk/sites/default/files/2024-10/BNF%20Snomed%20Mapping%20data%2020241016.zip</span>
-</span><span id="install-387"><a href="#install-387"><span class="linenos">387</span></a>    <span class="p">]</span>
-</span><span id="install-388"><a href="#install-388"><span class="linenos">388</span></a>
-</span><span id="install-389"><a href="#install-389"><span class="linenos">389</span></a>    <span class="c1"># remove function from items to save versions</span>
-</span><span id="install-390"><a href="#install-390"><span class="linenos">390</span></a>    <span class="n">data</span> <span class="o">=</span> <span class="p">[{</span><span class="n">k</span><span class="p">:</span> <span class="n">v</span> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">d</span><span class="o">.</span><span class="n">items</span><span class="p">()</span> <span class="k">if</span> <span class="n">k</span> <span class="o">!=</span> <span class="s2">&quot;extract&quot;</span><span class="p">}</span> <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">items</span><span class="p">]</span>
-</span><span id="install-391"><a href="#install-391"><span class="linenos">391</span></a>    <span class="c1"># save TRUD versions to file to main record of what was downloaded</span>
-</span><span id="install-392"><a href="#install-392"><span class="linenos">392</span></a>    <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">VERSION_PATH</span><span class="p">,</span> <span class="s2">&quot;w&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
-</span><span id="install-393"><a href="#install-393"><span class="linenos">393</span></a>        <span class="n">yaml</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span>
-</span><span id="install-394"><a href="#install-394"><span class="linenos">394</span></a>            <span class="n">data</span><span class="p">,</span>
-</span><span id="install-395"><a href="#install-395"><span class="linenos">395</span></a>            <span class="n">file</span><span class="p">,</span>
-</span><span id="install-396"><a href="#install-396"><span class="linenos">396</span></a>            <span class="n">Dumper</span><span class="o">=</span><span class="n">util</span><span class="o">.</span><span class="n">QuotedDumper</span><span class="p">,</span>
-</span><span id="install-397"><a href="#install-397"><span class="linenos">397</span></a>            <span class="n">default_flow_style</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-</span><span id="install-398"><a href="#install-398"><span class="linenos">398</span></a>            <span class="n">sort_keys</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
-</span><span id="install-399"><a href="#install-399"><span class="linenos">399</span></a>            <span class="n">default_style</span><span class="o">=</span><span class="s1">&#39;&quot;&#39;</span><span class="p">,</span>
-</span><span id="install-400"><a href="#install-400"><span class="linenos">400</span></a>        <span class="p">)</span>
-</span><span id="install-401"><a href="#install-401"><span class="linenos">401</span></a>
-</span><span id="install-402"><a href="#install-402"><span class="linenos">402</span></a>    <span class="c1"># Validate and process each item ID</span>
-</span><span id="install-403"><a href="#install-403"><span class="linenos">403</span></a>    <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">items</span><span class="p">:</span>
-</span><span id="install-404"><a href="#install-404"><span class="linenos">404</span></a>        <span class="n">item_id</span> <span class="o">=</span> <span class="n">item</span><span class="p">[</span><span class="s2">&quot;id&quot;</span><span class="p">]</span>
-</span><span id="install-405"><a href="#install-405"><span class="linenos">405</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;--- </span><span class="si">{</span><span class="n">item</span><span class="p">[</span><span class="s1">&#39;name&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2"> ---&quot;</span><span class="p">)</span>
-</span><span id="install-406"><a href="#install-406"><span class="linenos">406</span></a>
-</span><span id="install-407"><a href="#install-407"><span class="linenos">407</span></a>        <span class="n">releases</span> <span class="o">=</span> <span class="n">get_releases</span><span class="p">(</span><span class="n">item_id</span><span class="p">,</span> <span class="n">API_KEY</span><span class="o">=</span><span class="n">api_key</span><span class="p">,</span> <span class="n">latest</span><span class="o">=</span><span class="n">items_latest</span><span class="p">)</span>
-</span><span id="install-408"><a href="#install-408"><span class="linenos">408</span></a>        <span class="k">if</span> <span class="ow">not</span> <span class="n">releases</span><span class="p">:</span>
-</span><span id="install-409"><a href="#install-409"><span class="linenos">409</span></a>            <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;No releases found for item </span><span class="si">{</span><span class="n">item_id</span><span class="si">}</span><span class="s2">.&quot;</span><span class="p">)</span>
-</span><span id="install-410"><a href="#install-410"><span class="linenos">410</span></a>
-</span><span id="install-411"><a href="#install-411"><span class="linenos">411</span></a>        <span class="c1"># Process each release in reverse order</span>
-</span><span id="install-412"><a href="#install-412"><span class="linenos">412</span></a>        <span class="k">for</span> <span class="n">release_ordinal</span><span class="p">,</span> <span class="n">release</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">releases</span><span class="p">[::</span><span class="o">-</span><span class="mi">1</span><span class="p">],</span> <span class="mi">1</span><span class="p">):</span>
-</span><span id="install-413"><a href="#install-413"><span class="linenos">413</span></a>            <span class="c1"># Download archive file</span>
-</span><span id="install-414"><a href="#install-414"><span class="linenos">414</span></a>            <span class="n">file_destination</span> <span class="o">=</span> <span class="n">download_release_file</span><span class="p">(</span>
-</span><span id="install-415"><a href="#install-415"><span class="linenos">415</span></a>                <span class="n">item_id</span><span class="p">,</span> <span class="n">release_ordinal</span><span class="p">,</span> <span class="n">release</span><span class="p">,</span> <span class="s2">&quot;archive&quot;</span>
-</span><span id="install-416"><a href="#install-416"><span class="linenos">416</span></a>            <span class="p">)</span>
+            <div class="pdoc-code codehilite"><pre><span></span><span id="install-364"><a href="#install-364"><span class="linenos">364</span></a><span class="k">def</span><span class="w"> </span><span class="nf">install</span><span class="p">():</span>
+</span><span id="install-365"><a href="#install-365"><span class="linenos">365</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Installing TRUD&quot;</span><span class="p">)</span>
+</span><span id="install-366"><a href="#install-366"><span class="linenos">366</span></a>
+</span><span id="install-367"><a href="#install-367"><span class="linenos">367</span></a>    <span class="c1"># get TRUD api key from environment variable</span>
+</span><span id="install-368"><a href="#install-368"><span class="linenos">368</span></a>    <span class="n">api_key</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">getenv</span><span class="p">(</span><span class="s2">&quot;ACMC_TRUD_API_KEY&quot;</span><span class="p">)</span>
+</span><span id="install-369"><a href="#install-369"><span class="linenos">369</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="n">api_key</span><span class="p">:</span>
+</span><span id="install-370"><a href="#install-370"><span class="linenos">370</span></a>        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
+</span><span id="install-371"><a href="#install-371"><span class="linenos">371</span></a>            <span class="s2">&quot;TRUD API KEY not found. Set the ACMC_TRUD_API_KEY environment variable.&quot;</span>
+</span><span id="install-372"><a href="#install-372"><span class="linenos">372</span></a>        <span class="p">)</span>
+</span><span id="install-373"><a href="#install-373"><span class="linenos">373</span></a>
+</span><span id="install-374"><a href="#install-374"><span class="linenos">374</span></a>    <span class="n">create_map_directories</span><span class="p">()</span>
+</span><span id="install-375"><a href="#install-375"><span class="linenos">375</span></a>
+</span><span id="install-376"><a href="#install-376"><span class="linenos">376</span></a>    <span class="n">items_latest</span> <span class="o">=</span> <span class="kc">True</span>
+</span><span id="install-377"><a href="#install-377"><span class="linenos">377</span></a>    <span class="n">items</span> <span class="o">=</span> <span class="p">[</span>
+</span><span id="install-378"><a href="#install-378"><span class="linenos">378</span></a>        <span class="p">{</span>
+</span><span id="install-379"><a href="#install-379"><span class="linenos">379</span></a>            <span class="s2">&quot;id&quot;</span><span class="p">:</span> <span class="mi">259</span><span class="p">,</span>
+</span><span id="install-380"><a href="#install-380"><span class="linenos">380</span></a>            <span class="s2">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;NHS ICD-10 5th Edition XML data files&quot;</span><span class="p">,</span>
+</span><span id="install-381"><a href="#install-381"><span class="linenos">381</span></a>            <span class="s2">&quot;hash&quot;</span><span class="p">:</span> <span class="s2">&quot;A4F7BBA6E86349AADD0F4696C5E91152EB99CC06121427FC359160439B9F883F&quot;</span><span class="p">,</span>
+</span><span id="install-382"><a href="#install-382"><span class="linenos">382</span></a>            <span class="s2">&quot;extract&quot;</span><span class="p">:</span> <span class="n">extract_icd10</span><span class="p">,</span>
+</span><span id="install-383"><a href="#install-383"><span class="linenos">383</span></a>        <span class="p">},</span>
+</span><span id="install-384"><a href="#install-384"><span class="linenos">384</span></a>        <span class="p">{</span>
+</span><span id="install-385"><a href="#install-385"><span class="linenos">385</span></a>            <span class="s2">&quot;id&quot;</span><span class="p">:</span> <span class="mi">119</span><span class="p">,</span>
+</span><span id="install-386"><a href="#install-386"><span class="linenos">386</span></a>            <span class="s2">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;OPCS-4 data files&quot;</span><span class="p">,</span>
+</span><span id="install-387"><a href="#install-387"><span class="linenos">387</span></a>            <span class="s2">&quot;hash&quot;</span><span class="p">:</span> <span class="s2">&quot;0615A2BF43FFEF94517F1D1E0C05493B627839F323F22C52CBCD8B40BF767CD3&quot;</span><span class="p">,</span>
+</span><span id="install-388"><a href="#install-388"><span class="linenos">388</span></a>            <span class="s2">&quot;extract&quot;</span><span class="p">:</span> <span class="n">extract_opsc4</span><span class="p">,</span>
+</span><span id="install-389"><a href="#install-389"><span class="linenos">389</span></a>        <span class="p">},</span>
+</span><span id="install-390"><a href="#install-390"><span class="linenos">390</span></a>        <span class="p">{</span>
+</span><span id="install-391"><a href="#install-391"><span class="linenos">391</span></a>            <span class="s2">&quot;id&quot;</span><span class="p">:</span> <span class="mi">9</span><span class="p">,</span>
+</span><span id="install-392"><a href="#install-392"><span class="linenos">392</span></a>            <span class="s2">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;NHS Data Migration&quot;</span><span class="p">,</span>
+</span><span id="install-393"><a href="#install-393"><span class="linenos">393</span></a>            <span class="s2">&quot;hash&quot;</span><span class="p">:</span> <span class="s2">&quot;D4317B3ADBA6E1247CF17F0B7CD2B8850FD36C0EA2923BF684EA6159F3A54765&quot;</span><span class="p">,</span>
+</span><span id="install-394"><a href="#install-394"><span class="linenos">394</span></a>            <span class="s2">&quot;extract&quot;</span><span class="p">:</span> <span class="n">extract_nhs_data_migrations</span><span class="p">,</span>
+</span><span id="install-395"><a href="#install-395"><span class="linenos">395</span></a>        <span class="p">},</span>
+</span><span id="install-396"><a href="#install-396"><span class="linenos">396</span></a>        <span class="p">{</span>
+</span><span id="install-397"><a href="#install-397"><span class="linenos">397</span></a>            <span class="s2">&quot;id&quot;</span><span class="p">:</span> <span class="mi">8</span><span class="p">,</span>
+</span><span id="install-398"><a href="#install-398"><span class="linenos">398</span></a>            <span class="s2">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;NHS Read Browser&quot;</span><span class="p">,</span>
+</span><span id="install-399"><a href="#install-399"><span class="linenos">399</span></a>            <span class="s2">&quot;hash&quot;</span><span class="p">:</span> <span class="s2">&quot;1FFF2CBF11D0E6D7FC6CC6F13DD52D2F459095C3D83A3F754E6C359F16913C5E&quot;</span><span class="p">,</span>
+</span><span id="install-400"><a href="#install-400"><span class="linenos">400</span></a>            <span class="s2">&quot;extract&quot;</span><span class="p">:</span> <span class="n">extract_nhs_read_browser</span><span class="p">,</span>
+</span><span id="install-401"><a href="#install-401"><span class="linenos">401</span></a>        <span class="p">},</span>
+</span><span id="install-402"><a href="#install-402"><span class="linenos">402</span></a>        <span class="c1"># TODO: Download BNF from separate site? https://www.nhsbsa.nhs.uk/sites/default/files/2024-10/BNF%20Snomed%20Mapping%20data%2020241016.zip</span>
+</span><span id="install-403"><a href="#install-403"><span class="linenos">403</span></a>    <span class="p">]</span>
+</span><span id="install-404"><a href="#install-404"><span class="linenos">404</span></a>
+</span><span id="install-405"><a href="#install-405"><span class="linenos">405</span></a>    <span class="c1"># remove function from items to save versions</span>
+</span><span id="install-406"><a href="#install-406"><span class="linenos">406</span></a>    <span class="n">data</span> <span class="o">=</span> <span class="p">[{</span><span class="n">k</span><span class="p">:</span> <span class="n">v</span> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">d</span><span class="o">.</span><span class="n">items</span><span class="p">()</span> <span class="k">if</span> <span class="n">k</span> <span class="o">!=</span> <span class="s2">&quot;extract&quot;</span><span class="p">}</span> <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">items</span><span class="p">]</span>
+</span><span id="install-407"><a href="#install-407"><span class="linenos">407</span></a>    <span class="c1"># save TRUD versions to file to main record of what was downloaded</span>
+</span><span id="install-408"><a href="#install-408"><span class="linenos">408</span></a>    <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">VERSION_PATH</span><span class="p">,</span> <span class="s2">&quot;w&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
+</span><span id="install-409"><a href="#install-409"><span class="linenos">409</span></a>        <span class="n">yaml</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span>
+</span><span id="install-410"><a href="#install-410"><span class="linenos">410</span></a>            <span class="n">data</span><span class="p">,</span>
+</span><span id="install-411"><a href="#install-411"><span class="linenos">411</span></a>            <span class="n">file</span><span class="p">,</span>
+</span><span id="install-412"><a href="#install-412"><span class="linenos">412</span></a>            <span class="n">Dumper</span><span class="o">=</span><span class="n">util</span><span class="o">.</span><span class="n">QuotedDumper</span><span class="p">,</span>
+</span><span id="install-413"><a href="#install-413"><span class="linenos">413</span></a>            <span class="n">default_flow_style</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="install-414"><a href="#install-414"><span class="linenos">414</span></a>            <span class="n">sort_keys</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+</span><span id="install-415"><a href="#install-415"><span class="linenos">415</span></a>            <span class="n">default_style</span><span class="o">=</span><span class="s1">&#39;&quot;&#39;</span><span class="p">,</span>
+</span><span id="install-416"><a href="#install-416"><span class="linenos">416</span></a>        <span class="p">)</span>
 </span><span id="install-417"><a href="#install-417"><span class="linenos">417</span></a>
-</span><span id="install-418"><a href="#install-418"><span class="linenos">418</span></a>            <span class="c1"># Optional files</span>
-</span><span id="install-419"><a href="#install-419"><span class="linenos">419</span></a>            <span class="c1"># if items.checksum:</span>
-</span><span id="install-420"><a href="#install-420"><span class="linenos">420</span></a>            <span class="c1">#     download_release_file(item[&quot;id&quot;], release_ordinal, release, &quot;checksum&quot;)</span>
-</span><span id="install-421"><a href="#install-421"><span class="linenos">421</span></a>            <span class="c1"># if items.signature:</span>
-</span><span id="install-422"><a href="#install-422"><span class="linenos">422</span></a>            <span class="c1">#     download_release_file(item[&quot;id&quot;], release_ordinal, release, &quot;signature&quot;)</span>
-</span><span id="install-423"><a href="#install-423"><span class="linenos">423</span></a>            <span class="c1"># if items.public_key:</span>
-</span><span id="install-424"><a href="#install-424"><span class="linenos">424</span></a>            <span class="c1">#     download_release_file(item[&quot;id&quot;], release_ordinal, release, &quot;publicKey&quot;, &quot;public key&quot;)</span>
-</span><span id="install-425"><a href="#install-425"><span class="linenos">425</span></a>
-</span><span id="install-426"><a href="#install-426"><span class="linenos">426</span></a>            <span class="c1"># Verify Hash if available</span>
-</span><span id="install-427"><a href="#install-427"><span class="linenos">427</span></a>            <span class="k">if</span> <span class="s2">&quot;hash&quot;</span> <span class="ow">in</span> <span class="n">item</span><span class="p">:</span>
-</span><span id="install-428"><a href="#install-428"><span class="linenos">428</span></a>                <span class="n">validate_download_hash</span><span class="p">(</span><span class="n">file_destination</span><span class="p">,</span> <span class="n">item</span><span class="p">[</span><span class="s2">&quot;hash&quot;</span><span class="p">])</span>
-</span><span id="install-429"><a href="#install-429"><span class="linenos">429</span></a>
-</span><span id="install-430"><a href="#install-430"><span class="linenos">430</span></a>            <span class="c1"># Unzip downloaded .zip</span>
-</span><span id="install-431"><a href="#install-431"><span class="linenos">431</span></a>            <span class="n">unzip_download</span><span class="p">(</span><span class="n">file_destination</span><span class="p">)</span>
-</span><span id="install-432"><a href="#install-432"><span class="linenos">432</span></a>
-</span><span id="install-433"><a href="#install-433"><span class="linenos">433</span></a>            <span class="c1"># Extract Tables to parquet</span>
-</span><span id="install-434"><a href="#install-434"><span class="linenos">434</span></a>            <span class="k">if</span> <span class="s2">&quot;extract&quot;</span> <span class="ow">in</span> <span class="n">item</span><span class="p">:</span>
-</span><span id="install-435"><a href="#install-435"><span class="linenos">435</span></a>                <span class="n">item</span><span class="p">[</span><span class="s2">&quot;extract&quot;</span><span class="p">]()</span>
-</span><span id="install-436"><a href="#install-436"><span class="linenos">436</span></a>
-</span><span id="install-437"><a href="#install-437"><span class="linenos">437</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Downloaded </span><span class="si">{</span><span class="n">release_ordinal</span><span class="si">}</span><span class="s2"> release(s) for item </span><span class="si">{</span><span class="n">item_id</span><span class="si">}</span><span class="s2">.&quot;</span><span class="p">)</span>
-</span><span id="install-438"><a href="#install-438"><span class="linenos">438</span></a>
-</span><span id="install-439"><a href="#install-439"><span class="linenos">439</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;TRUD installation completed&quot;</span><span class="p">)</span>
+</span><span id="install-418"><a href="#install-418"><span class="linenos">418</span></a>    <span class="c1"># Validate and process each item ID</span>
+</span><span id="install-419"><a href="#install-419"><span class="linenos">419</span></a>    <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">items</span><span class="p">:</span>
+</span><span id="install-420"><a href="#install-420"><span class="linenos">420</span></a>        <span class="n">item_id</span> <span class="o">=</span> <span class="n">item</span><span class="p">[</span><span class="s2">&quot;id&quot;</span><span class="p">]</span>
+</span><span id="install-421"><a href="#install-421"><span class="linenos">421</span></a>        <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;--- </span><span class="si">{</span><span class="n">item</span><span class="p">[</span><span class="s1">&#39;name&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2"> ---&quot;</span><span class="p">)</span>
+</span><span id="install-422"><a href="#install-422"><span class="linenos">422</span></a>
+</span><span id="install-423"><a href="#install-423"><span class="linenos">423</span></a>        <span class="n">releases</span> <span class="o">=</span> <span class="n">get_releases</span><span class="p">(</span><span class="n">item_id</span><span class="p">,</span> <span class="n">API_KEY</span><span class="o">=</span><span class="n">api_key</span><span class="p">,</span> <span class="n">latest</span><span class="o">=</span><span class="n">items_latest</span><span class="p">)</span>
+</span><span id="install-424"><a href="#install-424"><span class="linenos">424</span></a>        <span class="k">if</span> <span class="ow">not</span> <span class="n">releases</span><span class="p">:</span>
+</span><span id="install-425"><a href="#install-425"><span class="linenos">425</span></a>            <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;No releases found for item </span><span class="si">{</span><span class="n">item_id</span><span class="si">}</span><span class="s2">.&quot;</span><span class="p">)</span>
+</span><span id="install-426"><a href="#install-426"><span class="linenos">426</span></a>
+</span><span id="install-427"><a href="#install-427"><span class="linenos">427</span></a>        <span class="c1"># Process each release in reverse order</span>
+</span><span id="install-428"><a href="#install-428"><span class="linenos">428</span></a>        <span class="k">for</span> <span class="n">release_ordinal</span><span class="p">,</span> <span class="n">release</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">releases</span><span class="p">[::</span><span class="o">-</span><span class="mi">1</span><span class="p">],</span> <span class="mi">1</span><span class="p">):</span>
+</span><span id="install-429"><a href="#install-429"><span class="linenos">429</span></a>            <span class="c1"># Download archive file</span>
+</span><span id="install-430"><a href="#install-430"><span class="linenos">430</span></a>            <span class="n">file_destination</span> <span class="o">=</span> <span class="n">download_release_file</span><span class="p">(</span>
+</span><span id="install-431"><a href="#install-431"><span class="linenos">431</span></a>                <span class="n">item_id</span><span class="p">,</span> <span class="n">release_ordinal</span><span class="p">,</span> <span class="n">release</span><span class="p">,</span> <span class="s2">&quot;archive&quot;</span>
+</span><span id="install-432"><a href="#install-432"><span class="linenos">432</span></a>            <span class="p">)</span>
+</span><span id="install-433"><a href="#install-433"><span class="linenos">433</span></a>
+</span><span id="install-434"><a href="#install-434"><span class="linenos">434</span></a>            <span class="c1"># Optional files</span>
+</span><span id="install-435"><a href="#install-435"><span class="linenos">435</span></a>            <span class="c1"># if items.checksum:</span>
+</span><span id="install-436"><a href="#install-436"><span class="linenos">436</span></a>            <span class="c1">#     download_release_file(item[&quot;id&quot;], release_ordinal, release, &quot;checksum&quot;)</span>
+</span><span id="install-437"><a href="#install-437"><span class="linenos">437</span></a>            <span class="c1"># if items.signature:</span>
+</span><span id="install-438"><a href="#install-438"><span class="linenos">438</span></a>            <span class="c1">#     download_release_file(item[&quot;id&quot;], release_ordinal, release, &quot;signature&quot;)</span>
+</span><span id="install-439"><a href="#install-439"><span class="linenos">439</span></a>            <span class="c1"># if items.public_key:</span>
+</span><span id="install-440"><a href="#install-440"><span class="linenos">440</span></a>            <span class="c1">#     download_release_file(item[&quot;id&quot;], release_ordinal, release, &quot;publicKey&quot;, &quot;public key&quot;)</span>
+</span><span id="install-441"><a href="#install-441"><span class="linenos">441</span></a>
+</span><span id="install-442"><a href="#install-442"><span class="linenos">442</span></a>            <span class="c1"># Verify Hash if available</span>
+</span><span id="install-443"><a href="#install-443"><span class="linenos">443</span></a>            <span class="k">if</span> <span class="s2">&quot;hash&quot;</span> <span class="ow">in</span> <span class="n">item</span><span class="p">:</span>
+</span><span id="install-444"><a href="#install-444"><span class="linenos">444</span></a>                <span class="n">validate_download_hash</span><span class="p">(</span><span class="n">file_destination</span><span class="p">,</span> <span class="n">item</span><span class="p">[</span><span class="s2">&quot;hash&quot;</span><span class="p">])</span>
+</span><span id="install-445"><a href="#install-445"><span class="linenos">445</span></a>
+</span><span id="install-446"><a href="#install-446"><span class="linenos">446</span></a>            <span class="c1"># Unzip downloaded .zip</span>
+</span><span id="install-447"><a href="#install-447"><span class="linenos">447</span></a>            <span class="n">unzip_download</span><span class="p">(</span><span class="n">file_destination</span><span class="p">)</span>
+</span><span id="install-448"><a href="#install-448"><span class="linenos">448</span></a>
+</span><span id="install-449"><a href="#install-449"><span class="linenos">449</span></a>            <span class="c1"># Extract Tables to parquet</span>
+</span><span id="install-450"><a href="#install-450"><span class="linenos">450</span></a>            <span class="k">if</span> <span class="s2">&quot;extract&quot;</span> <span class="ow">in</span> <span class="n">item</span><span class="p">:</span>
+</span><span id="install-451"><a href="#install-451"><span class="linenos">451</span></a>                <span class="n">item</span><span class="p">[</span><span class="s2">&quot;extract&quot;</span><span class="p">]()</span>
+</span><span id="install-452"><a href="#install-452"><span class="linenos">452</span></a>
+</span><span id="install-453"><a href="#install-453"><span class="linenos">453</span></a>        <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Downloaded </span><span class="si">{</span><span class="n">release_ordinal</span><span class="si">}</span><span class="s2"> release(s) for item </span><span class="si">{</span><span class="n">item_id</span><span class="si">}</span><span class="s2">.&quot;</span><span class="p">)</span>
+</span><span id="install-454"><a href="#install-454"><span class="linenos">454</span></a>
+</span><span id="install-455"><a href="#install-455"><span class="linenos">455</span></a>    <span class="n">_logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;TRUD installation completed&quot;</span><span class="p">)</span>
 </span></pre></div>
 
 
diff --git a/docs/api/acmc/util.html b/docs/api/acmc/util.html
index ade18c037e30f0b9e2a941d675b14a44ca14b009..f9bb06388e6627867c16fc4f6f566137bc749822 100644
--- a/docs/api/acmc/util.html
+++ b/docs/api/acmc/util.html
@@ -60,13 +60,21 @@
 
                         <label class="view-source-button" for="mod-util-view-source"><span>View Source</span></label>
 
-                        <div class="pdoc-code codehilite"><pre><span></span><span id="L-1"><a href="#L-1"><span class="linenos">1</span></a><span class="kn">import</span><span class="w"> </span><span class="nn">yaml</span>
-</span><span id="L-2"><a href="#L-2"><span class="linenos">2</span></a>
-</span><span id="L-3"><a href="#L-3"><span class="linenos">3</span></a>
-</span><span id="L-4"><a href="#L-4"><span class="linenos">4</span></a><span class="c1"># Custom Dumper to retain quotes on strings in yaml library</span>
-</span><span id="L-5"><a href="#L-5"><span class="linenos">5</span></a><span class="k">class</span><span class="w"> </span><span class="nc">QuotedDumper</span><span class="p">(</span><span class="n">yaml</span><span class="o">.</span><span class="n">Dumper</span><span class="p">):</span>
-</span><span id="L-6"><a href="#L-6"><span class="linenos">6</span></a>    <span class="k">def</span><span class="w"> </span><span class="nf">increase_indent</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">flow</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">indentless</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
-</span><span id="L-7"><a href="#L-7"><span class="linenos">7</span></a>        <span class="k">return</span> <span class="nb">super</span><span class="p">(</span><span class="n">QuotedDumper</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">increase_indent</span><span class="p">(</span><span class="n">flow</span><span class="p">,</span> <span class="n">indentless</span><span class="p">)</span>
+                        <div class="pdoc-code codehilite"><pre><span></span><span id="L-1"><a href="#L-1"><span class="linenos"> 1</span></a><span class="kn">import</span><span class="w"> </span><span class="nn">yaml</span>
+</span><span id="L-2"><a href="#L-2"><span class="linenos"> 2</span></a>
+</span><span id="L-3"><a href="#L-3"><span class="linenos"> 3</span></a><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-4"><a href="#L-4"><span class="linenos"> 4</span></a><span class="sd">util.py module</span>
+</span><span id="L-5"><a href="#L-5"><span class="linenos"> 5</span></a>
+</span><span id="L-6"><a href="#L-6"><span class="linenos"> 6</span></a><span class="sd">This module provides general utility functions for the acmc modules</span>
+</span><span id="L-7"><a href="#L-7"><span class="linenos"> 7</span></a>
+</span><span id="L-8"><a href="#L-8"><span class="linenos"> 8</span></a><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-9"><a href="#L-9"><span class="linenos"> 9</span></a>
+</span><span id="L-10"><a href="#L-10"><span class="linenos">10</span></a>
+</span><span id="L-11"><a href="#L-11"><span class="linenos">11</span></a><span class="k">class</span><span class="w"> </span><span class="nc">QuotedDumper</span><span class="p">(</span><span class="n">yaml</span><span class="o">.</span><span class="n">Dumper</span><span class="p">):</span>
+</span><span id="L-12"><a href="#L-12"><span class="linenos">12</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Custom Dumper to retain quotes on strings in yaml library&quot;&quot;&quot;</span>
+</span><span id="L-13"><a href="#L-13"><span class="linenos">13</span></a>
+</span><span id="L-14"><a href="#L-14"><span class="linenos">14</span></a>    <span class="k">def</span><span class="w"> </span><span class="nf">increase_indent</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">flow</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">indentless</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
+</span><span id="L-15"><a href="#L-15"><span class="linenos">15</span></a>        <span class="k">return</span> <span class="nb">super</span><span class="p">(</span><span class="n">QuotedDumper</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">increase_indent</span><span class="p">(</span><span class="n">flow</span><span class="p">,</span> <span class="n">indentless</span><span class="p">)</span>
 </span></pre></div>
 
 
@@ -82,13 +90,17 @@
 
     </div>
     <a class="headerlink" href="#QuotedDumper"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="QuotedDumper-6"><a href="#QuotedDumper-6"><span class="linenos">6</span></a><span class="k">class</span><span class="w"> </span><span class="nc">QuotedDumper</span><span class="p">(</span><span class="n">yaml</span><span class="o">.</span><span class="n">Dumper</span><span class="p">):</span>
-</span><span id="QuotedDumper-7"><a href="#QuotedDumper-7"><span class="linenos">7</span></a>    <span class="k">def</span><span class="w"> </span><span class="nf">increase_indent</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">flow</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">indentless</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
-</span><span id="QuotedDumper-8"><a href="#QuotedDumper-8"><span class="linenos">8</span></a>        <span class="k">return</span> <span class="nb">super</span><span class="p">(</span><span class="n">QuotedDumper</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">increase_indent</span><span class="p">(</span><span class="n">flow</span><span class="p">,</span> <span class="n">indentless</span><span class="p">)</span>
+            <div class="pdoc-code codehilite"><pre><span></span><span id="QuotedDumper-12"><a href="#QuotedDumper-12"><span class="linenos">12</span></a><span class="k">class</span><span class="w"> </span><span class="nc">QuotedDumper</span><span class="p">(</span><span class="n">yaml</span><span class="o">.</span><span class="n">Dumper</span><span class="p">):</span>
+</span><span id="QuotedDumper-13"><a href="#QuotedDumper-13"><span class="linenos">13</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Custom Dumper to retain quotes on strings in yaml library&quot;&quot;&quot;</span>
+</span><span id="QuotedDumper-14"><a href="#QuotedDumper-14"><span class="linenos">14</span></a>
+</span><span id="QuotedDumper-15"><a href="#QuotedDumper-15"><span class="linenos">15</span></a>    <span class="k">def</span><span class="w"> </span><span class="nf">increase_indent</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">flow</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">indentless</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
+</span><span id="QuotedDumper-16"><a href="#QuotedDumper-16"><span class="linenos">16</span></a>        <span class="k">return</span> <span class="nb">super</span><span class="p">(</span><span class="n">QuotedDumper</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">increase_indent</span><span class="p">(</span><span class="n">flow</span><span class="p">,</span> <span class="n">indentless</span><span class="p">)</span>
 </span></pre></div>
 
 
-    
+            <div class="docstring"><p>Custom Dumper to retain quotes on strings in yaml library</p>
+</div>
+
 
                             <div id="QuotedDumper.increase_indent" class="classattr">
                                         <input id="QuotedDumper.increase_indent-view-source" class="view-source-toggle-state" type="checkbox" aria-hidden="true" tabindex="-1">
@@ -101,8 +113,8 @@
 
     </div>
     <a class="headerlink" href="#QuotedDumper.increase_indent"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="QuotedDumper.increase_indent-7"><a href="#QuotedDumper.increase_indent-7"><span class="linenos">7</span></a>    <span class="k">def</span><span class="w"> </span><span class="nf">increase_indent</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">flow</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">indentless</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
-</span><span id="QuotedDumper.increase_indent-8"><a href="#QuotedDumper.increase_indent-8"><span class="linenos">8</span></a>        <span class="k">return</span> <span class="nb">super</span><span class="p">(</span><span class="n">QuotedDumper</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">increase_indent</span><span class="p">(</span><span class="n">flow</span><span class="p">,</span> <span class="n">indentless</span><span class="p">)</span>
+            <div class="pdoc-code codehilite"><pre><span></span><span id="QuotedDumper.increase_indent-15"><a href="#QuotedDumper.increase_indent-15"><span class="linenos">15</span></a>    <span class="k">def</span><span class="w"> </span><span class="nf">increase_indent</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">flow</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">indentless</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
+</span><span id="QuotedDumper.increase_indent-16"><a href="#QuotedDumper.increase_indent-16"><span class="linenos">16</span></a>        <span class="k">return</span> <span class="nb">super</span><span class="p">(</span><span class="n">QuotedDumper</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">increase_indent</span><span class="p">(</span><span class="n">flow</span><span class="p">,</span> <span class="n">indentless</span><span class="p">)</span>
 </span></pre></div>
 
 
diff --git a/docs/api/search.js b/docs/api/search.js
index 08f68bc990a29567eca250259fba5a14fea9d221..7d8fc12d17b6ca1351ab215866a79017feaab16a 100644
--- a/docs/api/search.js
+++ b/docs/api/search.js
@@ -1,6 +1,6 @@
 window.pdocSearch = (function(){
 /** elasticlunr - http://weixsong.github.io * Copyright (C) 2017 Oliver Nightingale * Copyright (C) 2017 Wei Song * MIT Licensed */!function(){function e(e){if(null===e||"object"!=typeof e)return e;var t=e.constructor();for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version="0.9.5",lunr=t,t.utils={},t.utils.warn=function(e){return function(t){e.console&&console.warn&&console.warn(t)}}(this),t.utils.toString=function(e){return void 0===e||null===e?"":e.toString()},t.EventEmitter=function(){this.events={}},t.EventEmitter.prototype.addListener=function(){var e=Array.prototype.slice.call(arguments),t=e.pop(),n=e;if("function"!=typeof t)throw new TypeError("last argument must be a function");n.forEach(function(e){this.hasHandler(e)||(this.events[e]=[]),this.events[e].push(t)},this)},t.EventEmitter.prototype.removeListener=function(e,t){if(this.hasHandler(e)){var n=this.events[e].indexOf(t);-1!==n&&(this.events[e].splice(n,1),0==this.events[e].length&&delete this.events[e])}},t.EventEmitter.prototype.emit=function(e){if(this.hasHandler(e)){var t=Array.prototype.slice.call(arguments,1);this.events[e].forEach(function(e){e.apply(void 0,t)},this)}},t.EventEmitter.prototype.hasHandler=function(e){return e in this.events},t.tokenizer=function(e){if(!arguments.length||null===e||void 0===e)return[];if(Array.isArray(e)){var n=e.filter(function(e){return null===e||void 0===e?!1:!0});n=n.map(function(e){return t.utils.toString(e).toLowerCase()});var i=[];return n.forEach(function(e){var n=e.split(t.tokenizer.seperator);i=i.concat(n)},this),i}return e.toString().trim().toLowerCase().split(t.tokenizer.seperator)},t.tokenizer.defaultSeperator=/[\s\-]+/,t.tokenizer.seperator=t.tokenizer.defaultSeperator,t.tokenizer.setSeperator=function(e){null!==e&&void 0!==e&&"object"==typeof e&&(t.tokenizer.seperator=e)},t.tokenizer.resetSeperator=function(){t.tokenizer.seperator=t.tokenizer.defaultSeperator},t.tokenizer.getSeperator=function(){return t.tokenizer.seperator},t.Pipeline=function(){this._queue=[]},t.Pipeline.registeredFunctions={},t.Pipeline.registerFunction=function(e,n){n in t.Pipeline.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[n]=e},t.Pipeline.getRegisteredFunction=function(e){return e in t.Pipeline.registeredFunctions!=!0?null:t.Pipeline.registeredFunctions[e]},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(e){var i=t.Pipeline.getRegisteredFunction(e);if(!i)throw new Error("Cannot load un-registered function: "+e);n.add(i)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(e){t.Pipeline.warnIfFunctionNotRegistered(e),this._queue.push(e)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._queue.indexOf(e);if(-1===i)throw new Error("Cannot find existingFn");this._queue.splice(i+1,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._queue.indexOf(e);if(-1===i)throw new Error("Cannot find existingFn");this._queue.splice(i,0,n)},t.Pipeline.prototype.remove=function(e){var t=this._queue.indexOf(e);-1!==t&&this._queue.splice(t,1)},t.Pipeline.prototype.run=function(e){for(var t=[],n=e.length,i=this._queue.length,o=0;n>o;o++){for(var r=e[o],s=0;i>s&&(r=this._queue[s](r,o,e),void 0!==r&&null!==r);s++);void 0!==r&&null!==r&&t.push(r)}return t},t.Pipeline.prototype.reset=function(){this._queue=[]},t.Pipeline.prototype.get=function(){return this._queue},t.Pipeline.prototype.toJSON=function(){return this._queue.map(function(e){return t.Pipeline.warnIfFunctionNotRegistered(e),e.label})},t.Index=function(){this._fields=[],this._ref="id",this.pipeline=new t.Pipeline,this.documentStore=new t.DocumentStore,this.index={},this.eventEmitter=new t.EventEmitter,this._idfCache={},this.on("add","remove","update",function(){this._idfCache={}}.bind(this))},t.Index.prototype.on=function(){var e=Array.prototype.slice.call(arguments);return this.eventEmitter.addListener.apply(this.eventEmitter,e)},t.Index.prototype.off=function(e,t){return this.eventEmitter.removeListener(e,t)},t.Index.load=function(e){e.version!==t.version&&t.utils.warn("version mismatch: current "+t.version+" importing "+e.version);var n=new this;n._fields=e.fields,n._ref=e.ref,n.documentStore=t.DocumentStore.load(e.documentStore),n.pipeline=t.Pipeline.load(e.pipeline),n.index={};for(var i in e.index)n.index[i]=t.InvertedIndex.load(e.index[i]);return n},t.Index.prototype.addField=function(e){return this._fields.push(e),this.index[e]=new t.InvertedIndex,this},t.Index.prototype.setRef=function(e){return this._ref=e,this},t.Index.prototype.saveDocument=function(e){return this.documentStore=new t.DocumentStore(e),this},t.Index.prototype.addDoc=function(e,n){if(e){var n=void 0===n?!0:n,i=e[this._ref];this.documentStore.addDoc(i,e),this._fields.forEach(function(n){var o=this.pipeline.run(t.tokenizer(e[n]));this.documentStore.addFieldLength(i,n,o.length);var r={};o.forEach(function(e){e in r?r[e]+=1:r[e]=1},this);for(var s in r){var u=r[s];u=Math.sqrt(u),this.index[n].addToken(s,{ref:i,tf:u})}},this),n&&this.eventEmitter.emit("add",e,this)}},t.Index.prototype.removeDocByRef=function(e){if(e&&this.documentStore.isDocStored()!==!1&&this.documentStore.hasDoc(e)){var t=this.documentStore.getDoc(e);this.removeDoc(t,!1)}},t.Index.prototype.removeDoc=function(e,n){if(e){var n=void 0===n?!0:n,i=e[this._ref];this.documentStore.hasDoc(i)&&(this.documentStore.removeDoc(i),this._fields.forEach(function(n){var o=this.pipeline.run(t.tokenizer(e[n]));o.forEach(function(e){this.index[n].removeToken(e,i)},this)},this),n&&this.eventEmitter.emit("remove",e,this))}},t.Index.prototype.updateDoc=function(e,t){var t=void 0===t?!0:t;this.removeDocByRef(e[this._ref],!1),this.addDoc(e,!1),t&&this.eventEmitter.emit("update",e,this)},t.Index.prototype.idf=function(e,t){var n="@"+t+"/"+e;if(Object.prototype.hasOwnProperty.call(this._idfCache,n))return this._idfCache[n];var i=this.index[t].getDocFreq(e),o=1+Math.log(this.documentStore.length/(i+1));return this._idfCache[n]=o,o},t.Index.prototype.getFields=function(){return this._fields.slice()},t.Index.prototype.search=function(e,n){if(!e)return[];e="string"==typeof e?{any:e}:JSON.parse(JSON.stringify(e));var i=null;null!=n&&(i=JSON.stringify(n));for(var o=new t.Configuration(i,this.getFields()).get(),r={},s=Object.keys(e),u=0;u<s.length;u++){var a=s[u];r[a]=this.pipeline.run(t.tokenizer(e[a]))}var l={};for(var c in o){var d=r[c]||r.any;if(d){var f=this.fieldSearch(d,c,o),h=o[c].boost;for(var p in f)f[p]=f[p]*h;for(var p in f)p in l?l[p]+=f[p]:l[p]=f[p]}}var v,g=[];for(var p in l)v={ref:p,score:l[p]},this.documentStore.hasDoc(p)&&(v.doc=this.documentStore.getDoc(p)),g.push(v);return g.sort(function(e,t){return t.score-e.score}),g},t.Index.prototype.fieldSearch=function(e,t,n){var i=n[t].bool,o=n[t].expand,r=n[t].boost,s=null,u={};return 0!==r?(e.forEach(function(e){var n=[e];1==o&&(n=this.index[t].expandToken(e));var r={};n.forEach(function(n){var o=this.index[t].getDocs(n),a=this.idf(n,t);if(s&&"AND"==i){var l={};for(var c in s)c in o&&(l[c]=o[c]);o=l}n==e&&this.fieldSearchStats(u,n,o);for(var c in o){var d=this.index[t].getTermFrequency(n,c),f=this.documentStore.getFieldLength(c,t),h=1;0!=f&&(h=1/Math.sqrt(f));var p=1;n!=e&&(p=.15*(1-(n.length-e.length)/n.length));var v=d*a*h*p;c in r?r[c]+=v:r[c]=v}},this),s=this.mergeScores(s,r,i)},this),s=this.coordNorm(s,u,e.length)):void 0},t.Index.prototype.mergeScores=function(e,t,n){if(!e)return t;if("AND"==n){var i={};for(var o in t)o in e&&(i[o]=e[o]+t[o]);return i}for(var o in t)o in e?e[o]+=t[o]:e[o]=t[o];return e},t.Index.prototype.fieldSearchStats=function(e,t,n){for(var i in n)i in e?e[i].push(t):e[i]=[t]},t.Index.prototype.coordNorm=function(e,t,n){for(var i in e)if(i in t){var o=t[i].length;e[i]=e[i]*o/n}return e},t.Index.prototype.toJSON=function(){var e={};return this._fields.forEach(function(t){e[t]=this.index[t].toJSON()},this),{version:t.version,fields:this._fields,ref:this._ref,documentStore:this.documentStore.toJSON(),index:e,pipeline:this.pipeline.toJSON()}},t.Index.prototype.use=function(e){var t=Array.prototype.slice.call(arguments,1);t.unshift(this),e.apply(this,t)},t.DocumentStore=function(e){this._save=null===e||void 0===e?!0:e,this.docs={},this.docInfo={},this.length=0},t.DocumentStore.load=function(e){var t=new this;return t.length=e.length,t.docs=e.docs,t.docInfo=e.docInfo,t._save=e.save,t},t.DocumentStore.prototype.isDocStored=function(){return this._save},t.DocumentStore.prototype.addDoc=function(t,n){this.hasDoc(t)||this.length++,this.docs[t]=this._save===!0?e(n):null},t.DocumentStore.prototype.getDoc=function(e){return this.hasDoc(e)===!1?null:this.docs[e]},t.DocumentStore.prototype.hasDoc=function(e){return e in this.docs},t.DocumentStore.prototype.removeDoc=function(e){this.hasDoc(e)&&(delete this.docs[e],delete this.docInfo[e],this.length--)},t.DocumentStore.prototype.addFieldLength=function(e,t,n){null!==e&&void 0!==e&&0!=this.hasDoc(e)&&(this.docInfo[e]||(this.docInfo[e]={}),this.docInfo[e][t]=n)},t.DocumentStore.prototype.updateFieldLength=function(e,t,n){null!==e&&void 0!==e&&0!=this.hasDoc(e)&&this.addFieldLength(e,t,n)},t.DocumentStore.prototype.getFieldLength=function(e,t){return null===e||void 0===e?0:e in this.docs&&t in this.docInfo[e]?this.docInfo[e][t]:0},t.DocumentStore.prototype.toJSON=function(){return{docs:this.docs,docInfo:this.docInfo,length:this.length,save:this._save}},t.stemmer=function(){var e={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},t={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},n="[^aeiou]",i="[aeiouy]",o=n+"[^aeiouy]*",r=i+"[aeiou]*",s="^("+o+")?"+r+o,u="^("+o+")?"+r+o+"("+r+")?$",a="^("+o+")?"+r+o+r+o,l="^("+o+")?"+i,c=new RegExp(s),d=new RegExp(a),f=new RegExp(u),h=new RegExp(l),p=/^(.+?)(ss|i)es$/,v=/^(.+?)([^s])s$/,g=/^(.+?)eed$/,m=/^(.+?)(ed|ing)$/,y=/.$/,S=/(at|bl|iz)$/,x=new RegExp("([^aeiouylsz])\\1$"),w=new RegExp("^"+o+i+"[^aeiouwxy]$"),I=/^(.+?[^aeiou])y$/,b=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,E=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,D=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,F=/^(.+?)(s|t)(ion)$/,_=/^(.+?)e$/,P=/ll$/,k=new RegExp("^"+o+i+"[^aeiouwxy]$"),z=function(n){var i,o,r,s,u,a,l;if(n.length<3)return n;if(r=n.substr(0,1),"y"==r&&(n=r.toUpperCase()+n.substr(1)),s=p,u=v,s.test(n)?n=n.replace(s,"$1$2"):u.test(n)&&(n=n.replace(u,"$1$2")),s=g,u=m,s.test(n)){var z=s.exec(n);s=c,s.test(z[1])&&(s=y,n=n.replace(s,""))}else if(u.test(n)){var z=u.exec(n);i=z[1],u=h,u.test(i)&&(n=i,u=S,a=x,l=w,u.test(n)?n+="e":a.test(n)?(s=y,n=n.replace(s,"")):l.test(n)&&(n+="e"))}if(s=I,s.test(n)){var z=s.exec(n);i=z[1],n=i+"i"}if(s=b,s.test(n)){var z=s.exec(n);i=z[1],o=z[2],s=c,s.test(i)&&(n=i+e[o])}if(s=E,s.test(n)){var z=s.exec(n);i=z[1],o=z[2],s=c,s.test(i)&&(n=i+t[o])}if(s=D,u=F,s.test(n)){var z=s.exec(n);i=z[1],s=d,s.test(i)&&(n=i)}else if(u.test(n)){var z=u.exec(n);i=z[1]+z[2],u=d,u.test(i)&&(n=i)}if(s=_,s.test(n)){var z=s.exec(n);i=z[1],s=d,u=f,a=k,(s.test(i)||u.test(i)&&!a.test(i))&&(n=i)}return s=P,u=d,s.test(n)&&u.test(n)&&(s=y,n=n.replace(s,"")),"y"==r&&(n=r.toLowerCase()+n.substr(1)),n};return z}(),t.Pipeline.registerFunction(t.stemmer,"stemmer"),t.stopWordFilter=function(e){return e&&t.stopWordFilter.stopWords[e]!==!0?e:void 0},t.clearStopWords=function(){t.stopWordFilter.stopWords={}},t.addStopWords=function(e){null!=e&&Array.isArray(e)!==!1&&e.forEach(function(e){t.stopWordFilter.stopWords[e]=!0},this)},t.resetStopWords=function(){t.stopWordFilter.stopWords=t.defaultStopWords},t.defaultStopWords={"":!0,a:!0,able:!0,about:!0,across:!0,after:!0,all:!0,almost:!0,also:!0,am:!0,among:!0,an:!0,and:!0,any:!0,are:!0,as:!0,at:!0,be:!0,because:!0,been:!0,but:!0,by:!0,can:!0,cannot:!0,could:!0,dear:!0,did:!0,"do":!0,does:!0,either:!0,"else":!0,ever:!0,every:!0,"for":!0,from:!0,get:!0,got:!0,had:!0,has:!0,have:!0,he:!0,her:!0,hers:!0,him:!0,his:!0,how:!0,however:!0,i:!0,"if":!0,"in":!0,into:!0,is:!0,it:!0,its:!0,just:!0,least:!0,let:!0,like:!0,likely:!0,may:!0,me:!0,might:!0,most:!0,must:!0,my:!0,neither:!0,no:!0,nor:!0,not:!0,of:!0,off:!0,often:!0,on:!0,only:!0,or:!0,other:!0,our:!0,own:!0,rather:!0,said:!0,say:!0,says:!0,she:!0,should:!0,since:!0,so:!0,some:!0,than:!0,that:!0,the:!0,their:!0,them:!0,then:!0,there:!0,these:!0,they:!0,"this":!0,tis:!0,to:!0,too:!0,twas:!0,us:!0,wants:!0,was:!0,we:!0,were:!0,what:!0,when:!0,where:!0,which:!0,"while":!0,who:!0,whom:!0,why:!0,will:!0,"with":!0,would:!0,yet:!0,you:!0,your:!0},t.stopWordFilter.stopWords=t.defaultStopWords,t.Pipeline.registerFunction(t.stopWordFilter,"stopWordFilter"),t.trimmer=function(e){if(null===e||void 0===e)throw new Error("token should not be undefined");return e.replace(/^\W+/,"").replace(/\W+$/,"")},t.Pipeline.registerFunction(t.trimmer,"trimmer"),t.InvertedIndex=function(){this.root={docs:{},df:0}},t.InvertedIndex.load=function(e){var t=new this;return t.root=e.root,t},t.InvertedIndex.prototype.addToken=function(e,t,n){for(var n=n||this.root,i=0;i<=e.length-1;){var o=e[i];o in n||(n[o]={docs:{},df:0}),i+=1,n=n[o]}var r=t.ref;n.docs[r]?n.docs[r]={tf:t.tf}:(n.docs[r]={tf:t.tf},n.df+=1)},t.InvertedIndex.prototype.hasToken=function(e){if(!e)return!1;for(var t=this.root,n=0;n<e.length;n++){if(!t[e[n]])return!1;t=t[e[n]]}return!0},t.InvertedIndex.prototype.getNode=function(e){if(!e)return null;for(var t=this.root,n=0;n<e.length;n++){if(!t[e[n]])return null;t=t[e[n]]}return t},t.InvertedIndex.prototype.getDocs=function(e){var t=this.getNode(e);return null==t?{}:t.docs},t.InvertedIndex.prototype.getTermFrequency=function(e,t){var n=this.getNode(e);return null==n?0:t in n.docs?n.docs[t].tf:0},t.InvertedIndex.prototype.getDocFreq=function(e){var t=this.getNode(e);return null==t?0:t.df},t.InvertedIndex.prototype.removeToken=function(e,t){if(e){var n=this.getNode(e);null!=n&&t in n.docs&&(delete n.docs[t],n.df-=1)}},t.InvertedIndex.prototype.expandToken=function(e,t,n){if(null==e||""==e)return[];var t=t||[];if(void 0==n&&(n=this.getNode(e),null==n))return t;n.df>0&&t.push(e);for(var i in n)"docs"!==i&&"df"!==i&&this.expandToken(e+i,t,n[i]);return t},t.InvertedIndex.prototype.toJSON=function(){return{root:this.root}},t.Configuration=function(e,n){var e=e||"";if(void 0==n||null==n)throw new Error("fields should not be null");this.config={};var i;try{i=JSON.parse(e),this.buildUserConfig(i,n)}catch(o){t.utils.warn("user configuration parse failed, will use default configuration"),this.buildDefaultConfig(n)}},t.Configuration.prototype.buildDefaultConfig=function(e){this.reset(),e.forEach(function(e){this.config[e]={boost:1,bool:"OR",expand:!1}},this)},t.Configuration.prototype.buildUserConfig=function(e,n){var i="OR",o=!1;if(this.reset(),"bool"in e&&(i=e.bool||i),"expand"in e&&(o=e.expand||o),"fields"in e)for(var r in e.fields)if(n.indexOf(r)>-1){var s=e.fields[r],u=o;void 0!=s.expand&&(u=s.expand),this.config[r]={boost:s.boost||0===s.boost?s.boost:1,bool:s.bool||i,expand:u}}else t.utils.warn("field name in user configuration not found in index instance fields");else this.addAllFields2UserConfig(i,o,n)},t.Configuration.prototype.addAllFields2UserConfig=function(e,t,n){n.forEach(function(n){this.config[n]={boost:1,bool:e,expand:t}},this)},t.Configuration.prototype.get=function(){return this.config},t.Configuration.prototype.reset=function(){this.config={}},lunr.SortedSet=function(){this.length=0,this.elements=[]},lunr.SortedSet.load=function(e){var t=new this;return t.elements=e,t.length=e.length,t},lunr.SortedSet.prototype.add=function(){var e,t;for(e=0;e<arguments.length;e++)t=arguments[e],~this.indexOf(t)||this.elements.splice(this.locationFor(t),0,t);this.length=this.elements.length},lunr.SortedSet.prototype.toArray=function(){return this.elements.slice()},lunr.SortedSet.prototype.map=function(e,t){return this.elements.map(e,t)},lunr.SortedSet.prototype.forEach=function(e,t){return this.elements.forEach(e,t)},lunr.SortedSet.prototype.indexOf=function(e){for(var t=0,n=this.elements.length,i=n-t,o=t+Math.floor(i/2),r=this.elements[o];i>1;){if(r===e)return o;e>r&&(t=o),r>e&&(n=o),i=n-t,o=t+Math.floor(i/2),r=this.elements[o]}return r===e?o:-1},lunr.SortedSet.prototype.locationFor=function(e){for(var t=0,n=this.elements.length,i=n-t,o=t+Math.floor(i/2),r=this.elements[o];i>1;)e>r&&(t=o),r>e&&(n=o),i=n-t,o=t+Math.floor(i/2),r=this.elements[o];return r>e?o:e>r?o+1:void 0},lunr.SortedSet.prototype.intersect=function(e){for(var t=new lunr.SortedSet,n=0,i=0,o=this.length,r=e.length,s=this.elements,u=e.elements;;){if(n>o-1||i>r-1)break;s[n]!==u[i]?s[n]<u[i]?n++:s[n]>u[i]&&i++:(t.add(s[n]),n++,i++)}return t},lunr.SortedSet.prototype.clone=function(){var e=new lunr.SortedSet;return e.elements=this.toArray(),e.length=e.elements.length,e},lunr.SortedSet.prototype.union=function(e){var t,n,i;this.length>=e.length?(t=this,n=e):(t=e,n=this),i=t.clone();for(var o=0,r=n.toArray();o<r.length;o++)i.add(r[o]);return i},lunr.SortedSet.prototype.toJSON=function(){return this.toArray()},function(e,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():e.elasticlunr=t()}(this,function(){return t})}();
-    /** pdoc search index */const docs = {"version": "0.9.5", "fields": ["qualname", "fullname", "annotation", "default_value", "signature", "bases", "doc"], "ref": "fullname", "documentStore": {"docs": {"acmc": {"fullname": "acmc", "modulename": "acmc", "kind": "module", "doc": "<p></p>\n"}, "acmc.logging_config": {"fullname": "acmc.logging_config", "modulename": "acmc.logging_config", "kind": "module", "doc": "<p>logging_config.py</p>\n\n<p>This module defines functions to setup logging for acmc across all module. </p>\n\n<p>Constants</p>\n\n<ul>\n<li>DEFAULT_LOG_FILE: The default acmc application log filename.</li>\n</ul>\n"}, "acmc.logging_config.DEFAULT_LOG_FILE": {"fullname": "acmc.logging_config.DEFAULT_LOG_FILE", "modulename": "acmc.logging_config", "qualname": "DEFAULT_LOG_FILE", "kind": "variable", "doc": "<p></p>\n", "default_value": "&#x27;acmc.log&#x27;"}, "acmc.logging_config.setup_logger": {"fullname": "acmc.logging_config.setup_logger", "modulename": "acmc.logging_config", "qualname": "setup_logger", "kind": "function", "doc": "<p>Sets up acmc logger as a singleton outputing to file and sysout syserr.</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">log_level</span><span class=\"p\">:</span> <span class=\"nb\">int</span> <span class=\"o\">=</span> <span class=\"mi\">20</span></span><span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.logging_config.set_log_level": {"fullname": "acmc.logging_config.set_log_level", "modulename": "acmc.logging_config", "qualname": "set_log_level", "kind": "function", "doc": "<p>Sets the log level for the acmc logger.</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">log_level</span><span class=\"p\">:</span> <span class=\"nb\">int</span></span><span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.main": {"fullname": "acmc.main", "modulename": "acmc.main", "kind": "module", "doc": "<p></p>\n"}, "acmc.main.logger": {"fullname": "acmc.main.logger", "modulename": "acmc.main", "qualname": "logger", "kind": "variable", "doc": "<p></p>\n", "default_value": "&lt;Logger acmc_logger (INFO)&gt;"}, "acmc.main.DEFAULT_WORKSPACE_PATH": {"fullname": "acmc.main.DEFAULT_WORKSPACE_PATH", "modulename": "acmc.main", "qualname": "DEFAULT_WORKSPACE_PATH", "kind": "variable", "doc": "<p></p>\n", "default_value": "PosixPath(&#x27;workspace&#x27;)"}, "acmc.main.trud_install": {"fullname": "acmc.main.trud_install", "modulename": "acmc.main", "qualname": "trud_install", "kind": "function", "doc": "<p>Handle the <code>trud install</code> command.</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">args</span><span class=\"p\">:</span> <span class=\"n\">argparse</span><span class=\"o\">.</span><span class=\"n\">Namespace</span></span><span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.main.omop_install": {"fullname": "acmc.main.omop_install", "modulename": "acmc.main", "qualname": "omop_install", "kind": "function", "doc": "<p>Handle the <code>omop install</code> command.</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">args</span><span class=\"p\">:</span> <span class=\"n\">argparse</span><span class=\"o\">.</span><span class=\"n\">Namespace</span></span><span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.main.omop_clear": {"fullname": "acmc.main.omop_clear", "modulename": "acmc.main", "qualname": "omop_clear", "kind": "function", "doc": "<p>Handle the <code>omop clear</code> command.</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">args</span><span class=\"p\">:</span> <span class=\"n\">argparse</span><span class=\"o\">.</span><span class=\"n\">Namespace</span></span><span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.main.omop_delete": {"fullname": "acmc.main.omop_delete", "modulename": "acmc.main", "qualname": "omop_delete", "kind": "function", "doc": "<p>Handle the <code>omop delete</code> command.</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">args</span><span class=\"p\">:</span> <span class=\"n\">argparse</span><span class=\"o\">.</span><span class=\"n\">Namespace</span></span><span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.main.phen_init": {"fullname": "acmc.main.phen_init", "modulename": "acmc.main", "qualname": "phen_init", "kind": "function", "doc": "<p>Handle the <code>phen init</code> command.</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">args</span><span class=\"p\">:</span> <span class=\"n\">argparse</span><span class=\"o\">.</span><span class=\"n\">Namespace</span></span><span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.main.phen_fork": {"fullname": "acmc.main.phen_fork", "modulename": "acmc.main", "qualname": "phen_fork", "kind": "function", "doc": "<p>Handle the <code>phen fork</code> command.</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">args</span><span class=\"p\">:</span> <span class=\"n\">argparse</span><span class=\"o\">.</span><span class=\"n\">Namespace</span></span><span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.main.phen_validate": {"fullname": "acmc.main.phen_validate", "modulename": "acmc.main", "qualname": "phen_validate", "kind": "function", "doc": "<p>Handle the <code>phen validate</code> command.</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">args</span><span class=\"p\">:</span> <span class=\"n\">argparse</span><span class=\"o\">.</span><span class=\"n\">Namespace</span></span><span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.main.phen_map": {"fullname": "acmc.main.phen_map", "modulename": "acmc.main", "qualname": "phen_map", "kind": "function", "doc": "<p>Handle the <code>phen map</code> command.</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">args</span><span class=\"p\">:</span> <span class=\"n\">argparse</span><span class=\"o\">.</span><span class=\"n\">Namespace</span></span><span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.main.phen_export": {"fullname": "acmc.main.phen_export", "modulename": "acmc.main", "qualname": "phen_export", "kind": "function", "doc": "<p>Handle the <code>phen copy</code> command.</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">args</span><span class=\"p\">:</span> <span class=\"n\">argparse</span><span class=\"o\">.</span><span class=\"n\">Namespace</span></span><span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.main.phen_publish": {"fullname": "acmc.main.phen_publish", "modulename": "acmc.main", "qualname": "phen_publish", "kind": "function", "doc": "<p>Handle the <code>phen publish</code> command.</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">args</span><span class=\"p\">:</span> <span class=\"n\">argparse</span><span class=\"o\">.</span><span class=\"n\">Namespace</span></span><span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.main.phen_copy": {"fullname": "acmc.main.phen_copy", "modulename": "acmc.main", "qualname": "phen_copy", "kind": "function", "doc": "<p>Handle the <code>phen copy</code> command.</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">args</span><span class=\"p\">:</span> <span class=\"n\">argparse</span><span class=\"o\">.</span><span class=\"n\">Namespace</span></span><span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.main.phen_diff": {"fullname": "acmc.main.phen_diff", "modulename": "acmc.main", "qualname": "phen_diff", "kind": "function", "doc": "<p>Handle the <code>phen diff</code> command.</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">args</span><span class=\"p\">:</span> <span class=\"n\">argparse</span><span class=\"o\">.</span><span class=\"n\">Namespace</span></span><span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.main.main": {"fullname": "acmc.main.main", "modulename": "acmc.main", "qualname": "main", "kind": "function", "doc": "<p></p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.omop": {"fullname": "acmc.omop", "modulename": "acmc.omop", "kind": "module", "doc": "<h1 id=\"omop-module\">omop module</h1>\n\n<p>This module provides functionality to manage OMOP vocabularies.</p>\n"}, "acmc.omop.logger": {"fullname": "acmc.omop.logger", "modulename": "acmc.omop", "qualname": "logger", "kind": "variable", "doc": "<p></p>\n", "default_value": "&lt;Logger acmc_logger (INFO)&gt;"}, "acmc.omop.VOCAB_PATH": {"fullname": "acmc.omop.VOCAB_PATH", "modulename": "acmc.omop", "qualname": "VOCAB_PATH", "kind": "variable", "doc": "<p></p>\n", "default_value": "PosixPath(&#x27;vocab/omop&#x27;)"}, "acmc.omop.OMOP_CDM_Version": {"fullname": "acmc.omop.OMOP_CDM_Version", "modulename": "acmc.omop", "qualname": "OMOP_CDM_Version", "kind": "variable", "doc": "<p></p>\n", "default_value": "&#x27;54&#x27;"}, "acmc.omop.OMOP_DB_FILENAME": {"fullname": "acmc.omop.OMOP_DB_FILENAME", "modulename": "acmc.omop", "qualname": "OMOP_DB_FILENAME", "kind": "variable", "doc": "<p></p>\n", "default_value": "&#x27;omop_54.sqlite&#x27;"}, "acmc.omop.DB_PATH": {"fullname": "acmc.omop.DB_PATH", "modulename": "acmc.omop", "qualname": "DB_PATH", "kind": "variable", "doc": "<p></p>\n", "default_value": "PosixPath(&#x27;vocab/omop/omop_54.sqlite&#x27;)"}, "acmc.omop.VERSION_FILE": {"fullname": "acmc.omop.VERSION_FILE", "modulename": "acmc.omop", "qualname": "VERSION_FILE", "kind": "variable", "doc": "<p></p>\n", "default_value": "&#x27;omop_version.yml&#x27;"}, "acmc.omop.VERSION_PATH": {"fullname": "acmc.omop.VERSION_PATH", "modulename": "acmc.omop", "qualname": "VERSION_PATH", "kind": "variable", "doc": "<p></p>\n", "default_value": "PosixPath(&#x27;vocab/omop/omop_version.yml&#x27;)"}, "acmc.omop.EXPORT_FILE": {"fullname": "acmc.omop.EXPORT_FILE", "modulename": "acmc.omop", "qualname": "EXPORT_FILE", "kind": "variable", "doc": "<p></p>\n", "default_value": "&#x27;omop_54_export.sqlite&#x27;"}, "acmc.omop.vocabularies": {"fullname": "acmc.omop.vocabularies", "modulename": "acmc.omop", "qualname": "vocabularies", "kind": "variable", "doc": "<p></p>\n", "default_value": "{&#x27;source&#x27;: &#x27;OHDSI Athena&#x27;, &#x27;url&#x27;: &#x27;https://athena.ohdsi.org/vocabulary/list&#x27;, &#x27;cdm_version&#x27;: &#x27;54&#x27;, &#x27;version&#x27;: &#x27;&#x27;, &#x27;vocabularies&#x27;: [{&#x27;id&#x27;: 1, &#x27;name&#x27;: &#x27;SNOMED&#x27;}, {&#x27;id&#x27;: 2, &#x27;name&#x27;: &#x27;ICD9CM&#x27;}, {&#x27;id&#x27;: 17, &#x27;name&#x27;: &#x27;Readv2&#x27;}, {&#x27;id&#x27;: 21, &#x27;name&#x27;: &#x27;ATC&#x27;}, {&#x27;id&#x27;: 55, &#x27;name&#x27;: &#x27;OPCS4&#x27;}, {&#x27;id&#x27;: 57, &#x27;name&#x27;: &#x27;HES Specialty&#x27;}, {&#x27;id&#x27;: 70, &#x27;name&#x27;: &#x27;ICD10CM&#x27;}, {&#x27;id&#x27;: 75, &#x27;name&#x27;: &#x27;dm+d&#x27;}, {&#x27;id&#x27;: 144, &#x27;name&#x27;: &#x27;UK Biobank&#x27;}, {&#x27;id&#x27;: 154, &#x27;name&#x27;: &#x27;NHS Ethnic Category&#x27;}, {&#x27;id&#x27;: 155, &#x27;name&#x27;: &#x27;NHS Place of Service&#x27;}], &#x27;tables&#x27;: []}"}, "acmc.omop.omop_vocab_types": {"fullname": "acmc.omop.omop_vocab_types", "modulename": "acmc.omop", "qualname": "omop_vocab_types", "kind": "variable", "doc": "<p></p>\n", "default_value": "{&#x27;read2&#x27;: &#x27;Read&#x27;, &#x27;read3&#x27;: None, &#x27;icd10&#x27;: &#x27;ICD10CM&#x27;, &#x27;snomed&#x27;: &#x27;SNOMED&#x27;, &#x27;opcs4&#x27;: &#x27;OPCS4&#x27;, &#x27;atc&#x27;: &#x27;ATC&#x27;, &#x27;med&#x27;: None, &#x27;cprd&#x27;: None}"}, "acmc.omop.install": {"fullname": "acmc.omop.install", "modulename": "acmc.omop", "qualname": "install", "kind": "function", "doc": "<p>\"Installs the OMOP release csv files in a file-based sql database</p>\n\n<h6 id=\"arguments\">Arguments:</h6>\n\n<ul>\n<li><strong>omop_zip_file (str):</strong>  vocabularies zip file distributed by OHDSI Athena</li>\n<li><strong>version (str):</strong>  version of the vocabularies distributed by OHDSI Athena</li>\n</ul>\n\n<h6 id=\"raises\">Raises:</h6>\n\n<ul>\n<li><strong>ValueError:</strong>  if the zip file does not exist</li>\n<li><strong>ValueError:</strong>  if the file is not a zip file</li>\n<li><strong>Exception:</strong>  if error reading omop csv files</li>\n</ul>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">omop_zip_file</span><span class=\"p\">:</span> <span class=\"nb\">str</span>, </span><span class=\"param\"><span class=\"n\">version</span><span class=\"p\">:</span> <span class=\"nb\">str</span></span><span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.omop.write_version_file": {"fullname": "acmc.omop.write_version_file", "modulename": "acmc.omop", "qualname": "write_version_file", "kind": "function", "doc": "<p>Writes the OMOP vocaburaries and version to a file</p>\n\n<h6 id=\"arguments\">Arguments:</h6>\n\n<ul>\n<li><strong>version (str):</strong>  version of the vocabularies distributed by OHDSI Athena</li>\n</ul>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">version</span><span class=\"p\">:</span> <span class=\"nb\">str</span></span><span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.omop.clear": {"fullname": "acmc.omop.clear", "modulename": "acmc.omop", "qualname": "clear", "kind": "function", "doc": "<p>Clears the OMOP sql database</p>\n\n<h6 id=\"arguments\">Arguments:</h6>\n\n<ul>\n<li><strong>db_path (Path):</strong>  the path to the omop sqllite database</li>\n</ul>\n\n<h6 id=\"raises\">Raises:</h6>\n\n<ul>\n<li><strong>FileNotFoundError:</strong>  if the omop sqllite database does not exist</li>\n</ul>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">db_path</span><span class=\"p\">:</span> <span class=\"n\">pathlib</span><span class=\"o\">.</span><span class=\"n\">Path</span></span><span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.omop.delete": {"fullname": "acmc.omop.delete", "modulename": "acmc.omop", "qualname": "delete", "kind": "function", "doc": "<p>Deletes the OMOP sql database</p>\n\n<h6 id=\"arguments\">Arguments:</h6>\n\n<ul>\n<li><strong>db_path (Path):</strong>  the path to the omop sqllite database</li>\n</ul>\n\n<h6 id=\"raises\">Raises:</h6>\n\n<ul>\n<li><strong>FileNotFoundError:</strong>  if the omop sqllite database does not exist</li>\n</ul>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">db_path</span><span class=\"p\">:</span> <span class=\"n\">pathlib</span><span class=\"o\">.</span><span class=\"n\">Path</span></span><span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.omop.table_exists": {"fullname": "acmc.omop.table_exists", "modulename": "acmc.omop", "qualname": "table_exists", "kind": "function", "doc": "<p>Query to check if the table exists</p>\n\n<h6 id=\"arguments\">Arguments:</h6>\n\n<ul>\n<li><strong>cursor (sqlite3.Cursor):</strong>  a sqllite database cursor</li>\n<li><strong>table_name (str):</strong>  the table name to check</li>\n</ul>\n\n<h6 id=\"returns\">Returns:</h6>\n\n<blockquote>\n  <p>bool: true if table exists</p>\n</blockquote>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">cursor</span><span class=\"p\">:</span> <span class=\"n\">sqlite3</span><span class=\"o\">.</span><span class=\"n\">Cursor</span>, </span><span class=\"param\"><span class=\"n\">table_name</span><span class=\"p\">:</span> <span class=\"nb\">str</span></span><span class=\"return-annotation\">) -> <span class=\"nb\">bool</span>:</span></span>", "funcdef": "def"}, "acmc.omop.vocab_exists": {"fullname": "acmc.omop.vocab_exists", "modulename": "acmc.omop", "qualname": "vocab_exists", "kind": "function", "doc": "<p>Query to check if the vocabulary exists</p>\n\n<h6 id=\"arguments\">Arguments:</h6>\n\n<ul>\n<li><strong>cursor (sqlite3.Cursor):</strong>  a sqllite database cursor</li>\n<li><strong>vocab_id (str):</strong>  the vocabulary id to check</li>\n</ul>\n\n<h6 id=\"returns\">Returns:</h6>\n\n<blockquote>\n  <p>bool: true if vocabulary id exists</p>\n</blockquote>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">cursor</span><span class=\"p\">:</span> <span class=\"n\">sqlite3</span><span class=\"o\">.</span><span class=\"n\">Cursor</span>, </span><span class=\"param\"><span class=\"n\">vocab_id</span><span class=\"p\">:</span> <span class=\"nb\">str</span></span><span class=\"return-annotation\">) -> <span class=\"nb\">bool</span>:</span></span>", "funcdef": "def"}, "acmc.omop.concept_set_exist": {"fullname": "acmc.omop.concept_set_exist", "modulename": "acmc.omop", "qualname": "concept_set_exist", "kind": "function", "doc": "<p>Query to check if the concept set exists</p>\n\n<h6 id=\"arguments\">Arguments:</h6>\n\n<ul>\n<li><strong>cursor (sqlite3.Cursor):</strong>  a sqllite database cursor</li>\n<li><strong>concept_set_name (str):</strong>  the concept set name to check</li>\n</ul>\n\n<h6 id=\"returns\">Returns:</h6>\n\n<blockquote>\n  <p>bool: true if concept set exists</p>\n</blockquote>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">cursor</span><span class=\"p\">:</span> <span class=\"n\">sqlite3</span><span class=\"o\">.</span><span class=\"n\">Cursor</span>, </span><span class=\"param\"><span class=\"n\">concept_set_name</span><span class=\"p\">:</span> <span class=\"nb\">str</span></span><span class=\"return-annotation\">) -> <span class=\"nb\">bool</span>:</span></span>", "funcdef": "def"}, "acmc.omop.export": {"fullname": "acmc.omop.export", "modulename": "acmc.omop", "qualname": "export", "kind": "function", "doc": "<p>Export concept sets to omop database in csv format</p>\n\n<h6 id=\"arguments\">Arguments:</h6>\n\n<ul>\n<li><strong>map_path (Path):</strong>  path to the acmc map directory containing concept sets in csv format</li>\n<li><strong>export_path (Path):</strong>  path to the directory where the omop database csv files are to be written</li>\n<li><strong>version (str):</strong>  phenotype version for omop vocabulary version</li>\n<li><strong>omop_metadata (dict):</strong>  phenotype omop metadata for omop vocabulary metadata </li>\n</ul>\n\n<h6 id=\"returns\">Returns:</h6>\n\n<blockquote>\n  <p>Path: path to the exported sqllite database</p>\n</blockquote>\n", "signature": "<span class=\"signature pdoc-code multiline\">(<span class=\"param\">\t<span class=\"n\">map_path</span><span class=\"p\">:</span> <span class=\"n\">pathlib</span><span class=\"o\">.</span><span class=\"n\">Path</span>,</span><span class=\"param\">\t<span class=\"n\">export_path</span><span class=\"p\">:</span> <span class=\"n\">pathlib</span><span class=\"o\">.</span><span class=\"n\">Path</span>,</span><span class=\"param\">\t<span class=\"n\">version</span><span class=\"p\">:</span> <span class=\"nb\">str</span>,</span><span class=\"param\">\t<span class=\"n\">omop_metadata</span><span class=\"p\">:</span> <span class=\"nb\">dict</span></span><span class=\"return-annotation\">) -> <span class=\"n\">pathlib</span><span class=\"o\">.</span><span class=\"n\">Path</span>:</span></span>", "funcdef": "def"}, "acmc.parse": {"fullname": "acmc.parse", "modulename": "acmc.parse", "kind": "module", "doc": "<p></p>\n"}, "acmc.parse.logger": {"fullname": "acmc.parse.logger", "modulename": "acmc.parse", "qualname": "logger", "kind": "variable", "doc": "<p></p>\n", "default_value": "&lt;Logger acmc_logger (INFO)&gt;"}, "acmc.parse.SUPPORTED_CODE_TYPES": {"fullname": "acmc.parse.SUPPORTED_CODE_TYPES", "modulename": "acmc.parse", "qualname": "SUPPORTED_CODE_TYPES", "kind": "variable", "doc": "<p></p>\n", "default_value": "{&#x27;read2&#x27;, &#x27;icd10&#x27;, &#x27;atc&#x27;, &#x27;read3&#x27;, &#x27;snomed&#x27;, &#x27;opcs4&#x27;}"}, "acmc.parse.CodesError": {"fullname": "acmc.parse.CodesError", "modulename": "acmc.parse", "qualname": "CodesError", "kind": "class", "doc": "<p>A class used in InvalidCodesException to report an error if a code parser check fails</p>\n"}, "acmc.parse.CodesError.__init__": {"fullname": "acmc.parse.CodesError.__init__", "modulename": "acmc.parse", "qualname": "CodesError.__init__", "kind": "function", "doc": "<p></p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">message</span>, </span><span class=\"param\"><span class=\"n\">codes</span><span class=\"o\">=</span><span class=\"kc\">None</span>, </span><span class=\"param\"><span class=\"n\">codes_file</span><span class=\"o\">=</span><span class=\"kc\">None</span>, </span><span class=\"param\"><span class=\"n\">mask</span><span class=\"o\">=</span><span class=\"kc\">None</span>, </span><span class=\"param\"><span class=\"n\">code_type</span><span class=\"o\">=</span><span class=\"kc\">None</span></span>)</span>"}, "acmc.parse.InvalidCodesException": {"fullname": "acmc.parse.InvalidCodesException", "modulename": "acmc.parse", "qualname": "InvalidCodesException", "kind": "class", "doc": "<p>Custom exception class raised when invalid codes are found that cannot be resolved by processing</p>\n", "bases": "builtins.Exception"}, "acmc.parse.InvalidCodesException.__init__": {"fullname": "acmc.parse.InvalidCodesException.__init__", "modulename": "acmc.parse", "qualname": "InvalidCodesException.__init__", "kind": "function", "doc": "<p></p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">error</span></span>)</span>"}, "acmc.parse.InvalidCodesException.error": {"fullname": "acmc.parse.InvalidCodesException.error", "modulename": "acmc.parse", "qualname": "InvalidCodesException.error", "kind": "variable", "doc": "<p></p>\n"}, "acmc.parse.Proto": {"fullname": "acmc.parse.Proto", "modulename": "acmc.parse", "qualname": "Proto", "kind": "class", "doc": "<p>Define checks as list of 3 tuple: (Message, Condition, Process)</p>\n\n<ul>\n<li>Message = The name of the condition (what is printed and logged)</li>\n<li>Condition = True if Passed, and False if Failed</li>\n<li>Process = Aims to resolve all issues that stop condition from passing (Do not change index!)</li>\n</ul>\n"}, "acmc.parse.Proto.__init__": {"fullname": "acmc.parse.Proto.__init__", "modulename": "acmc.parse", "qualname": "Proto.__init__", "kind": "function", "doc": "<p></p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">name</span><span class=\"p\">:</span> <span class=\"nb\">str</span>, </span><span class=\"param\"><span class=\"n\">trud_codes_path</span><span class=\"p\">:</span> <span class=\"n\">Optional</span><span class=\"p\">[</span><span class=\"n\">pathlib</span><span class=\"o\">.</span><span class=\"n\">Path</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"kc\">None</span></span>)</span>"}, "acmc.parse.Proto.checks": {"fullname": "acmc.parse.Proto.checks", "modulename": "acmc.parse", "qualname": "Proto.checks", "kind": "variable", "doc": "<p></p>\n", "annotation": ": list[tuple[str, typing.Callable[[pandas.core.frame.DataFrame], pandas.core.series.Series], typing.Callable[[pandas.core.frame.DataFrame, pathlib.Path], pandas.core.frame.DataFrame]]]"}, "acmc.parse.Proto.name": {"fullname": "acmc.parse.Proto.name", "modulename": "acmc.parse", "qualname": "Proto.name", "kind": "variable", "doc": "<p></p>\n", "annotation": ": str"}, "acmc.parse.Proto.raise_exception": {"fullname": "acmc.parse.Proto.raise_exception", "modulename": "acmc.parse", "qualname": "Proto.raise_exception", "kind": "function", "doc": "<p>Raises an exception inside a lambda function. Python does not allow using raise statement inside lambda because lambda can only contain expressions, not statements. Using raise_exception not raise_ as it's more explict</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"bp\">self</span>, </span><span class=\"param\"><span class=\"n\">ex</span><span class=\"p\">:</span> <span class=\"ne\">Exception</span></span><span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.parse.Proto.in_database": {"fullname": "acmc.parse.Proto.in_database", "modulename": "acmc.parse", "qualname": "Proto.in_database", "kind": "function", "doc": "<p></p>\n", "signature": "<span class=\"signature pdoc-code multiline\">(<span class=\"param\">\t<span class=\"bp\">self</span>,</span><span class=\"param\">\t<span class=\"n\">codes</span><span class=\"p\">:</span> <span class=\"n\">pandas</span><span class=\"o\">.</span><span class=\"n\">core</span><span class=\"o\">.</span><span class=\"n\">frame</span><span class=\"o\">.</span><span class=\"n\">DataFrame</span>,</span><span class=\"param\">\t<span class=\"n\">db</span><span class=\"p\">:</span> <span class=\"n\">pandas</span><span class=\"o\">.</span><span class=\"n\">core</span><span class=\"o\">.</span><span class=\"n\">frame</span><span class=\"o\">.</span><span class=\"n\">DataFrame</span>,</span><span class=\"param\">\t<span class=\"n\">col</span><span class=\"p\">:</span> <span class=\"nb\">str</span></span><span class=\"return-annotation\">) -> <span class=\"n\">pandas</span><span class=\"o\">.</span><span class=\"n\">core</span><span class=\"o\">.</span><span class=\"n\">frame</span><span class=\"o\">.</span><span class=\"n\">DataFrame</span>:</span></span>", "funcdef": "def"}, "acmc.parse.Proto.process": {"fullname": "acmc.parse.Proto.process", "modulename": "acmc.parse", "qualname": "Proto.process", "kind": "function", "doc": "<p>identify issues that do not pass and fix them with define/d process</p>\n", "signature": "<span class=\"signature pdoc-code multiline\">(<span class=\"param\">\t<span class=\"bp\">self</span>,</span><span class=\"param\">\t<span class=\"n\">codes</span><span class=\"p\">:</span> <span class=\"n\">pandas</span><span class=\"o\">.</span><span class=\"n\">core</span><span class=\"o\">.</span><span class=\"n\">frame</span><span class=\"o\">.</span><span class=\"n\">DataFrame</span>,</span><span class=\"param\">\t<span class=\"n\">codes_file</span><span class=\"p\">:</span> <span class=\"n\">pathlib</span><span class=\"o\">.</span><span class=\"n\">Path</span></span><span class=\"return-annotation\">) -> <span class=\"n\">Tuple</span><span class=\"p\">[</span><span class=\"n\">pandas</span><span class=\"o\">.</span><span class=\"n\">core</span><span class=\"o\">.</span><span class=\"n\">frame</span><span class=\"o\">.</span><span class=\"n\">DataFrame</span><span class=\"p\">,</span> <span class=\"nb\">list</span><span class=\"p\">]</span>:</span></span>", "funcdef": "def"}, "acmc.parse.Proto.verify": {"fullname": "acmc.parse.Proto.verify", "modulename": "acmc.parse", "qualname": "Proto.verify", "kind": "function", "doc": "<p>verify codes in codes file</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"bp\">self</span>, </span><span class=\"param\"><span class=\"n\">codes</span><span class=\"p\">:</span> <span class=\"n\">pandas</span><span class=\"o\">.</span><span class=\"n\">core</span><span class=\"o\">.</span><span class=\"n\">frame</span><span class=\"o\">.</span><span class=\"n\">DataFrame</span>, </span><span class=\"param\"><span class=\"n\">codes_file</span><span class=\"p\">:</span> <span class=\"n\">pathlib</span><span class=\"o\">.</span><span class=\"n\">Path</span></span><span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.parse.Read2": {"fullname": "acmc.parse.Read2", "modulename": "acmc.parse", "qualname": "Read2", "kind": "class", "doc": "<p>This Read2 class extends Proto, adding custom validation checks for a dataset of \"Read2\" codes. It ensures that the dataset is loaded, validates the codes based on several rules, and applies corrections or logs errors when necessary.</p>\n", "bases": "Proto"}, "acmc.parse.Read2.checks": {"fullname": "acmc.parse.Read2.checks", "modulename": "acmc.parse", "qualname": "Read2.checks", "kind": "variable", "doc": "<p></p>\n"}, "acmc.parse.Read3": {"fullname": "acmc.parse.Read3", "modulename": "acmc.parse", "qualname": "Read3", "kind": "class", "doc": "<p>Define checks as list of 3 tuple: (Message, Condition, Process)</p>\n\n<ul>\n<li>Message = The name of the condition (what is printed and logged)</li>\n<li>Condition = True if Passed, and False if Failed</li>\n<li>Process = Aims to resolve all issues that stop condition from passing (Do not change index!)</li>\n</ul>\n", "bases": "Proto"}, "acmc.parse.Read3.checks": {"fullname": "acmc.parse.Read3.checks", "modulename": "acmc.parse", "qualname": "Read3.checks", "kind": "variable", "doc": "<p></p>\n"}, "acmc.parse.Icd10": {"fullname": "acmc.parse.Icd10", "modulename": "acmc.parse", "qualname": "Icd10", "kind": "class", "doc": "<p>Define checks as list of 3 tuple: (Message, Condition, Process)</p>\n\n<ul>\n<li>Message = The name of the condition (what is printed and logged)</li>\n<li>Condition = True if Passed, and False if Failed</li>\n<li>Process = Aims to resolve all issues that stop condition from passing (Do not change index!)</li>\n</ul>\n", "bases": "Proto"}, "acmc.parse.Icd10.checks": {"fullname": "acmc.parse.Icd10.checks", "modulename": "acmc.parse", "qualname": "Icd10.checks", "kind": "variable", "doc": "<p></p>\n"}, "acmc.parse.Snomed": {"fullname": "acmc.parse.Snomed", "modulename": "acmc.parse", "qualname": "Snomed", "kind": "class", "doc": "<p>Define checks as list of 3 tuple: (Message, Condition, Process)</p>\n\n<ul>\n<li>Message = The name of the condition (what is printed and logged)</li>\n<li>Condition = True if Passed, and False if Failed</li>\n<li>Process = Aims to resolve all issues that stop condition from passing (Do not change index!)</li>\n</ul>\n", "bases": "Proto"}, "acmc.parse.Snomed.checks": {"fullname": "acmc.parse.Snomed.checks", "modulename": "acmc.parse", "qualname": "Snomed.checks", "kind": "variable", "doc": "<p></p>\n"}, "acmc.parse.Opcs4": {"fullname": "acmc.parse.Opcs4", "modulename": "acmc.parse", "qualname": "Opcs4", "kind": "class", "doc": "<p>Define checks as list of 3 tuple: (Message, Condition, Process)</p>\n\n<ul>\n<li>Message = The name of the condition (what is printed and logged)</li>\n<li>Condition = True if Passed, and False if Failed</li>\n<li>Process = Aims to resolve all issues that stop condition from passing (Do not change index!)</li>\n</ul>\n", "bases": "Proto"}, "acmc.parse.Opcs4.checks": {"fullname": "acmc.parse.Opcs4.checks", "modulename": "acmc.parse", "qualname": "Opcs4.checks", "kind": "variable", "doc": "<p></p>\n"}, "acmc.parse.Atc": {"fullname": "acmc.parse.Atc", "modulename": "acmc.parse", "qualname": "Atc", "kind": "class", "doc": "<p>Define checks as list of 3 tuple: (Message, Condition, Process)</p>\n\n<ul>\n<li>Message = The name of the condition (what is printed and logged)</li>\n<li>Condition = True if Passed, and False if Failed</li>\n<li>Process = Aims to resolve all issues that stop condition from passing (Do not change index!)</li>\n</ul>\n", "bases": "Proto"}, "acmc.parse.Atc.checks": {"fullname": "acmc.parse.Atc.checks", "modulename": "acmc.parse", "qualname": "Atc.checks", "kind": "variable", "doc": "<p></p>\n"}, "acmc.parse.Med": {"fullname": "acmc.parse.Med", "modulename": "acmc.parse", "qualname": "Med", "kind": "class", "doc": "<p>Define checks as list of 3 tuple: (Message, Condition, Process)</p>\n\n<ul>\n<li>Message = The name of the condition (what is printed and logged)</li>\n<li>Condition = True if Passed, and False if Failed</li>\n<li>Process = Aims to resolve all issues that stop condition from passing (Do not change index!)</li>\n</ul>\n", "bases": "Proto"}, "acmc.parse.Med.checks": {"fullname": "acmc.parse.Med.checks", "modulename": "acmc.parse", "qualname": "Med.checks", "kind": "variable", "doc": "<p></p>\n"}, "acmc.parse.Cprd": {"fullname": "acmc.parse.Cprd", "modulename": "acmc.parse", "qualname": "Cprd", "kind": "class", "doc": "<p>Define checks as list of 3 tuple: (Message, Condition, Process)</p>\n\n<ul>\n<li>Message = The name of the condition (what is printed and logged)</li>\n<li>Condition = True if Passed, and False if Failed</li>\n<li>Process = Aims to resolve all issues that stop condition from passing (Do not change index!)</li>\n</ul>\n", "bases": "Proto"}, "acmc.parse.Cprd.checks": {"fullname": "acmc.parse.Cprd.checks", "modulename": "acmc.parse", "qualname": "Cprd.checks", "kind": "variable", "doc": "<p></p>\n"}, "acmc.parse.CodeTypeParser": {"fullname": "acmc.parse.CodeTypeParser", "modulename": "acmc.parse", "qualname": "CodeTypeParser", "kind": "class", "doc": "<p>A class used in InvalidCodesException to report an error if a code parser check fails</p>\n"}, "acmc.parse.CodeTypeParser.__init__": {"fullname": "acmc.parse.CodeTypeParser.__init__", "modulename": "acmc.parse", "qualname": "CodeTypeParser.__init__", "kind": "function", "doc": "<p></p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">trud_processed_dir</span><span class=\"p\">:</span> <span class=\"n\">pathlib</span><span class=\"o\">.</span><span class=\"n\">Path</span> <span class=\"o\">=</span> <span class=\"n\">PosixPath</span><span class=\"p\">(</span><span class=\"s1\">&#39;vocab/trud/processed&#39;</span><span class=\"p\">)</span></span>)</span>"}, "acmc.parse.CodeTypeParser.code_types": {"fullname": "acmc.parse.CodeTypeParser.code_types", "modulename": "acmc.parse", "qualname": "CodeTypeParser.code_types", "kind": "variable", "doc": "<p></p>\n"}, "acmc.phen": {"fullname": "acmc.phen", "modulename": "acmc.phen", "kind": "module", "doc": "<h1 id=\"phenotype-module\">Phenotype Module</h1>\n\n<p>This module provides functionality for managing phenotypes.</p>\n"}, "acmc.phen.logger": {"fullname": "acmc.phen.logger", "modulename": "acmc.phen", "qualname": "logger", "kind": "variable", "doc": "<p></p>\n", "default_value": "&lt;Logger acmc_logger (INFO)&gt;"}, "acmc.phen.PHEN_DIR": {"fullname": "acmc.phen.PHEN_DIR", "modulename": "acmc.phen", "qualname": "PHEN_DIR", "kind": "variable", "doc": "<p></p>\n", "default_value": "&#x27;phen&#x27;"}, "acmc.phen.DEFAULT_PHEN_PATH": {"fullname": "acmc.phen.DEFAULT_PHEN_PATH", "modulename": "acmc.phen", "qualname": "DEFAULT_PHEN_PATH", "kind": "variable", "doc": "<p></p>\n", "default_value": "PosixPath(&#x27;workspace/phen&#x27;)"}, "acmc.phen.CONCEPTS_DIR": {"fullname": "acmc.phen.CONCEPTS_DIR", "modulename": "acmc.phen", "qualname": "CONCEPTS_DIR", "kind": "variable", "doc": "<p></p>\n", "default_value": "&#x27;concepts&#x27;"}, "acmc.phen.MAP_DIR": {"fullname": "acmc.phen.MAP_DIR", "modulename": "acmc.phen", "qualname": "MAP_DIR", "kind": "variable", "doc": "<p></p>\n", "default_value": "&#x27;map&#x27;"}, "acmc.phen.CONCEPT_SET_DIR": {"fullname": "acmc.phen.CONCEPT_SET_DIR", "modulename": "acmc.phen", "qualname": "CONCEPT_SET_DIR", "kind": "variable", "doc": "<p></p>\n", "default_value": "&#x27;concept-sets&#x27;"}, "acmc.phen.CSV_PATH": {"fullname": "acmc.phen.CSV_PATH", "modulename": "acmc.phen", "qualname": "CSV_PATH", "kind": "variable", "doc": "<p></p>\n", "default_value": "PosixPath(&#x27;concept-sets/csv&#x27;)"}, "acmc.phen.OMOP_PATH": {"fullname": "acmc.phen.OMOP_PATH", "modulename": "acmc.phen", "qualname": "OMOP_PATH", "kind": "variable", "doc": "<p></p>\n", "default_value": "PosixPath(&#x27;concept-sets/omop&#x27;)"}, "acmc.phen.DEFAULT_PHEN_DIR_LIST": {"fullname": "acmc.phen.DEFAULT_PHEN_DIR_LIST", "modulename": "acmc.phen", "qualname": "DEFAULT_PHEN_DIR_LIST", "kind": "variable", "doc": "<p></p>\n", "default_value": "[&#x27;concepts&#x27;, &#x27;map&#x27;, &#x27;concept-sets&#x27;]"}, "acmc.phen.CONFIG_FILE": {"fullname": "acmc.phen.CONFIG_FILE", "modulename": "acmc.phen", "qualname": "CONFIG_FILE", "kind": "variable", "doc": "<p></p>\n", "default_value": "&#x27;config.yml&#x27;"}, "acmc.phen.VOCAB_VERSION_FILE": {"fullname": "acmc.phen.VOCAB_VERSION_FILE", "modulename": "acmc.phen", "qualname": "VOCAB_VERSION_FILE", "kind": "variable", "doc": "<p></p>\n", "default_value": "&#x27;vocab_version.yml&#x27;"}, "acmc.phen.SEMANTIC_VERSION_TYPES": {"fullname": "acmc.phen.SEMANTIC_VERSION_TYPES", "modulename": "acmc.phen", "qualname": "SEMANTIC_VERSION_TYPES", "kind": "variable", "doc": "<p></p>\n", "default_value": "[&#x27;major&#x27;, &#x27;minor&#x27;, &#x27;patch&#x27;]"}, "acmc.phen.DEFAULT_VERSION_INC": {"fullname": "acmc.phen.DEFAULT_VERSION_INC", "modulename": "acmc.phen", "qualname": "DEFAULT_VERSION_INC", "kind": "variable", "doc": "<p></p>\n", "default_value": "&#x27;patch&#x27;"}, "acmc.phen.DEFAULT_GIT_BRANCH": {"fullname": "acmc.phen.DEFAULT_GIT_BRANCH", "modulename": "acmc.phen", "qualname": "DEFAULT_GIT_BRANCH", "kind": "variable", "doc": "<p></p>\n", "default_value": "&#x27;main&#x27;"}, "acmc.phen.SPLIT_COL_ACTION": {"fullname": "acmc.phen.SPLIT_COL_ACTION", "modulename": "acmc.phen", "qualname": "SPLIT_COL_ACTION", "kind": "variable", "doc": "<p></p>\n", "default_value": "&#x27;split_col&#x27;"}, "acmc.phen.CODES_COL_ACTION": {"fullname": "acmc.phen.CODES_COL_ACTION", "modulename": "acmc.phen", "qualname": "CODES_COL_ACTION", "kind": "variable", "doc": "<p></p>\n", "default_value": "&#x27;codes_col&#x27;"}, "acmc.phen.DIVIDE_COL_ACTION": {"fullname": "acmc.phen.DIVIDE_COL_ACTION", "modulename": "acmc.phen", "qualname": "DIVIDE_COL_ACTION", "kind": "variable", "doc": "<p></p>\n", "default_value": "&#x27;divide_col&#x27;"}, "acmc.phen.COL_ACTIONS": {"fullname": "acmc.phen.COL_ACTIONS", "modulename": "acmc.phen", "qualname": "COL_ACTIONS", "kind": "variable", "doc": "<p></p>\n", "default_value": "[&#x27;split_col&#x27;, &#x27;codes_col&#x27;, &#x27;divide_col&#x27;]"}, "acmc.phen.CODE_FILE_TYPES": {"fullname": "acmc.phen.CODE_FILE_TYPES", "modulename": "acmc.phen", "qualname": "CODE_FILE_TYPES", "kind": "variable", "doc": "<p></p>\n", "default_value": "[&#x27;.xlsx&#x27;, &#x27;.xls&#x27;, &#x27;.csv&#x27;]"}, "acmc.phen.SOURCE_COL_SUFFIX": {"fullname": "acmc.phen.SOURCE_COL_SUFFIX", "modulename": "acmc.phen", "qualname": "SOURCE_COL_SUFFIX", "kind": "variable", "doc": "<p></p>\n", "default_value": "&#x27;_acmc_source&#x27;"}, "acmc.phen.TARGET_COL_SUFFIX": {"fullname": "acmc.phen.TARGET_COL_SUFFIX", "modulename": "acmc.phen", "qualname": "TARGET_COL_SUFFIX", "kind": "variable", "doc": "<p></p>\n", "default_value": "&#x27;_acmc_target&#x27;"}, "acmc.phen.CONFIG_SCHEMA": {"fullname": "acmc.phen.CONFIG_SCHEMA", "modulename": "acmc.phen", "qualname": "CONFIG_SCHEMA", "kind": "variable", "doc": "<p></p>\n", "default_value": "{&#x27;phenotype&#x27;: {&#x27;type&#x27;: &#x27;dict&#x27;, &#x27;required&#x27;: True, &#x27;schema&#x27;: {&#x27;version&#x27;: {&#x27;type&#x27;: &#x27;string&#x27;, &#x27;required&#x27;: True, &#x27;regex&#x27;: &#x27;^\\\\d+\\\\.\\\\d+\\\\.\\\\d+$&#x27;}, &#x27;omop&#x27;: {&#x27;type&#x27;: &#x27;dict&#x27;, &#x27;required&#x27;: True, &#x27;schema&#x27;: {&#x27;vocabulary_id&#x27;: {&#x27;type&#x27;: &#x27;string&#x27;, &#x27;required&#x27;: True}, &#x27;vocabulary_name&#x27;: {&#x27;type&#x27;: &#x27;string&#x27;, &#x27;required&#x27;: True}, &#x27;vocabulary_reference&#x27;: {&#x27;type&#x27;: &#x27;string&#x27;, &#x27;required&#x27;: True, &#x27;regex&#x27;: &#x27;^https?://.*&#x27;}}}, &#x27;map&#x27;: {&#x27;type&#x27;: &#x27;list&#x27;, &#x27;schema&#x27;: {&#x27;type&#x27;: &#x27;string&#x27;, &#x27;allowed&#x27;: [&#x27;read2&#x27;, &#x27;icd10&#x27;, &#x27;atc&#x27;, &#x27;read3&#x27;, &#x27;snomed&#x27;, &#x27;opcs4&#x27;]}}, &#x27;concept_sets&#x27;: {&#x27;type&#x27;: &#x27;list&#x27;, &#x27;required&#x27;: True, &#x27;schema&#x27;: {&#x27;type&#x27;: &#x27;dict&#x27;, &#x27;schema&#x27;: {&#x27;name&#x27;: {&#x27;type&#x27;: &#x27;string&#x27;, &#x27;required&#x27;: True}, &#x27;file&#x27;: {&#x27;type&#x27;: &#x27;dict&#x27;, &#x27;required&#x27;: False, &#x27;schema&#x27;: {&#x27;path&#x27;: {&#x27;type&#x27;: &#x27;string&#x27;, &#x27;required&#x27;: True}, &#x27;columns&#x27;: {&#x27;type&#x27;: &#x27;dict&#x27;, &#x27;required&#x27;: True}, &#x27;category&#x27;: {&#x27;type&#x27;: &#x27;string&#x27;}, &#x27;actions&#x27;: {&#x27;type&#x27;: &#x27;dict&#x27;, &#x27;schema&#x27;: {&#x27;divide_col&#x27;: {&#x27;type&#x27;: &#x27;string&#x27;}}}}}, &#x27;metadata&#x27;: {&#x27;type&#x27;: &#x27;dict&#x27;, &#x27;required&#x27;: True}}}}}}}"}, "acmc.phen.PhenValidationException": {"fullname": "acmc.phen.PhenValidationException", "modulename": "acmc.phen", "qualname": "PhenValidationException", "kind": "class", "doc": "<p>Custom exception class raised when validation errors in phenotype configuration file</p>\n", "bases": "builtins.Exception"}, "acmc.phen.PhenValidationException.__init__": {"fullname": "acmc.phen.PhenValidationException.__init__", "modulename": "acmc.phen", "qualname": "PhenValidationException.__init__", "kind": "function", "doc": "<p></p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">message</span>, </span><span class=\"param\"><span class=\"n\">validation_errors</span><span class=\"o\">=</span><span class=\"kc\">None</span></span>)</span>"}, "acmc.phen.PhenValidationException.validation_errors": {"fullname": "acmc.phen.PhenValidationException.validation_errors", "modulename": "acmc.phen", "qualname": "PhenValidationException.validation_errors", "kind": "variable", "doc": "<p></p>\n"}, "acmc.phen.construct_git_url": {"fullname": "acmc.phen.construct_git_url", "modulename": "acmc.phen", "qualname": "construct_git_url", "kind": "function", "doc": "<p>Constructs a git url for github or gitlab including a PAT token environment variable</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">remote_url</span><span class=\"p\">:</span> <span class=\"nb\">str</span></span><span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.phen.create_empty_git_dir": {"fullname": "acmc.phen.create_empty_git_dir", "modulename": "acmc.phen", "qualname": "create_empty_git_dir", "kind": "function", "doc": "<p>Creates a directory with a .gitkeep file so that it's tracked in git</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">path</span><span class=\"p\">:</span> <span class=\"n\">pathlib</span><span class=\"o\">.</span><span class=\"n\">Path</span></span><span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.phen.check_delete_dir": {"fullname": "acmc.phen.check_delete_dir", "modulename": "acmc.phen", "qualname": "check_delete_dir", "kind": "function", "doc": "<p>Checks on the command line if a user wants to delete a directory</p>\n\n<h6 id=\"arguments\">Arguments:</h6>\n\n<ul>\n<li><strong>path (Path):</strong>  path of the directory to be deleted</li>\n<li><strong>msg (str):</strong>  message to be displayed to the user</li>\n</ul>\n\n<h6 id=\"returns\">Returns:</h6>\n\n<blockquote>\n  <p>Boolean: True if deleted</p>\n</blockquote>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">path</span><span class=\"p\">:</span> <span class=\"n\">pathlib</span><span class=\"o\">.</span><span class=\"n\">Path</span>, </span><span class=\"param\"><span class=\"n\">msg</span><span class=\"p\">:</span> <span class=\"nb\">str</span></span><span class=\"return-annotation\">) -> <span class=\"nb\">bool</span>:</span></span>", "funcdef": "def"}, "acmc.phen.fork": {"fullname": "acmc.phen.fork", "modulename": "acmc.phen", "qualname": "fork", "kind": "function", "doc": "<p>Forks an upstream phenotype in a remote repo at a specific version to a local director, and optionally sets to a new remote origin\"</p>\n\n<h6 id=\"arguments\">Arguments:</h6>\n\n<ul>\n<li><strong>phen_dir (str):</strong>  local directory path where the upstream repo is to be cloned</li>\n<li><strong>upstream_url (str):</strong>  url to the upstream repo</li>\n<li><strong>upstream_version (str):</strong>  version in the upstream repo to clone</li>\n<li><strong>new_origin_url (str, optional):</strong>  url of the remote repo to set as the new origin. Defaults to None.</li>\n</ul>\n\n<h6 id=\"raises\">Raises:</h6>\n\n<ul>\n<li><strong>ValueError:</strong>  if the specified version is not in the upstream repo</li>\n<li><strong>ValueError:</strong>  if the upstream repo is not a valid phenotype repo</li>\n<li><strong>ValueError:</strong>  if there's any other problems with Git</li>\n</ul>\n", "signature": "<span class=\"signature pdoc-code multiline\">(<span class=\"param\">\t<span class=\"n\">phen_dir</span><span class=\"p\">:</span> <span class=\"nb\">str</span>,</span><span class=\"param\">\t<span class=\"n\">upstream_url</span><span class=\"p\">:</span> <span class=\"nb\">str</span>,</span><span class=\"param\">\t<span class=\"n\">upstream_version</span><span class=\"p\">:</span> <span class=\"nb\">str</span>,</span><span class=\"param\">\t<span class=\"n\">new_origin_url</span><span class=\"p\">:</span> <span class=\"nb\">str</span></span><span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.phen.init": {"fullname": "acmc.phen.init", "modulename": "acmc.phen", "qualname": "init", "kind": "function", "doc": "<p>Initial phenotype directory as git repo with standard structure</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">phen_dir</span><span class=\"p\">:</span> <span class=\"nb\">str</span>, </span><span class=\"param\"><span class=\"n\">remote_url</span><span class=\"p\">:</span> <span class=\"nb\">str</span></span><span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.phen.validate": {"fullname": "acmc.phen.validate", "modulename": "acmc.phen", "qualname": "validate", "kind": "function", "doc": "<p>Validates the phenotype directory is a git repo with standard structure</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">phen_dir</span><span class=\"p\">:</span> <span class=\"nb\">str</span></span><span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.phen.read_table_file": {"fullname": "acmc.phen.read_table_file", "modulename": "acmc.phen", "qualname": "read_table_file", "kind": "function", "doc": "<p>Load Code List File</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">path</span><span class=\"p\">:</span> <span class=\"n\">pathlib</span><span class=\"o\">.</span><span class=\"n\">Path</span>, </span><span class=\"param\"><span class=\"n\">excel_sheet</span><span class=\"p\">:</span> <span class=\"nb\">str</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;&#39;</span></span><span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.phen.process_actions": {"fullname": "acmc.phen.process_actions", "modulename": "acmc.phen", "qualname": "process_actions", "kind": "function", "doc": "<p></p>\n", "signature": "<span class=\"signature pdoc-code multiline\">(<span class=\"param\">\t<span class=\"n\">df</span><span class=\"p\">:</span> <span class=\"n\">pandas</span><span class=\"o\">.</span><span class=\"n\">core</span><span class=\"o\">.</span><span class=\"n\">frame</span><span class=\"o\">.</span><span class=\"n\">DataFrame</span>,</span><span class=\"param\">\t<span class=\"n\">concept_set</span><span class=\"p\">:</span> <span class=\"nb\">dict</span></span><span class=\"return-annotation\">) -> <span class=\"n\">pandas</span><span class=\"o\">.</span><span class=\"n\">core</span><span class=\"o\">.</span><span class=\"n\">frame</span><span class=\"o\">.</span><span class=\"n\">DataFrame</span>:</span></span>", "funcdef": "def"}, "acmc.phen.preprocess_source_concepts": {"fullname": "acmc.phen.preprocess_source_concepts", "modulename": "acmc.phen", "qualname": "preprocess_source_concepts", "kind": "function", "doc": "<p>Parses each column individually - Order and length will not be preserved!</p>\n", "signature": "<span class=\"signature pdoc-code multiline\">(<span class=\"param\">\t<span class=\"n\">df</span><span class=\"p\">:</span> <span class=\"n\">pandas</span><span class=\"o\">.</span><span class=\"n\">core</span><span class=\"o\">.</span><span class=\"n\">frame</span><span class=\"o\">.</span><span class=\"n\">DataFrame</span>,</span><span class=\"param\">\t<span class=\"n\">concept_set</span><span class=\"p\">:</span> <span class=\"nb\">dict</span>,</span><span class=\"param\">\t<span class=\"n\">code_file_path</span><span class=\"p\">:</span> <span class=\"n\">pathlib</span><span class=\"o\">.</span><span class=\"n\">Path</span></span><span class=\"return-annotation\">) -> <span class=\"n\">Tuple</span><span class=\"p\">[</span><span class=\"n\">pandas</span><span class=\"o\">.</span><span class=\"n\">core</span><span class=\"o\">.</span><span class=\"n\">frame</span><span class=\"o\">.</span><span class=\"n\">DataFrame</span><span class=\"p\">,</span> <span class=\"nb\">list</span><span class=\"p\">]</span>:</span></span>", "funcdef": "def"}, "acmc.phen.get_code_type_from_col_name": {"fullname": "acmc.phen.get_code_type_from_col_name", "modulename": "acmc.phen", "qualname": "get_code_type_from_col_name", "kind": "function", "doc": "<p></p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">col_name</span><span class=\"p\">:</span> <span class=\"nb\">str</span></span><span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.phen.translate_codes": {"fullname": "acmc.phen.translate_codes", "modulename": "acmc.phen", "qualname": "translate_codes", "kind": "function", "doc": "<p>Translates each source code type the source coding list into a target type and returns all conversions as a concept set</p>\n", "signature": "<span class=\"signature pdoc-code multiline\">(<span class=\"param\">\t<span class=\"n\">source_df</span><span class=\"p\">:</span> <span class=\"n\">pandas</span><span class=\"o\">.</span><span class=\"n\">core</span><span class=\"o\">.</span><span class=\"n\">frame</span><span class=\"o\">.</span><span class=\"n\">DataFrame</span>,</span><span class=\"param\">\t<span class=\"n\">target_code_type</span><span class=\"p\">:</span> <span class=\"nb\">str</span>,</span><span class=\"param\">\t<span class=\"n\">concept_name</span><span class=\"p\">:</span> <span class=\"nb\">str</span></span><span class=\"return-annotation\">) -> <span class=\"n\">pandas</span><span class=\"o\">.</span><span class=\"n\">core</span><span class=\"o\">.</span><span class=\"n\">frame</span><span class=\"o\">.</span><span class=\"n\">DataFrame</span>:</span></span>", "funcdef": "def"}, "acmc.phen.sql_row_exist": {"fullname": "acmc.phen.sql_row_exist", "modulename": "acmc.phen", "qualname": "sql_row_exist", "kind": "function", "doc": "<p></p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">conn</span><span class=\"p\">:</span> <span class=\"n\">sqlite3</span><span class=\"o\">.</span><span class=\"n\">Connection</span>, </span><span class=\"param\"><span class=\"n\">table</span><span class=\"p\">:</span> <span class=\"nb\">str</span>, </span><span class=\"param\"><span class=\"n\">column</span><span class=\"p\">:</span> <span class=\"nb\">str</span>, </span><span class=\"param\"><span class=\"n\">value</span><span class=\"p\">:</span> <span class=\"nb\">str</span></span><span class=\"return-annotation\">) -> <span class=\"nb\">bool</span>:</span></span>", "funcdef": "def"}, "acmc.phen.write_code_errors": {"fullname": "acmc.phen.write_code_errors", "modulename": "acmc.phen", "qualname": "write_code_errors", "kind": "function", "doc": "<p></p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">code_errors</span><span class=\"p\">:</span> <span class=\"nb\">list</span>, </span><span class=\"param\"><span class=\"n\">code_errors_path</span><span class=\"p\">:</span> <span class=\"n\">pathlib</span><span class=\"o\">.</span><span class=\"n\">Path</span></span><span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.phen.write_vocab_version": {"fullname": "acmc.phen.write_vocab_version", "modulename": "acmc.phen", "qualname": "write_vocab_version", "kind": "function", "doc": "<p></p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">phen_path</span><span class=\"p\">:</span> <span class=\"n\">pathlib</span><span class=\"o\">.</span><span class=\"n\">Path</span></span><span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.phen.map": {"fullname": "acmc.phen.map", "modulename": "acmc.phen", "qualname": "map", "kind": "function", "doc": "<p></p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">phen_dir</span><span class=\"p\">:</span> <span class=\"nb\">str</span>, </span><span class=\"param\"><span class=\"n\">target_code_type</span><span class=\"p\">:</span> <span class=\"nb\">str</span></span><span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.phen.map_target_code_type": {"fullname": "acmc.phen.map_target_code_type", "modulename": "acmc.phen", "qualname": "map_target_code_type", "kind": "function", "doc": "<p></p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">phen_path</span><span class=\"p\">:</span> <span class=\"n\">pathlib</span><span class=\"o\">.</span><span class=\"n\">Path</span>, </span><span class=\"param\"><span class=\"n\">phenotype</span><span class=\"p\">:</span> <span class=\"nb\">dict</span>, </span><span class=\"param\"><span class=\"n\">target_code_type</span><span class=\"p\">:</span> <span class=\"nb\">str</span></span><span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.phen.generate_version_tag": {"fullname": "acmc.phen.generate_version_tag", "modulename": "acmc.phen", "qualname": "generate_version_tag", "kind": "function", "doc": "<p></p>\n", "signature": "<span class=\"signature pdoc-code multiline\">(<span class=\"param\">\t<span class=\"n\">repo</span><span class=\"p\">:</span> <span class=\"n\">git</span><span class=\"o\">.</span><span class=\"n\">repo</span><span class=\"o\">.</span><span class=\"n\">base</span><span class=\"o\">.</span><span class=\"n\">Repo</span>,</span><span class=\"param\">\t<span class=\"n\">increment</span><span class=\"p\">:</span> <span class=\"nb\">str</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;patch&#39;</span>,</span><span class=\"param\">\t<span class=\"n\">use_v_prefix</span><span class=\"p\">:</span> <span class=\"nb\">bool</span> <span class=\"o\">=</span> <span class=\"kc\">False</span></span><span class=\"return-annotation\">) -> <span class=\"nb\">str</span>:</span></span>", "funcdef": "def"}, "acmc.phen.publish": {"fullname": "acmc.phen.publish", "modulename": "acmc.phen", "qualname": "publish", "kind": "function", "doc": "<p>Publishes updates to the phenotype by commiting all changes to the repo directory</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">phen_dir</span><span class=\"p\">:</span> <span class=\"nb\">str</span>, </span><span class=\"param\"><span class=\"n\">msg</span><span class=\"p\">:</span> <span class=\"nb\">str</span>, </span><span class=\"param\"><span class=\"n\">remote_url</span><span class=\"p\">:</span> <span class=\"nb\">str</span>, </span><span class=\"param\"><span class=\"n\">increment</span><span class=\"p\">:</span> <span class=\"nb\">str</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;patch&#39;</span></span><span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.phen.export": {"fullname": "acmc.phen.export", "modulename": "acmc.phen", "qualname": "export", "kind": "function", "doc": "<p>Exports a phen repo at a specific tagged version into a target directory</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">phen_dir</span><span class=\"p\">:</span> <span class=\"nb\">str</span>, </span><span class=\"param\"><span class=\"n\">version</span><span class=\"p\">:</span> <span class=\"nb\">str</span></span><span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.phen.copy": {"fullname": "acmc.phen.copy", "modulename": "acmc.phen", "qualname": "copy", "kind": "function", "doc": "<p>Copys a phen repo at a specific tagged version into a target directory</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">phen_dir</span><span class=\"p\">:</span> <span class=\"nb\">str</span>, </span><span class=\"param\"><span class=\"n\">target_dir</span><span class=\"p\">:</span> <span class=\"nb\">str</span>, </span><span class=\"param\"><span class=\"n\">version</span><span class=\"p\">:</span> <span class=\"nb\">str</span></span><span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.phen.extract_concepts": {"fullname": "acmc.phen.extract_concepts", "modulename": "acmc.phen", "qualname": "extract_concepts", "kind": "function", "doc": "<p>Extracts concepts as {name: file_path} dictionary and a name set.</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">config_data</span><span class=\"p\">:</span> <span class=\"nb\">dict</span></span><span class=\"return-annotation\">) -> <span class=\"n\">Tuple</span><span class=\"p\">[</span><span class=\"nb\">dict</span><span class=\"p\">,</span> <span class=\"n\">Set</span><span class=\"p\">[</span><span class=\"nb\">str</span><span class=\"p\">]]</span>:</span></span>", "funcdef": "def"}, "acmc.phen.extract_clean_deepdiff_keys": {"fullname": "acmc.phen.extract_clean_deepdiff_keys", "modulename": "acmc.phen", "qualname": "extract_clean_deepdiff_keys", "kind": "function", "doc": "<p>Extracts clean keys from a DeepDiff dictionary.</p>\n\n<h6 id=\"parameters\">Parameters</h6>\n\n<ul>\n<li><strong>diff</strong>:  DeepDiff result dictionary</li>\n<li><strong>key_type</strong>:  The type of change to extract (e.g., \"dictionary_item_added\", \"dictionary_item_removed\")</li>\n</ul>\n\n<h6 id=\"returns\">Returns</h6>\n\n<blockquote>\n  <p>A set of clean key names</p>\n</blockquote>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">diff</span><span class=\"p\">:</span> <span class=\"nb\">dict</span>, </span><span class=\"param\"><span class=\"n\">key_type</span><span class=\"p\">:</span> <span class=\"nb\">str</span></span><span class=\"return-annotation\">) -> <span class=\"n\">Set</span><span class=\"p\">[</span><span class=\"n\">Any</span><span class=\"p\">]</span>:</span></span>", "funcdef": "def"}, "acmc.phen.diff_config": {"fullname": "acmc.phen.diff_config", "modulename": "acmc.phen", "qualname": "diff_config", "kind": "function", "doc": "<p></p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">old_config</span><span class=\"p\">:</span> <span class=\"nb\">dict</span>, </span><span class=\"param\"><span class=\"n\">new_config</span><span class=\"p\">:</span> <span class=\"nb\">dict</span></span><span class=\"return-annotation\">) -> <span class=\"nb\">str</span>:</span></span>", "funcdef": "def"}, "acmc.phen.diff_map_files": {"fullname": "acmc.phen.diff_map_files", "modulename": "acmc.phen", "qualname": "diff_map_files", "kind": "function", "doc": "<p></p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">old_map_path</span><span class=\"p\">:</span> <span class=\"n\">pathlib</span><span class=\"o\">.</span><span class=\"n\">Path</span>, </span><span class=\"param\"><span class=\"n\">new_map_path</span><span class=\"p\">:</span> <span class=\"n\">pathlib</span><span class=\"o\">.</span><span class=\"n\">Path</span></span><span class=\"return-annotation\">) -> <span class=\"nb\">str</span>:</span></span>", "funcdef": "def"}, "acmc.phen.diff_phen": {"fullname": "acmc.phen.diff_phen", "modulename": "acmc.phen", "qualname": "diff_phen", "kind": "function", "doc": "<p>Compare the differences between two versions of a phenotype</p>\n", "signature": "<span class=\"signature pdoc-code multiline\">(<span class=\"param\">\t<span class=\"n\">new_phen_path</span><span class=\"p\">:</span> <span class=\"n\">pathlib</span><span class=\"o\">.</span><span class=\"n\">Path</span>,</span><span class=\"param\">\t<span class=\"n\">new_version</span><span class=\"p\">:</span> <span class=\"nb\">str</span>,</span><span class=\"param\">\t<span class=\"n\">old_phen_path</span><span class=\"p\">:</span> <span class=\"n\">pathlib</span><span class=\"o\">.</span><span class=\"n\">Path</span>,</span><span class=\"param\">\t<span class=\"n\">old_version</span><span class=\"p\">:</span> <span class=\"nb\">str</span>,</span><span class=\"param\">\t<span class=\"n\">report_path</span><span class=\"p\">:</span> <span class=\"n\">pathlib</span><span class=\"o\">.</span><span class=\"n\">Path</span></span><span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.phen.diff": {"fullname": "acmc.phen.diff", "modulename": "acmc.phen", "qualname": "diff", "kind": "function", "doc": "<p></p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">phen_dir</span><span class=\"p\">:</span> <span class=\"nb\">str</span>, </span><span class=\"param\"><span class=\"n\">version</span><span class=\"p\">:</span> <span class=\"nb\">str</span>, </span><span class=\"param\"><span class=\"n\">old_phen_dir</span><span class=\"p\">:</span> <span class=\"nb\">str</span>, </span><span class=\"param\"><span class=\"n\">old_version</span><span class=\"p\">:</span> <span class=\"nb\">str</span></span><span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.trud": {"fullname": "acmc.trud", "modulename": "acmc.trud", "kind": "module", "doc": "<p></p>\n"}, "acmc.trud.logger": {"fullname": "acmc.trud.logger", "modulename": "acmc.trud", "qualname": "logger", "kind": "variable", "doc": "<p></p>\n", "default_value": "&lt;Logger acmc_logger (INFO)&gt;"}, "acmc.trud.FQDN": {"fullname": "acmc.trud.FQDN", "modulename": "acmc.trud", "qualname": "FQDN", "kind": "variable", "doc": "<p></p>\n", "default_value": "&#x27;isd.digital.nhs.uk&#x27;"}, "acmc.trud.VOCAB_PATH": {"fullname": "acmc.trud.VOCAB_PATH", "modulename": "acmc.trud", "qualname": "VOCAB_PATH", "kind": "variable", "doc": "<p></p>\n", "default_value": "PosixPath(&#x27;vocab/trud&#x27;)"}, "acmc.trud.VERSION_FILE": {"fullname": "acmc.trud.VERSION_FILE", "modulename": "acmc.trud", "qualname": "VERSION_FILE", "kind": "variable", "doc": "<p></p>\n", "default_value": "&#x27;trud_version.yml&#x27;"}, "acmc.trud.VERSION_PATH": {"fullname": "acmc.trud.VERSION_PATH", "modulename": "acmc.trud", "qualname": "VERSION_PATH", "kind": "variable", "doc": "<p></p>\n", "default_value": "PosixPath(&#x27;vocab/trud/trud_version.yml&#x27;)"}, "acmc.trud.DOWNLOADS_PATH": {"fullname": "acmc.trud.DOWNLOADS_PATH", "modulename": "acmc.trud", "qualname": "DOWNLOADS_PATH", "kind": "variable", "doc": "<p></p>\n", "default_value": "PosixPath(&#x27;vocab/trud/downloads&#x27;)"}, "acmc.trud.PROCESSED_PATH": {"fullname": "acmc.trud.PROCESSED_PATH", "modulename": "acmc.trud", "qualname": "PROCESSED_PATH", "kind": "variable", "doc": "<p></p>\n", "default_value": "PosixPath(&#x27;vocab/trud/processed&#x27;)"}, "acmc.trud.get_releases": {"fullname": "acmc.trud.get_releases", "modulename": "acmc.trud", "qualname": "get_releases", "kind": "function", "doc": "<p>Retrieve release information for an item from the TRUD API.</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">item_id</span><span class=\"p\">:</span> <span class=\"nb\">str</span>, </span><span class=\"param\"><span class=\"n\">API_KEY</span><span class=\"p\">:</span> <span class=\"nb\">str</span>, </span><span class=\"param\"><span class=\"n\">latest</span><span class=\"o\">=</span><span class=\"kc\">False</span></span><span class=\"return-annotation\">) -> <span class=\"nb\">list</span>:</span></span>", "funcdef": "def"}, "acmc.trud.download_release_file": {"fullname": "acmc.trud.download_release_file", "modulename": "acmc.trud", "qualname": "download_release_file", "kind": "function", "doc": "<p>Download specified file type for a given release of an item.</p>\n", "signature": "<span class=\"signature pdoc-code multiline\">(<span class=\"param\">\t<span class=\"n\">item_id</span><span class=\"p\">:</span> <span class=\"nb\">str</span>,</span><span class=\"param\">\t<span class=\"n\">release_ordinal</span><span class=\"p\">:</span> <span class=\"nb\">str</span>,</span><span class=\"param\">\t<span class=\"n\">release</span><span class=\"p\">:</span> <span class=\"nb\">dict</span>,</span><span class=\"param\">\t<span class=\"n\">file_json_prefix</span><span class=\"p\">:</span> <span class=\"nb\">str</span></span><span class=\"return-annotation\">) -> <span class=\"n\">pathlib</span><span class=\"o\">.</span><span class=\"n\">Path</span>:</span></span>", "funcdef": "def"}, "acmc.trud.validate_download_hash": {"fullname": "acmc.trud.validate_download_hash", "modulename": "acmc.trud", "qualname": "validate_download_hash", "kind": "function", "doc": "<p></p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">file_destination</span><span class=\"p\">:</span> <span class=\"nb\">str</span>, </span><span class=\"param\"><span class=\"n\">item_hash</span><span class=\"p\">:</span> <span class=\"nb\">str</span></span><span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.trud.unzip_download": {"fullname": "acmc.trud.unzip_download", "modulename": "acmc.trud", "qualname": "unzip_download", "kind": "function", "doc": "<p></p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">file_destination</span><span class=\"p\">:</span> <span class=\"nb\">str</span></span><span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.trud.extract_icd10": {"fullname": "acmc.trud.extract_icd10", "modulename": "acmc.trud", "qualname": "extract_icd10", "kind": "function", "doc": "<p></p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.trud.extract_opsc4": {"fullname": "acmc.trud.extract_opsc4", "modulename": "acmc.trud", "qualname": "extract_opsc4", "kind": "function", "doc": "<p></p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.trud.extract_nhs_data_migrations": {"fullname": "acmc.trud.extract_nhs_data_migrations", "modulename": "acmc.trud", "qualname": "extract_nhs_data_migrations", "kind": "function", "doc": "<p></p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.trud.extract_nhs_read_browser": {"fullname": "acmc.trud.extract_nhs_read_browser", "modulename": "acmc.trud", "qualname": "extract_nhs_read_browser", "kind": "function", "doc": "<p></p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.trud.create_map_directories": {"fullname": "acmc.trud.create_map_directories", "modulename": "acmc.trud", "qualname": "create_map_directories", "kind": "function", "doc": "<p>Create map directories.</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.trud.install": {"fullname": "acmc.trud.install", "modulename": "acmc.trud", "qualname": "install", "kind": "function", "doc": "<p></p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.util": {"fullname": "acmc.util", "modulename": "acmc.util", "kind": "module", "doc": "<p></p>\n"}, "acmc.util.QuotedDumper": {"fullname": "acmc.util.QuotedDumper", "modulename": "acmc.util", "qualname": "QuotedDumper", "kind": "class", "doc": "<p></p>\n", "bases": "yaml.dumper.Dumper"}, "acmc.util.QuotedDumper.increase_indent": {"fullname": "acmc.util.QuotedDumper.increase_indent", "modulename": "acmc.util", "qualname": "QuotedDumper.increase_indent", "kind": "function", "doc": "<p></p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"bp\">self</span>, </span><span class=\"param\"><span class=\"n\">flow</span><span class=\"o\">=</span><span class=\"kc\">False</span>, </span><span class=\"param\"><span class=\"n\">indentless</span><span class=\"o\">=</span><span class=\"kc\">False</span></span><span class=\"return-annotation\">):</span></span>", "funcdef": "def"}}, "docInfo": {"acmc": {"qualname": 0, "fullname": 1, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "acmc.logging_config": {"qualname": 0, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 39}, "acmc.logging_config.DEFAULT_LOG_FILE": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 6, "signature": 0, "bases": 0, "doc": 3}, "acmc.logging_config.setup_logger": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 24, "bases": 0, "doc": 16}, "acmc.logging_config.set_log_level": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 17, "bases": 0, "doc": 11}, "acmc.main": {"qualname": 0, "fullname": 2, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "acmc.main.logger": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 8, "signature": 0, "bases": 0, "doc": 3}, "acmc.main.DEFAULT_WORKSPACE_PATH": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 5, "signature": 0, "bases": 0, "doc": 3}, "acmc.main.trud_install": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 21, "bases": 0, "doc": 10}, "acmc.main.omop_install": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 21, "bases": 0, "doc": 10}, "acmc.main.omop_clear": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 21, "bases": 0, "doc": 10}, "acmc.main.omop_delete": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 21, "bases": 0, "doc": 10}, "acmc.main.phen_init": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 21, "bases": 0, "doc": 10}, "acmc.main.phen_fork": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 21, "bases": 0, "doc": 10}, "acmc.main.phen_validate": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 21, "bases": 0, "doc": 10}, "acmc.main.phen_map": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 21, "bases": 0, "doc": 10}, "acmc.main.phen_export": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 21, "bases": 0, "doc": 10}, "acmc.main.phen_publish": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 21, "bases": 0, "doc": 10}, "acmc.main.phen_copy": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 21, "bases": 0, "doc": 10}, "acmc.main.phen_diff": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 21, "bases": 0, "doc": 10}, "acmc.main.main": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 7, "bases": 0, "doc": 3}, "acmc.omop": {"qualname": 0, "fullname": 2, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 15}, "acmc.omop.logger": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 8, "signature": 0, "bases": 0, "doc": 3}, "acmc.omop.VOCAB_PATH": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 5, "signature": 0, "bases": 0, "doc": 3}, "acmc.omop.OMOP_CDM_Version": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 5, "signature": 0, "bases": 0, "doc": 3}, "acmc.omop.OMOP_DB_FILENAME": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 7, "signature": 0, "bases": 0, "doc": 3}, "acmc.omop.DB_PATH": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 7, "signature": 0, "bases": 0, "doc": 3}, "acmc.omop.VERSION_FILE": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 7, "signature": 0, "bases": 0, "doc": 3}, "acmc.omop.VERSION_PATH": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 7, "signature": 0, "bases": 0, "doc": 3}, "acmc.omop.EXPORT_FILE": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 8, "signature": 0, "bases": 0, "doc": 3}, "acmc.omop.vocabularies": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 202, "signature": 0, "bases": 0, "doc": 3}, "acmc.omop.omop_vocab_types": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 51, "signature": 0, "bases": 0, "doc": 3}, "acmc.omop.install": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 28, "bases": 0, "doc": 96}, "acmc.omop.write_version_file": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 16, "bases": 0, "doc": 33}, "acmc.omop.clear": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 22, "bases": 0, "doc": 49}, "acmc.omop.delete": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 22, "bases": 0, "doc": 49}, "acmc.omop.table_exists": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 35, "bases": 0, "doc": 55}, "acmc.omop.vocab_exists": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 35, "bases": 0, "doc": 56}, "acmc.omop.concept_set_exist": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 36, "bases": 0, "doc": 59}, "acmc.omop.export": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 71, "bases": 0, "doc": 105}, "acmc.parse": {"qualname": 0, "fullname": 2, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "acmc.parse.logger": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 8, "signature": 0, "bases": 0, "doc": 3}, "acmc.parse.SUPPORTED_CODE_TYPES": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 20, "signature": 0, "bases": 0, "doc": 3}, "acmc.parse.CodesError": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 17}, "acmc.parse.CodesError.__init__": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 51, "bases": 0, "doc": 3}, "acmc.parse.InvalidCodesException": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 2, "doc": 17}, "acmc.parse.InvalidCodesException.__init__": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 9, "bases": 0, "doc": 3}, "acmc.parse.InvalidCodesException.error": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "acmc.parse.Proto": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 59}, "acmc.parse.Proto.__init__": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 44, "bases": 0, "doc": 3}, "acmc.parse.Proto.checks": {"qualname": 2, "fullname": 4, "annotation": 22, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "acmc.parse.Proto.name": {"qualname": 2, "fullname": 4, "annotation": 2, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "acmc.parse.Proto.raise_exception": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 21, "bases": 0, "doc": 36}, "acmc.parse.Proto.in_database": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 93, "bases": 0, "doc": 3}, "acmc.parse.Proto.process": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 85, "bases": 0, "doc": 14}, "acmc.parse.Proto.verify": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 52, "bases": 0, "doc": 7}, "acmc.parse.Read2": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 1, "doc": 40}, "acmc.parse.Read2.checks": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "acmc.parse.Read3": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 1, "doc": 59}, "acmc.parse.Read3.checks": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "acmc.parse.Icd10": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 1, "doc": 59}, "acmc.parse.Icd10.checks": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "acmc.parse.Snomed": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 1, "doc": 59}, "acmc.parse.Snomed.checks": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "acmc.parse.Opcs4": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 1, "doc": 59}, "acmc.parse.Opcs4.checks": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "acmc.parse.Atc": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 1, "doc": 59}, "acmc.parse.Atc.checks": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "acmc.parse.Med": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 1, "doc": 59}, "acmc.parse.Med.checks": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "acmc.parse.Cprd": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 1, "doc": 59}, "acmc.parse.Cprd.checks": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "acmc.parse.CodeTypeParser": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 17}, "acmc.parse.CodeTypeParser.__init__": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 40, "bases": 0, "doc": 3}, "acmc.parse.CodeTypeParser.code_types": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "acmc.phen": {"qualname": 0, "fullname": 2, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 14}, "acmc.phen.logger": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 8, "signature": 0, "bases": 0, "doc": 3}, "acmc.phen.PHEN_DIR": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 5, "signature": 0, "bases": 0, "doc": 3}, "acmc.phen.DEFAULT_PHEN_PATH": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 5, "signature": 0, "bases": 0, "doc": 3}, "acmc.phen.CONCEPTS_DIR": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 5, "signature": 0, "bases": 0, "doc": 3}, "acmc.phen.MAP_DIR": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 5, "signature": 0, "bases": 0, "doc": 3}, "acmc.phen.CONCEPT_SET_DIR": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 6, "signature": 0, "bases": 0, "doc": 3}, "acmc.phen.CSV_PATH": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 6, "signature": 0, "bases": 0, "doc": 3}, "acmc.phen.OMOP_PATH": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 6, "signature": 0, "bases": 0, "doc": 3}, "acmc.phen.DEFAULT_PHEN_DIR_LIST": {"qualname": 4, "fullname": 6, "annotation": 0, "default_value": 12, "signature": 0, "bases": 0, "doc": 3}, "acmc.phen.CONFIG_FILE": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 6, "signature": 0, "bases": 0, "doc": 3}, "acmc.phen.VOCAB_VERSION_FILE": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 7, "signature": 0, "bases": 0, "doc": 3}, "acmc.phen.SEMANTIC_VERSION_TYPES": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 11, "signature": 0, "bases": 0, "doc": 3}, "acmc.phen.DEFAULT_VERSION_INC": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 5, "signature": 0, "bases": 0, "doc": 3}, "acmc.phen.DEFAULT_GIT_BRANCH": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 5, "signature": 0, "bases": 0, "doc": 3}, "acmc.phen.SPLIT_COL_ACTION": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 6, "signature": 0, "bases": 0, "doc": 3}, "acmc.phen.CODES_COL_ACTION": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 6, "signature": 0, "bases": 0, "doc": 3}, "acmc.phen.DIVIDE_COL_ACTION": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 6, "signature": 0, "bases": 0, "doc": 3}, "acmc.phen.COL_ACTIONS": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 14, "signature": 0, "bases": 0, "doc": 3}, "acmc.phen.CODE_FILE_TYPES": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 11, "signature": 0, "bases": 0, "doc": 3}, "acmc.phen.SOURCE_COL_SUFFIX": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 6, "signature": 0, "bases": 0, "doc": 3}, "acmc.phen.TARGET_COL_SUFFIX": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 6, "signature": 0, "bases": 0, "doc": 3}, "acmc.phen.CONFIG_SCHEMA": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 352, "signature": 0, "bases": 0, "doc": 3}, "acmc.phen.PhenValidationException": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 2, "doc": 13}, "acmc.phen.PhenValidationException.__init__": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 20, "bases": 0, "doc": 3}, "acmc.phen.PhenValidationException.validation_errors": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "acmc.phen.construct_git_url": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 17, "bases": 0, "doc": 16}, "acmc.phen.create_empty_git_dir": {"qualname": 4, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 21, "bases": 0, "doc": 16}, "acmc.phen.check_delete_dir": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 34, "bases": 0, "doc": 63}, "acmc.phen.fork": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 55, "bases": 0, "doc": 156}, "acmc.phen.init": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 28, "bases": 0, "doc": 11}, "acmc.phen.validate": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 17, "bases": 0, "doc": 13}, "acmc.phen.read_table_file": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 42, "bases": 0, "doc": 6}, "acmc.phen.process_actions": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 62, "bases": 0, "doc": 3}, "acmc.phen.preprocess_source_concepts": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 92, "bases": 0, "doc": 13}, "acmc.phen.get_code_type_from_col_name": {"qualname": 6, "fullname": 8, "annotation": 0, "default_value": 0, "signature": 17, "bases": 0, "doc": 3}, "acmc.phen.translate_codes": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 76, "bases": 0, "doc": 23}, "acmc.phen.sql_row_exist": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 54, "bases": 0, "doc": 3}, "acmc.phen.write_code_errors": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 34, "bases": 0, "doc": 3}, "acmc.phen.write_vocab_version": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 22, "bases": 0, "doc": 3}, "acmc.phen.map": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 29, "bases": 0, "doc": 3}, "acmc.phen.map_target_code_type": {"qualname": 4, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 44, "bases": 0, "doc": 3}, "acmc.phen.generate_version_tag": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 77, "bases": 0, "doc": 3}, "acmc.phen.publish": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 59, "bases": 0, "doc": 15}, "acmc.phen.export": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 27, "bases": 0, "doc": 15}, "acmc.phen.copy": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 38, "bases": 0, "doc": 15}, "acmc.phen.extract_concepts": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 36, "bases": 0, "doc": 14}, "acmc.phen.extract_clean_deepdiff_keys": {"qualname": 4, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 36, "bases": 0, "doc": 61}, "acmc.phen.diff_config": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 31, "bases": 0, "doc": 3}, "acmc.phen.diff_map_files": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 43, "bases": 0, "doc": 3}, "acmc.phen.diff_phen": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 83, "bases": 0, "doc": 11}, "acmc.phen.diff": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 50, "bases": 0, "doc": 3}, "acmc.trud": {"qualname": 0, "fullname": 2, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "acmc.trud.logger": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 8, "signature": 0, "bases": 0, "doc": 3}, "acmc.trud.FQDN": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 8, "signature": 0, "bases": 0, "doc": 3}, "acmc.trud.VOCAB_PATH": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 5, "signature": 0, "bases": 0, "doc": 3}, "acmc.trud.VERSION_FILE": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 7, "signature": 0, "bases": 0, "doc": 3}, "acmc.trud.VERSION_PATH": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 7, "signature": 0, "bases": 0, "doc": 3}, "acmc.trud.DOWNLOADS_PATH": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 5, "signature": 0, "bases": 0, "doc": 3}, "acmc.trud.PROCESSED_PATH": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 5, "signature": 0, "bases": 0, "doc": 3}, "acmc.trud.get_releases": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 41, "bases": 0, "doc": 13}, "acmc.trud.download_release_file": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 62, "bases": 0, "doc": 14}, "acmc.trud.validate_download_hash": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 28, "bases": 0, "doc": 3}, "acmc.trud.unzip_download": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 17, "bases": 0, "doc": 3}, "acmc.trud.extract_icd10": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 7, "bases": 0, "doc": 3}, "acmc.trud.extract_opsc4": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 7, "bases": 0, "doc": 3}, "acmc.trud.extract_nhs_data_migrations": {"qualname": 4, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 7, "bases": 0, "doc": 3}, "acmc.trud.extract_nhs_read_browser": {"qualname": 4, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 7, "bases": 0, "doc": 3}, "acmc.trud.create_map_directories": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 7, "bases": 0, "doc": 6}, "acmc.trud.install": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 7, "bases": 0, "doc": 3}, "acmc.util": {"qualname": 0, "fullname": 2, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "acmc.util.QuotedDumper": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 3, "doc": 3}, "acmc.util.QuotedDumper.increase_indent": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 31, "bases": 0, "doc": 3}}, "length": 148, "save": true}, "index": {"qualname": {"root": {"docs": {"acmc.parse.CodesError.__init__": {"tf": 1}, "acmc.parse.InvalidCodesException.__init__": {"tf": 1}, "acmc.parse.Proto.__init__": {"tf": 1}, "acmc.parse.CodeTypeParser.__init__": {"tf": 1}, "acmc.phen.PhenValidationException.__init__": {"tf": 1}}, "df": 5, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {"acmc.logging_config.DEFAULT_LOG_FILE": {"tf": 1}, "acmc.main.DEFAULT_WORKSPACE_PATH": {"tf": 1}, "acmc.phen.DEFAULT_PHEN_PATH": {"tf": 1}, "acmc.phen.DEFAULT_PHEN_DIR_LIST": {"tf": 1}, "acmc.phen.DEFAULT_VERSION_INC": {"tf": 1}, "acmc.phen.DEFAULT_GIT_BRANCH": {"tf": 1}}, "df": 6}}}}}, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"acmc.main.omop_delete": {"tf": 1}, "acmc.omop.delete": {"tf": 1}, "acmc.phen.check_delete_dir": {"tf": 1}}, "df": 3}}}}, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "f": {"docs": {"acmc.phen.extract_clean_deepdiff_keys": {"tf": 1}}, "df": 1}}}}}}}, "i": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "f": {"docs": {"acmc.main.phen_diff": {"tf": 1}, "acmc.phen.diff_config": {"tf": 1}, "acmc.phen.diff_map_files": {"tf": 1}, "acmc.phen.diff_phen": {"tf": 1}, "acmc.phen.diff": {"tf": 1}}, "df": 5}}, "r": {"docs": {"acmc.phen.PHEN_DIR": {"tf": 1}, "acmc.phen.CONCEPTS_DIR": {"tf": 1}, "acmc.phen.MAP_DIR": {"tf": 1}, "acmc.phen.CONCEPT_SET_DIR": {"tf": 1}, "acmc.phen.DEFAULT_PHEN_DIR_LIST": {"tf": 1}, "acmc.phen.create_empty_git_dir": {"tf": 1}, "acmc.phen.check_delete_dir": {"tf": 1}}, "df": 7, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"acmc.trud.create_map_directories": {"tf": 1}}, "df": 1}}}}}}}}}, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {"acmc.phen.DIVIDE_COL_ACTION": {"tf": 1}}, "df": 1}}}}}, "b": {"docs": {"acmc.omop.OMOP_DB_FILENAME": {"tf": 1}, "acmc.omop.DB_PATH": {"tf": 1}}, "df": 2}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {"acmc.trud.extract_nhs_data_migrations": {"tf": 1}}, "df": 1, "b": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"acmc.parse.Proto.in_database": {"tf": 1}}, "df": 1}}}}}}}, "o": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {"acmc.trud.download_release_file": {"tf": 1}, "acmc.trud.validate_download_hash": {"tf": 1}, "acmc.trud.unzip_download": {"tf": 1}}, "df": 3, "s": {"docs": {"acmc.trud.DOWNLOADS_PATH": {"tf": 1}}, "df": 1}}}}}}}}}, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "g": {"docs": {"acmc.logging_config.DEFAULT_LOG_FILE": {"tf": 1}, "acmc.logging_config.set_log_level": {"tf": 1}}, "df": 2, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"acmc.logging_config.setup_logger": {"tf": 1}, "acmc.main.logger": {"tf": 1}, "acmc.omop.logger": {"tf": 1}, "acmc.parse.logger": {"tf": 1}, "acmc.phen.logger": {"tf": 1}, "acmc.trud.logger": {"tf": 1}}, "df": 6}}}}}, "e": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {"acmc.logging_config.set_log_level": {"tf": 1}}, "df": 1}}}}, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"acmc.phen.DEFAULT_PHEN_DIR_LIST": {"tf": 1}}, "df": 1}}}}, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"acmc.logging_config.DEFAULT_LOG_FILE": {"tf": 1}, "acmc.omop.VERSION_FILE": {"tf": 1}, "acmc.omop.EXPORT_FILE": {"tf": 1}, "acmc.omop.write_version_file": {"tf": 1}, "acmc.phen.CONFIG_FILE": {"tf": 1}, "acmc.phen.VOCAB_VERSION_FILE": {"tf": 1}, "acmc.phen.CODE_FILE_TYPES": {"tf": 1}, "acmc.phen.read_table_file": {"tf": 1}, "acmc.trud.VERSION_FILE": {"tf": 1}, "acmc.trud.download_release_file": {"tf": 1}}, "df": 10, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"acmc.omop.OMOP_DB_FILENAME": {"tf": 1}}, "df": 1}}}}, "s": {"docs": {"acmc.phen.diff_map_files": {"tf": 1}}, "df": 1}}}}, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "k": {"docs": {"acmc.main.phen_fork": {"tf": 1}, "acmc.phen.fork": {"tf": 1}}, "df": 2}}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "m": {"docs": {"acmc.phen.get_code_type_from_col_name": {"tf": 1}}, "df": 1}}}, "q": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "n": {"docs": {"acmc.trud.FQDN": {"tf": 1}}, "df": 1}}}}, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {"acmc.logging_config.set_log_level": {"tf": 1}, "acmc.omop.concept_set_exist": {"tf": 1}, "acmc.phen.CONCEPT_SET_DIR": {"tf": 1}}, "df": 3, "u": {"docs": {}, "df": 0, "p": {"docs": {"acmc.logging_config.setup_logger": {"tf": 1}}, "df": 1}}}, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {"acmc.phen.SEMANTIC_VERSION_TYPES": {"tf": 1}}, "df": 1}}}}}}}, "u": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"acmc.parse.SUPPORTED_CODE_TYPES": {"tf": 1}}, "df": 1}}}}}}}, "f": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "x": {"docs": {"acmc.phen.SOURCE_COL_SUFFIX": {"tf": 1}, "acmc.phen.TARGET_COL_SUFFIX": {"tf": 1}}, "df": 2}}}}}, "n": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"acmc.parse.Snomed": {"tf": 1}, "acmc.parse.Snomed.checks": {"tf": 1}}, "df": 2}}}}}, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {"acmc.phen.SPLIT_COL_ACTION": {"tf": 1}}, "df": 1}}}}, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"acmc.phen.SOURCE_COL_SUFFIX": {"tf": 1}, "acmc.phen.preprocess_source_concepts": {"tf": 1}}, "df": 2}}}}}, "c": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {"acmc.phen.CONFIG_SCHEMA": {"tf": 1}}, "df": 1}}}}}, "q": {"docs": {}, "df": 0, "l": {"docs": {"acmc.phen.sql_row_exist": {"tf": 1}}, "df": 1}}}, "w": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"acmc.main.DEFAULT_WORKSPACE_PATH": {"tf": 1}}, "df": 1}}}}}}}}, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"acmc.omop.write_version_file": {"tf": 1}, "acmc.phen.write_code_errors": {"tf": 1}, "acmc.phen.write_vocab_version": {"tf": 1}}, "df": 3}}}}}, "p": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {"acmc.main.DEFAULT_WORKSPACE_PATH": {"tf": 1}, "acmc.omop.VOCAB_PATH": {"tf": 1}, "acmc.omop.DB_PATH": {"tf": 1}, "acmc.omop.VERSION_PATH": {"tf": 1}, "acmc.phen.DEFAULT_PHEN_PATH": {"tf": 1}, "acmc.phen.CSV_PATH": {"tf": 1}, "acmc.phen.OMOP_PATH": {"tf": 1}, "acmc.trud.VOCAB_PATH": {"tf": 1}, "acmc.trud.VERSION_PATH": {"tf": 1}, "acmc.trud.DOWNLOADS_PATH": {"tf": 1}, "acmc.trud.PROCESSED_PATH": {"tf": 1}}, "df": 11}}}, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {"acmc.main.phen_init": {"tf": 1}, "acmc.main.phen_fork": {"tf": 1}, "acmc.main.phen_validate": {"tf": 1}, "acmc.main.phen_map": {"tf": 1}, "acmc.main.phen_export": {"tf": 1}, "acmc.main.phen_publish": {"tf": 1}, "acmc.main.phen_copy": {"tf": 1}, "acmc.main.phen_diff": {"tf": 1}, "acmc.phen.PHEN_DIR": {"tf": 1}, "acmc.phen.DEFAULT_PHEN_PATH": {"tf": 1}, "acmc.phen.DEFAULT_PHEN_DIR_LIST": {"tf": 1}, "acmc.phen.diff_phen": {"tf": 1}}, "df": 12, "v": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"acmc.phen.PhenValidationException": {"tf": 1}, "acmc.phen.PhenValidationException.__init__": {"tf": 1}, "acmc.phen.PhenValidationException.validation_errors": {"tf": 1}}, "df": 3}}}}}}}}}}}}}}}}}}}}}}, "u": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "h": {"docs": {"acmc.main.phen_publish": {"tf": 1}, "acmc.phen.publish": {"tf": 1}}, "df": 2}}}}}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {"acmc.parse.Proto": {"tf": 1}, "acmc.parse.Proto.__init__": {"tf": 1}, "acmc.parse.Proto.checks": {"tf": 1}, "acmc.parse.Proto.name": {"tf": 1}, "acmc.parse.Proto.raise_exception": {"tf": 1}, "acmc.parse.Proto.in_database": {"tf": 1}, "acmc.parse.Proto.process": {"tf": 1}, "acmc.parse.Proto.verify": {"tf": 1}}, "df": 8}}, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"acmc.parse.Proto.process": {"tf": 1}, "acmc.phen.process_actions": {"tf": 1}}, "df": 2, "e": {"docs": {}, "df": 0, "d": {"docs": {"acmc.trud.PROCESSED_PATH": {"tf": 1}}, "df": 1}}}}}}}, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"acmc.phen.preprocess_source_concepts": {"tf": 1}}, "df": 1}}}}}}}}}}, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "d": {"docs": {"acmc.main.trud_install": {"tf": 1}}, "df": 1}}, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"acmc.phen.translate_codes": {"tf": 1}}, "df": 1}}}}}}}}, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {"acmc.phen.get_code_type_from_col_name": {"tf": 1}, "acmc.phen.map_target_code_type": {"tf": 1}}, "df": 2, "s": {"docs": {"acmc.omop.omop_vocab_types": {"tf": 1}, "acmc.parse.SUPPORTED_CODE_TYPES": {"tf": 1}, "acmc.parse.CodeTypeParser.code_types": {"tf": 1}, "acmc.phen.SEMANTIC_VERSION_TYPES": {"tf": 1}, "acmc.phen.CODE_FILE_TYPES": {"tf": 1}}, "df": 5}}}}, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"acmc.omop.table_exists": {"tf": 1}, "acmc.phen.read_table_file": {"tf": 1}}, "df": 2}}}, "r": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {"acmc.phen.TARGET_COL_SUFFIX": {"tf": 1}, "acmc.phen.map_target_code_type": {"tf": 1}}, "df": 2}}}}, "g": {"docs": {"acmc.phen.generate_version_tag": {"tf": 1}}, "df": 1}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {"acmc.parse.Proto.in_database": {"tf": 1}}, "df": 1, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {"acmc.main.trud_install": {"tf": 1}, "acmc.main.omop_install": {"tf": 1}, "acmc.omop.install": {"tf": 1}, "acmc.trud.install": {"tf": 1}}, "df": 4}}}}}, "i": {"docs": {}, "df": 0, "t": {"docs": {"acmc.main.phen_init": {"tf": 1}, "acmc.parse.CodesError.__init__": {"tf": 1}, "acmc.parse.InvalidCodesException.__init__": {"tf": 1}, "acmc.parse.Proto.__init__": {"tf": 1}, "acmc.parse.CodeTypeParser.__init__": {"tf": 1}, "acmc.phen.PhenValidationException.__init__": {"tf": 1}, "acmc.phen.init": {"tf": 1}}, "df": 7}}, "v": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"acmc.parse.InvalidCodesException": {"tf": 1}, "acmc.parse.InvalidCodesException.__init__": {"tf": 1}, "acmc.parse.InvalidCodesException.error": {"tf": 1}}, "df": 3}}}}}}}}}}}}}}}}}}}, "c": {"docs": {"acmc.phen.DEFAULT_VERSION_INC": {"tf": 1}}, "df": 1, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"acmc.util.QuotedDumper.increase_indent": {"tf": 1}}, "df": 1}}}}}}, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"acmc.util.QuotedDumper.increase_indent": {"tf": 1}}, "df": 1}}}}}, "c": {"docs": {}, "df": 0, "d": {"1": {"0": {"docs": {"acmc.parse.Icd10": {"tf": 1}, "acmc.parse.Icd10.checks": {"tf": 1}, "acmc.trud.extract_icd10": {"tf": 1}}, "df": 3}, "docs": {}, "df": 0}, "docs": {}, "df": 0}}}, "o": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "p": {"docs": {"acmc.main.omop_install": {"tf": 1}, "acmc.main.omop_clear": {"tf": 1}, "acmc.main.omop_delete": {"tf": 1}, "acmc.omop.OMOP_CDM_Version": {"tf": 1}, "acmc.omop.OMOP_DB_FILENAME": {"tf": 1}, "acmc.omop.omop_vocab_types": {"tf": 1}, "acmc.phen.OMOP_PATH": {"tf": 1}}, "df": 7}}}, "p": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "s": {"4": {"docs": {"acmc.parse.Opcs4": {"tf": 1}, "acmc.parse.Opcs4.checks": {"tf": 1}}, "df": 2}, "docs": {}, "df": 0}}, "s": {"docs": {}, "df": 0, "c": {"4": {"docs": {"acmc.trud.extract_opsc4": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}}}}, "c": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {"acmc.main.omop_clear": {"tf": 1}, "acmc.omop.clear": {"tf": 1}}, "df": 2}, "n": {"docs": {"acmc.phen.extract_clean_deepdiff_keys": {"tf": 1}}, "df": 1}}}}, "o": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "y": {"docs": {"acmc.main.phen_copy": {"tf": 1}, "acmc.phen.copy": {"tf": 1}}, "df": 2}}, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {"acmc.omop.concept_set_exist": {"tf": 1}, "acmc.phen.CONCEPT_SET_DIR": {"tf": 1}}, "df": 2, "s": {"docs": {"acmc.phen.CONCEPTS_DIR": {"tf": 1}, "acmc.phen.preprocess_source_concepts": {"tf": 1}, "acmc.phen.extract_concepts": {"tf": 1}}, "df": 3}}}}}, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "g": {"docs": {"acmc.phen.CONFIG_FILE": {"tf": 1}, "acmc.phen.CONFIG_SCHEMA": {"tf": 1}, "acmc.phen.diff_config": {"tf": 1}}, "df": 3}}}, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"acmc.phen.construct_git_url": {"tf": 1}}, "df": 1}}}}}}}, "d": {"docs": {}, "df": 0, "e": {"docs": {"acmc.parse.SUPPORTED_CODE_TYPES": {"tf": 1}, "acmc.parse.CodeTypeParser.code_types": {"tf": 1}, "acmc.phen.CODE_FILE_TYPES": {"tf": 1}, "acmc.phen.get_code_type_from_col_name": {"tf": 1}, "acmc.phen.write_code_errors": {"tf": 1}, "acmc.phen.map_target_code_type": {"tf": 1}}, "df": 6, "s": {"docs": {"acmc.phen.CODES_COL_ACTION": {"tf": 1}, "acmc.phen.translate_codes": {"tf": 1}}, "df": 2, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"acmc.parse.CodesError": {"tf": 1}, "acmc.parse.CodesError.__init__": {"tf": 1}}, "df": 2}}}}}}, "t": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"acmc.parse.CodeTypeParser": {"tf": 1}, "acmc.parse.CodeTypeParser.__init__": {"tf": 1}, "acmc.parse.CodeTypeParser.code_types": {"tf": 1}}, "df": 3}}}}}}}}}}}}, "l": {"docs": {"acmc.phen.SPLIT_COL_ACTION": {"tf": 1}, "acmc.phen.CODES_COL_ACTION": {"tf": 1}, "acmc.phen.DIVIDE_COL_ACTION": {"tf": 1}, "acmc.phen.COL_ACTIONS": {"tf": 1}, "acmc.phen.SOURCE_COL_SUFFIX": {"tf": 1}, "acmc.phen.TARGET_COL_SUFFIX": {"tf": 1}, "acmc.phen.get_code_type_from_col_name": {"tf": 1}}, "df": 7}}, "d": {"docs": {}, "df": 0, "m": {"docs": {"acmc.omop.OMOP_CDM_Version": {"tf": 1}}, "df": 1}}, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {"acmc.phen.check_delete_dir": {"tf": 1}}, "df": 1, "s": {"docs": {"acmc.parse.Proto.checks": {"tf": 1}, "acmc.parse.Read2.checks": {"tf": 1}, "acmc.parse.Read3.checks": {"tf": 1}, "acmc.parse.Icd10.checks": {"tf": 1}, "acmc.parse.Snomed.checks": {"tf": 1}, "acmc.parse.Opcs4.checks": {"tf": 1}, "acmc.parse.Atc.checks": {"tf": 1}, "acmc.parse.Med.checks": {"tf": 1}, "acmc.parse.Cprd.checks": {"tf": 1}}, "df": 9}}}}}, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "d": {"docs": {"acmc.parse.Cprd": {"tf": 1}, "acmc.parse.Cprd.checks": {"tf": 1}}, "df": 2}}}, "s": {"docs": {}, "df": 0, "v": {"docs": {"acmc.phen.CSV_PATH": {"tf": 1}}, "df": 1}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"acmc.phen.create_empty_git_dir": {"tf": 1}, "acmc.trud.create_map_directories": {"tf": 1}}, "df": 2}}}}}}, "v": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"acmc.main.phen_validate": {"tf": 1}, "acmc.phen.validate": {"tf": 1}, "acmc.trud.validate_download_hash": {"tf": 1}}, "df": 3}, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"acmc.phen.PhenValidationException.validation_errors": {"tf": 1}}, "df": 1}}}}}}}}}, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "b": {"docs": {"acmc.omop.VOCAB_PATH": {"tf": 1}, "acmc.omop.omop_vocab_types": {"tf": 1}, "acmc.omop.vocab_exists": {"tf": 1}, "acmc.phen.VOCAB_VERSION_FILE": {"tf": 1}, "acmc.phen.write_vocab_version": {"tf": 1}, "acmc.trud.VOCAB_PATH": {"tf": 1}}, "df": 6, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"acmc.omop.vocabularies": {"tf": 1}}, "df": 1}}}}}}}}}}}, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"acmc.omop.OMOP_CDM_Version": {"tf": 1}, "acmc.omop.VERSION_FILE": {"tf": 1}, "acmc.omop.VERSION_PATH": {"tf": 1}, "acmc.omop.write_version_file": {"tf": 1}, "acmc.phen.VOCAB_VERSION_FILE": {"tf": 1}, "acmc.phen.SEMANTIC_VERSION_TYPES": {"tf": 1}, "acmc.phen.DEFAULT_VERSION_INC": {"tf": 1}, "acmc.phen.write_vocab_version": {"tf": 1}, "acmc.phen.generate_version_tag": {"tf": 1}, "acmc.trud.VERSION_FILE": {"tf": 1}, "acmc.trud.VERSION_PATH": {"tf": 1}}, "df": 11}}}}, "i": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "y": {"docs": {"acmc.parse.Proto.verify": {"tf": 1}}, "df": 1}}}}}}, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "p": {"docs": {"acmc.main.phen_map": {"tf": 1}, "acmc.phen.MAP_DIR": {"tf": 1}, "acmc.phen.map": {"tf": 1}, "acmc.phen.map_target_code_type": {"tf": 1}, "acmc.phen.diff_map_files": {"tf": 1}, "acmc.trud.create_map_directories": {"tf": 1}}, "df": 6}, "i": {"docs": {}, "df": 0, "n": {"docs": {"acmc.main.main": {"tf": 1}}, "df": 1}}}, "e": {"docs": {}, "df": 0, "d": {"docs": {"acmc.parse.Med": {"tf": 1}, "acmc.parse.Med.checks": {"tf": 1}}, "df": 2}}, "i": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"acmc.trud.extract_nhs_data_migrations": {"tf": 1}}, "df": 1}}}}}}}}}}, "e": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {"acmc.main.phen_export": {"tf": 1}, "acmc.omop.EXPORT_FILE": {"tf": 1}, "acmc.omop.export": {"tf": 1}, "acmc.phen.export": {"tf": 1}}, "df": 4}}}}, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"acmc.omop.concept_set_exist": {"tf": 1}, "acmc.phen.sql_row_exist": {"tf": 1}}, "df": 2, "s": {"docs": {"acmc.omop.table_exists": {"tf": 1}, "acmc.omop.vocab_exists": {"tf": 1}}, "df": 2}}}}, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"acmc.parse.Proto.raise_exception": {"tf": 1}}, "df": 1}}}}}}}, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"acmc.phen.extract_concepts": {"tf": 1}, "acmc.phen.extract_clean_deepdiff_keys": {"tf": 1}, "acmc.trud.extract_icd10": {"tf": 1}, "acmc.trud.extract_opsc4": {"tf": 1}, "acmc.trud.extract_nhs_data_migrations": {"tf": 1}, "acmc.trud.extract_nhs_read_browser": {"tf": 1}}, "df": 6}}}}}}, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"acmc.parse.InvalidCodesException.error": {"tf": 1}}, "df": 1, "s": {"docs": {"acmc.phen.PhenValidationException.validation_errors": {"tf": 1}, "acmc.phen.write_code_errors": {"tf": 1}}, "df": 2}}}}}, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {"acmc.phen.create_empty_git_dir": {"tf": 1}}, "df": 1}}}}}, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"acmc.parse.Proto.name": {"tf": 1}, "acmc.phen.get_code_type_from_col_name": {"tf": 1}}, "df": 2}}}, "h": {"docs": {}, "df": 0, "s": {"docs": {"acmc.trud.extract_nhs_data_migrations": {"tf": 1}, "acmc.trud.extract_nhs_read_browser": {"tf": 1}}, "df": 2}}}, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"acmc.parse.Proto.raise_exception": {"tf": 1}}, "df": 1}}}}, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"2": {"docs": {"acmc.parse.Read2": {"tf": 1}, "acmc.parse.Read2.checks": {"tf": 1}}, "df": 2}, "3": {"docs": {"acmc.parse.Read3": {"tf": 1}, "acmc.parse.Read3.checks": {"tf": 1}}, "df": 2}, "docs": {"acmc.phen.read_table_file": {"tf": 1}, "acmc.trud.extract_nhs_read_browser": {"tf": 1}}, "df": 2}}, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"acmc.trud.download_release_file": {"tf": 1}}, "df": 1, "s": {"docs": {"acmc.trud.get_releases": {"tf": 1}}, "df": 1}}}}}}}, "o": {"docs": {}, "df": 0, "w": {"docs": {"acmc.phen.sql_row_exist": {"tf": 1}}, "df": 1}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "c": {"docs": {"acmc.parse.Atc": {"tf": 1}, "acmc.parse.Atc.checks": {"tf": 1}}, "df": 2}}, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"acmc.phen.SPLIT_COL_ACTION": {"tf": 1}, "acmc.phen.CODES_COL_ACTION": {"tf": 1}, "acmc.phen.DIVIDE_COL_ACTION": {"tf": 1}}, "df": 3, "s": {"docs": {"acmc.phen.COL_ACTIONS": {"tf": 1}, "acmc.phen.process_actions": {"tf": 1}}, "df": 2}}}}}}}, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {"acmc.phen.DEFAULT_GIT_BRANCH": {"tf": 1}, "acmc.phen.construct_git_url": {"tf": 1}, "acmc.phen.create_empty_git_dir": {"tf": 1}}, "df": 3}}, "e": {"docs": {}, "df": 0, "t": {"docs": {"acmc.phen.get_code_type_from_col_name": {"tf": 1}, "acmc.trud.get_releases": {"tf": 1}}, "df": 2}, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"acmc.phen.generate_version_tag": {"tf": 1}}, "df": 1}}}}}}}}, "b": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "h": {"docs": {"acmc.phen.DEFAULT_GIT_BRANCH": {"tf": 1}}, "df": 1}}}}, "o": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"acmc.trud.extract_nhs_read_browser": {"tf": 1}}, "df": 1}}}}}}}, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "l": {"docs": {"acmc.phen.construct_git_url": {"tf": 1}}, "df": 1}}, "n": {"docs": {}, "df": 0, "z": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "p": {"docs": {"acmc.trud.unzip_download": {"tf": 1}}, "df": 1}}}}}, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "s": {"docs": {"acmc.phen.extract_clean_deepdiff_keys": {"tf": 1}}, "df": 1}}}}, "h": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "h": {"docs": {"acmc.trud.validate_download_hash": {"tf": 1}}, "df": 1}}}}, "q": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"acmc.util.QuotedDumper": {"tf": 1}, "acmc.util.QuotedDumper.increase_indent": {"tf": 1}}, "df": 2}}}}}}}}}}}}}}, "fullname": {"root": {"docs": {"acmc.parse.CodesError.__init__": {"tf": 1}, "acmc.parse.InvalidCodesException.__init__": {"tf": 1}, "acmc.parse.Proto.__init__": {"tf": 1}, "acmc.parse.CodeTypeParser.__init__": {"tf": 1}, "acmc.phen.PhenValidationException.__init__": {"tf": 1}}, "df": 5, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "c": {"docs": {"acmc": {"tf": 1}, "acmc.logging_config": {"tf": 1}, "acmc.logging_config.DEFAULT_LOG_FILE": {"tf": 1}, "acmc.logging_config.setup_logger": {"tf": 1}, "acmc.logging_config.set_log_level": {"tf": 1}, "acmc.main": {"tf": 1}, "acmc.main.logger": {"tf": 1}, "acmc.main.DEFAULT_WORKSPACE_PATH": {"tf": 1}, "acmc.main.trud_install": {"tf": 1}, "acmc.main.omop_install": {"tf": 1}, "acmc.main.omop_clear": {"tf": 1}, "acmc.main.omop_delete": {"tf": 1}, "acmc.main.phen_init": {"tf": 1}, "acmc.main.phen_fork": {"tf": 1}, "acmc.main.phen_validate": {"tf": 1}, "acmc.main.phen_map": {"tf": 1}, "acmc.main.phen_export": {"tf": 1}, "acmc.main.phen_publish": {"tf": 1}, "acmc.main.phen_copy": {"tf": 1}, "acmc.main.phen_diff": {"tf": 1}, "acmc.main.main": {"tf": 1}, "acmc.omop": {"tf": 1}, "acmc.omop.logger": {"tf": 1}, "acmc.omop.VOCAB_PATH": {"tf": 1}, "acmc.omop.OMOP_CDM_Version": {"tf": 1}, "acmc.omop.OMOP_DB_FILENAME": {"tf": 1}, "acmc.omop.DB_PATH": {"tf": 1}, "acmc.omop.VERSION_FILE": {"tf": 1}, "acmc.omop.VERSION_PATH": {"tf": 1}, "acmc.omop.EXPORT_FILE": {"tf": 1}, "acmc.omop.vocabularies": {"tf": 1}, "acmc.omop.omop_vocab_types": {"tf": 1}, "acmc.omop.install": {"tf": 1}, "acmc.omop.write_version_file": {"tf": 1}, "acmc.omop.clear": {"tf": 1}, "acmc.omop.delete": {"tf": 1}, "acmc.omop.table_exists": {"tf": 1}, "acmc.omop.vocab_exists": {"tf": 1}, "acmc.omop.concept_set_exist": {"tf": 1}, "acmc.omop.export": {"tf": 1}, "acmc.parse": {"tf": 1}, "acmc.parse.logger": {"tf": 1}, "acmc.parse.SUPPORTED_CODE_TYPES": {"tf": 1}, "acmc.parse.CodesError": {"tf": 1}, "acmc.parse.CodesError.__init__": {"tf": 1}, "acmc.parse.InvalidCodesException": {"tf": 1}, "acmc.parse.InvalidCodesException.__init__": {"tf": 1}, "acmc.parse.InvalidCodesException.error": {"tf": 1}, "acmc.parse.Proto": {"tf": 1}, "acmc.parse.Proto.__init__": {"tf": 1}, "acmc.parse.Proto.checks": {"tf": 1}, "acmc.parse.Proto.name": {"tf": 1}, "acmc.parse.Proto.raise_exception": {"tf": 1}, "acmc.parse.Proto.in_database": {"tf": 1}, "acmc.parse.Proto.process": {"tf": 1}, "acmc.parse.Proto.verify": {"tf": 1}, "acmc.parse.Read2": {"tf": 1}, "acmc.parse.Read2.checks": {"tf": 1}, "acmc.parse.Read3": {"tf": 1}, "acmc.parse.Read3.checks": {"tf": 1}, "acmc.parse.Icd10": {"tf": 1}, "acmc.parse.Icd10.checks": {"tf": 1}, "acmc.parse.Snomed": {"tf": 1}, "acmc.parse.Snomed.checks": {"tf": 1}, "acmc.parse.Opcs4": {"tf": 1}, "acmc.parse.Opcs4.checks": {"tf": 1}, "acmc.parse.Atc": {"tf": 1}, "acmc.parse.Atc.checks": {"tf": 1}, "acmc.parse.Med": {"tf": 1}, "acmc.parse.Med.checks": {"tf": 1}, "acmc.parse.Cprd": {"tf": 1}, "acmc.parse.Cprd.checks": {"tf": 1}, "acmc.parse.CodeTypeParser": {"tf": 1}, "acmc.parse.CodeTypeParser.__init__": {"tf": 1}, "acmc.parse.CodeTypeParser.code_types": {"tf": 1}, "acmc.phen": {"tf": 1}, "acmc.phen.logger": {"tf": 1}, "acmc.phen.PHEN_DIR": {"tf": 1}, "acmc.phen.DEFAULT_PHEN_PATH": {"tf": 1}, "acmc.phen.CONCEPTS_DIR": {"tf": 1}, "acmc.phen.MAP_DIR": {"tf": 1}, "acmc.phen.CONCEPT_SET_DIR": {"tf": 1}, "acmc.phen.CSV_PATH": {"tf": 1}, "acmc.phen.OMOP_PATH": {"tf": 1}, "acmc.phen.DEFAULT_PHEN_DIR_LIST": {"tf": 1}, "acmc.phen.CONFIG_FILE": {"tf": 1}, "acmc.phen.VOCAB_VERSION_FILE": {"tf": 1}, "acmc.phen.SEMANTIC_VERSION_TYPES": {"tf": 1}, "acmc.phen.DEFAULT_VERSION_INC": {"tf": 1}, "acmc.phen.DEFAULT_GIT_BRANCH": {"tf": 1}, "acmc.phen.SPLIT_COL_ACTION": {"tf": 1}, "acmc.phen.CODES_COL_ACTION": {"tf": 1}, "acmc.phen.DIVIDE_COL_ACTION": {"tf": 1}, "acmc.phen.COL_ACTIONS": {"tf": 1}, "acmc.phen.CODE_FILE_TYPES": {"tf": 1}, "acmc.phen.SOURCE_COL_SUFFIX": {"tf": 1}, "acmc.phen.TARGET_COL_SUFFIX": {"tf": 1}, "acmc.phen.CONFIG_SCHEMA": {"tf": 1}, "acmc.phen.PhenValidationException": {"tf": 1}, "acmc.phen.PhenValidationException.__init__": {"tf": 1}, "acmc.phen.PhenValidationException.validation_errors": {"tf": 1}, "acmc.phen.construct_git_url": {"tf": 1}, "acmc.phen.create_empty_git_dir": {"tf": 1}, "acmc.phen.check_delete_dir": {"tf": 1}, "acmc.phen.fork": {"tf": 1}, "acmc.phen.init": {"tf": 1}, "acmc.phen.validate": {"tf": 1}, "acmc.phen.read_table_file": {"tf": 1}, "acmc.phen.process_actions": {"tf": 1}, "acmc.phen.preprocess_source_concepts": {"tf": 1}, "acmc.phen.get_code_type_from_col_name": {"tf": 1}, "acmc.phen.translate_codes": {"tf": 1}, "acmc.phen.sql_row_exist": {"tf": 1}, "acmc.phen.write_code_errors": {"tf": 1}, "acmc.phen.write_vocab_version": {"tf": 1}, "acmc.phen.map": {"tf": 1}, "acmc.phen.map_target_code_type": {"tf": 1}, "acmc.phen.generate_version_tag": {"tf": 1}, "acmc.phen.publish": {"tf": 1}, "acmc.phen.export": {"tf": 1}, "acmc.phen.copy": {"tf": 1}, "acmc.phen.extract_concepts": {"tf": 1}, "acmc.phen.extract_clean_deepdiff_keys": {"tf": 1}, "acmc.phen.diff_config": {"tf": 1}, "acmc.phen.diff_map_files": {"tf": 1}, "acmc.phen.diff_phen": {"tf": 1}, "acmc.phen.diff": {"tf": 1}, "acmc.trud": {"tf": 1}, "acmc.trud.logger": {"tf": 1}, "acmc.trud.FQDN": {"tf": 1}, "acmc.trud.VOCAB_PATH": {"tf": 1}, "acmc.trud.VERSION_FILE": {"tf": 1}, "acmc.trud.VERSION_PATH": {"tf": 1}, "acmc.trud.DOWNLOADS_PATH": {"tf": 1}, "acmc.trud.PROCESSED_PATH": {"tf": 1}, "acmc.trud.get_releases": {"tf": 1}, "acmc.trud.download_release_file": {"tf": 1}, "acmc.trud.validate_download_hash": {"tf": 1}, "acmc.trud.unzip_download": {"tf": 1}, "acmc.trud.extract_icd10": {"tf": 1}, "acmc.trud.extract_opsc4": {"tf": 1}, "acmc.trud.extract_nhs_data_migrations": {"tf": 1}, "acmc.trud.extract_nhs_read_browser": {"tf": 1}, "acmc.trud.create_map_directories": {"tf": 1}, "acmc.trud.install": {"tf": 1}, "acmc.util": {"tf": 1}, "acmc.util.QuotedDumper": {"tf": 1}, "acmc.util.QuotedDumper.increase_indent": {"tf": 1}}, "df": 148}}, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"acmc.phen.SPLIT_COL_ACTION": {"tf": 1}, "acmc.phen.CODES_COL_ACTION": {"tf": 1}, "acmc.phen.DIVIDE_COL_ACTION": {"tf": 1}}, "df": 3, "s": {"docs": {"acmc.phen.COL_ACTIONS": {"tf": 1}, "acmc.phen.process_actions": {"tf": 1}}, "df": 2}}}}}}, "t": {"docs": {}, "df": 0, "c": {"docs": {"acmc.parse.Atc": {"tf": 1}, "acmc.parse.Atc.checks": {"tf": 1}}, "df": 2}}}, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "g": {"docs": {"acmc.logging_config.DEFAULT_LOG_FILE": {"tf": 1}, "acmc.logging_config.set_log_level": {"tf": 1}}, "df": 2, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"acmc.logging_config": {"tf": 1}, "acmc.logging_config.DEFAULT_LOG_FILE": {"tf": 1}, "acmc.logging_config.setup_logger": {"tf": 1}, "acmc.logging_config.set_log_level": {"tf": 1}}, "df": 4}}}, "e": {"docs": {}, "df": 0, "r": {"docs": {"acmc.logging_config.setup_logger": {"tf": 1}, "acmc.main.logger": {"tf": 1}, "acmc.omop.logger": {"tf": 1}, "acmc.parse.logger": {"tf": 1}, "acmc.phen.logger": {"tf": 1}, "acmc.trud.logger": {"tf": 1}}, "df": 6}}}}}, "e": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {"acmc.logging_config.set_log_level": {"tf": 1}}, "df": 1}}}}, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"acmc.phen.DEFAULT_PHEN_DIR_LIST": {"tf": 1}}, "df": 1}}}}, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "g": {"docs": {"acmc.logging_config": {"tf": 1}, "acmc.logging_config.DEFAULT_LOG_FILE": {"tf": 1}, "acmc.logging_config.setup_logger": {"tf": 1}, "acmc.logging_config.set_log_level": {"tf": 1}, "acmc.phen.CONFIG_FILE": {"tf": 1}, "acmc.phen.CONFIG_SCHEMA": {"tf": 1}, "acmc.phen.diff_config": {"tf": 1}}, "df": 7}}}, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {"acmc.omop.concept_set_exist": {"tf": 1}, "acmc.phen.CONCEPT_SET_DIR": {"tf": 1}}, "df": 2, "s": {"docs": {"acmc.phen.CONCEPTS_DIR": {"tf": 1}, "acmc.phen.preprocess_source_concepts": {"tf": 1}, "acmc.phen.extract_concepts": {"tf": 1}}, "df": 3}}}}}, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"acmc.phen.construct_git_url": {"tf": 1}}, "df": 1}}}}}}}, "p": {"docs": {}, "df": 0, "y": {"docs": {"acmc.main.phen_copy": {"tf": 1}, "acmc.phen.copy": {"tf": 1}}, "df": 2}}, "d": {"docs": {}, "df": 0, "e": {"docs": {"acmc.parse.SUPPORTED_CODE_TYPES": {"tf": 1}, "acmc.parse.CodeTypeParser.code_types": {"tf": 1}, "acmc.phen.CODE_FILE_TYPES": {"tf": 1}, "acmc.phen.get_code_type_from_col_name": {"tf": 1}, "acmc.phen.write_code_errors": {"tf": 1}, "acmc.phen.map_target_code_type": {"tf": 1}}, "df": 6, "s": {"docs": {"acmc.phen.CODES_COL_ACTION": {"tf": 1}, "acmc.phen.translate_codes": {"tf": 1}}, "df": 2, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"acmc.parse.CodesError": {"tf": 1}, "acmc.parse.CodesError.__init__": {"tf": 1}}, "df": 2}}}}}}, "t": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"acmc.parse.CodeTypeParser": {"tf": 1}, "acmc.parse.CodeTypeParser.__init__": {"tf": 1}, "acmc.parse.CodeTypeParser.code_types": {"tf": 1}}, "df": 3}}}}}}}}}}}}, "l": {"docs": {"acmc.phen.SPLIT_COL_ACTION": {"tf": 1}, "acmc.phen.CODES_COL_ACTION": {"tf": 1}, "acmc.phen.DIVIDE_COL_ACTION": {"tf": 1}, "acmc.phen.COL_ACTIONS": {"tf": 1}, "acmc.phen.SOURCE_COL_SUFFIX": {"tf": 1}, "acmc.phen.TARGET_COL_SUFFIX": {"tf": 1}, "acmc.phen.get_code_type_from_col_name": {"tf": 1}}, "df": 7}}, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {"acmc.main.omop_clear": {"tf": 1}, "acmc.omop.clear": {"tf": 1}}, "df": 2}, "n": {"docs": {"acmc.phen.extract_clean_deepdiff_keys": {"tf": 1}}, "df": 1}}}}, "d": {"docs": {}, "df": 0, "m": {"docs": {"acmc.omop.OMOP_CDM_Version": {"tf": 1}}, "df": 1}}, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {"acmc.phen.check_delete_dir": {"tf": 1}}, "df": 1, "s": {"docs": {"acmc.parse.Proto.checks": {"tf": 1}, "acmc.parse.Read2.checks": {"tf": 1}, "acmc.parse.Read3.checks": {"tf": 1}, "acmc.parse.Icd10.checks": {"tf": 1}, "acmc.parse.Snomed.checks": {"tf": 1}, "acmc.parse.Opcs4.checks": {"tf": 1}, "acmc.parse.Atc.checks": {"tf": 1}, "acmc.parse.Med.checks": {"tf": 1}, "acmc.parse.Cprd.checks": {"tf": 1}}, "df": 9}}}}}, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "d": {"docs": {"acmc.parse.Cprd": {"tf": 1}, "acmc.parse.Cprd.checks": {"tf": 1}}, "df": 2}}}, "s": {"docs": {}, "df": 0, "v": {"docs": {"acmc.phen.CSV_PATH": {"tf": 1}}, "df": 1}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"acmc.phen.create_empty_git_dir": {"tf": 1}, "acmc.trud.create_map_directories": {"tf": 1}}, "df": 2}}}}}}, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {"acmc.logging_config.DEFAULT_LOG_FILE": {"tf": 1}, "acmc.main.DEFAULT_WORKSPACE_PATH": {"tf": 1}, "acmc.phen.DEFAULT_PHEN_PATH": {"tf": 1}, "acmc.phen.DEFAULT_PHEN_DIR_LIST": {"tf": 1}, "acmc.phen.DEFAULT_VERSION_INC": {"tf": 1}, "acmc.phen.DEFAULT_GIT_BRANCH": {"tf": 1}}, "df": 6}}}}}, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"acmc.main.omop_delete": {"tf": 1}, "acmc.omop.delete": {"tf": 1}, "acmc.phen.check_delete_dir": {"tf": 1}}, "df": 3}}}}, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "f": {"docs": {"acmc.phen.extract_clean_deepdiff_keys": {"tf": 1}}, "df": 1}}}}}}}, "i": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "f": {"docs": {"acmc.main.phen_diff": {"tf": 1}, "acmc.phen.diff_config": {"tf": 1}, "acmc.phen.diff_map_files": {"tf": 1}, "acmc.phen.diff_phen": {"tf": 1}, "acmc.phen.diff": {"tf": 1}}, "df": 5}}, "r": {"docs": {"acmc.phen.PHEN_DIR": {"tf": 1}, "acmc.phen.CONCEPTS_DIR": {"tf": 1}, "acmc.phen.MAP_DIR": {"tf": 1}, "acmc.phen.CONCEPT_SET_DIR": {"tf": 1}, "acmc.phen.DEFAULT_PHEN_DIR_LIST": {"tf": 1}, "acmc.phen.create_empty_git_dir": {"tf": 1}, "acmc.phen.check_delete_dir": {"tf": 1}}, "df": 7, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"acmc.trud.create_map_directories": {"tf": 1}}, "df": 1}}}}}}}}}, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {"acmc.phen.DIVIDE_COL_ACTION": {"tf": 1}}, "df": 1}}}}}, "b": {"docs": {"acmc.omop.OMOP_DB_FILENAME": {"tf": 1}, "acmc.omop.DB_PATH": {"tf": 1}}, "df": 2}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {"acmc.trud.extract_nhs_data_migrations": {"tf": 1}}, "df": 1, "b": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"acmc.parse.Proto.in_database": {"tf": 1}}, "df": 1}}}}}}}, "o": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {"acmc.trud.download_release_file": {"tf": 1}, "acmc.trud.validate_download_hash": {"tf": 1}, "acmc.trud.unzip_download": {"tf": 1}}, "df": 3, "s": {"docs": {"acmc.trud.DOWNLOADS_PATH": {"tf": 1}}, "df": 1}}}}}}}}}, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"acmc.logging_config.DEFAULT_LOG_FILE": {"tf": 1}, "acmc.omop.VERSION_FILE": {"tf": 1}, "acmc.omop.EXPORT_FILE": {"tf": 1}, "acmc.omop.write_version_file": {"tf": 1}, "acmc.phen.CONFIG_FILE": {"tf": 1}, "acmc.phen.VOCAB_VERSION_FILE": {"tf": 1}, "acmc.phen.CODE_FILE_TYPES": {"tf": 1}, "acmc.phen.read_table_file": {"tf": 1}, "acmc.trud.VERSION_FILE": {"tf": 1}, "acmc.trud.download_release_file": {"tf": 1}}, "df": 10, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"acmc.omop.OMOP_DB_FILENAME": {"tf": 1}}, "df": 1}}}}, "s": {"docs": {"acmc.phen.diff_map_files": {"tf": 1}}, "df": 1}}}}, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "k": {"docs": {"acmc.main.phen_fork": {"tf": 1}, "acmc.phen.fork": {"tf": 1}}, "df": 2}}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "m": {"docs": {"acmc.phen.get_code_type_from_col_name": {"tf": 1}}, "df": 1}}}, "q": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "n": {"docs": {"acmc.trud.FQDN": {"tf": 1}}, "df": 1}}}}, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {"acmc.logging_config.set_log_level": {"tf": 1}, "acmc.omop.concept_set_exist": {"tf": 1}, "acmc.phen.CONCEPT_SET_DIR": {"tf": 1}}, "df": 3, "u": {"docs": {}, "df": 0, "p": {"docs": {"acmc.logging_config.setup_logger": {"tf": 1}}, "df": 1}}}, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {"acmc.phen.SEMANTIC_VERSION_TYPES": {"tf": 1}}, "df": 1}}}}}}}, "u": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"acmc.parse.SUPPORTED_CODE_TYPES": {"tf": 1}}, "df": 1}}}}}}}, "f": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "x": {"docs": {"acmc.phen.SOURCE_COL_SUFFIX": {"tf": 1}, "acmc.phen.TARGET_COL_SUFFIX": {"tf": 1}}, "df": 2}}}}}, "n": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"acmc.parse.Snomed": {"tf": 1}, "acmc.parse.Snomed.checks": {"tf": 1}}, "df": 2}}}}}, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {"acmc.phen.SPLIT_COL_ACTION": {"tf": 1}}, "df": 1}}}}, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"acmc.phen.SOURCE_COL_SUFFIX": {"tf": 1}, "acmc.phen.preprocess_source_concepts": {"tf": 1}}, "df": 2}}}}}, "c": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {"acmc.phen.CONFIG_SCHEMA": {"tf": 1}}, "df": 1}}}}}, "q": {"docs": {}, "df": 0, "l": {"docs": {"acmc.phen.sql_row_exist": {"tf": 1}}, "df": 1}}}, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {"acmc.main": {"tf": 1}, "acmc.main.logger": {"tf": 1}, "acmc.main.DEFAULT_WORKSPACE_PATH": {"tf": 1}, "acmc.main.trud_install": {"tf": 1}, "acmc.main.omop_install": {"tf": 1}, "acmc.main.omop_clear": {"tf": 1}, "acmc.main.omop_delete": {"tf": 1}, "acmc.main.phen_init": {"tf": 1}, "acmc.main.phen_fork": {"tf": 1}, "acmc.main.phen_validate": {"tf": 1}, "acmc.main.phen_map": {"tf": 1}, "acmc.main.phen_export": {"tf": 1}, "acmc.main.phen_publish": {"tf": 1}, "acmc.main.phen_copy": {"tf": 1}, "acmc.main.phen_diff": {"tf": 1}, "acmc.main.main": {"tf": 1.4142135623730951}}, "df": 16}}, "p": {"docs": {"acmc.main.phen_map": {"tf": 1}, "acmc.phen.MAP_DIR": {"tf": 1}, "acmc.phen.map": {"tf": 1}, "acmc.phen.map_target_code_type": {"tf": 1}, "acmc.phen.diff_map_files": {"tf": 1}, "acmc.trud.create_map_directories": {"tf": 1}}, "df": 6}}, "e": {"docs": {}, "df": 0, "d": {"docs": {"acmc.parse.Med": {"tf": 1}, "acmc.parse.Med.checks": {"tf": 1}}, "df": 2}}, "i": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"acmc.trud.extract_nhs_data_migrations": {"tf": 1}}, "df": 1}}}}}}}}}}, "w": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"acmc.main.DEFAULT_WORKSPACE_PATH": {"tf": 1}}, "df": 1}}}}}}}}, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"acmc.omop.write_version_file": {"tf": 1}, "acmc.phen.write_code_errors": {"tf": 1}, "acmc.phen.write_vocab_version": {"tf": 1}}, "df": 3}}}}}, "p": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {"acmc.main.DEFAULT_WORKSPACE_PATH": {"tf": 1}, "acmc.omop.VOCAB_PATH": {"tf": 1}, "acmc.omop.DB_PATH": {"tf": 1}, "acmc.omop.VERSION_PATH": {"tf": 1}, "acmc.phen.DEFAULT_PHEN_PATH": {"tf": 1}, "acmc.phen.CSV_PATH": {"tf": 1}, "acmc.phen.OMOP_PATH": {"tf": 1}, "acmc.trud.VOCAB_PATH": {"tf": 1}, "acmc.trud.VERSION_PATH": {"tf": 1}, "acmc.trud.DOWNLOADS_PATH": {"tf": 1}, "acmc.trud.PROCESSED_PATH": {"tf": 1}}, "df": 11}}, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"acmc.parse": {"tf": 1}, "acmc.parse.logger": {"tf": 1}, "acmc.parse.SUPPORTED_CODE_TYPES": {"tf": 1}, "acmc.parse.CodesError": {"tf": 1}, "acmc.parse.CodesError.__init__": {"tf": 1}, "acmc.parse.InvalidCodesException": {"tf": 1}, "acmc.parse.InvalidCodesException.__init__": {"tf": 1}, "acmc.parse.InvalidCodesException.error": {"tf": 1}, "acmc.parse.Proto": {"tf": 1}, "acmc.parse.Proto.__init__": {"tf": 1}, "acmc.parse.Proto.checks": {"tf": 1}, "acmc.parse.Proto.name": {"tf": 1}, "acmc.parse.Proto.raise_exception": {"tf": 1}, "acmc.parse.Proto.in_database": {"tf": 1}, "acmc.parse.Proto.process": {"tf": 1}, "acmc.parse.Proto.verify": {"tf": 1}, "acmc.parse.Read2": {"tf": 1}, "acmc.parse.Read2.checks": {"tf": 1}, "acmc.parse.Read3": {"tf": 1}, "acmc.parse.Read3.checks": {"tf": 1}, "acmc.parse.Icd10": {"tf": 1}, "acmc.parse.Icd10.checks": {"tf": 1}, "acmc.parse.Snomed": {"tf": 1}, "acmc.parse.Snomed.checks": {"tf": 1}, "acmc.parse.Opcs4": {"tf": 1}, "acmc.parse.Opcs4.checks": {"tf": 1}, "acmc.parse.Atc": {"tf": 1}, "acmc.parse.Atc.checks": {"tf": 1}, "acmc.parse.Med": {"tf": 1}, "acmc.parse.Med.checks": {"tf": 1}, "acmc.parse.Cprd": {"tf": 1}, "acmc.parse.Cprd.checks": {"tf": 1}, "acmc.parse.CodeTypeParser": {"tf": 1}, "acmc.parse.CodeTypeParser.__init__": {"tf": 1}, "acmc.parse.CodeTypeParser.code_types": {"tf": 1}}, "df": 35}}}}, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {"acmc.main.phen_init": {"tf": 1}, "acmc.main.phen_fork": {"tf": 1}, "acmc.main.phen_validate": {"tf": 1}, "acmc.main.phen_map": {"tf": 1}, "acmc.main.phen_export": {"tf": 1}, "acmc.main.phen_publish": {"tf": 1}, "acmc.main.phen_copy": {"tf": 1}, "acmc.main.phen_diff": {"tf": 1}, "acmc.phen": {"tf": 1}, "acmc.phen.logger": {"tf": 1}, "acmc.phen.PHEN_DIR": {"tf": 1.4142135623730951}, "acmc.phen.DEFAULT_PHEN_PATH": {"tf": 1.4142135623730951}, "acmc.phen.CONCEPTS_DIR": {"tf": 1}, "acmc.phen.MAP_DIR": {"tf": 1}, "acmc.phen.CONCEPT_SET_DIR": {"tf": 1}, "acmc.phen.CSV_PATH": {"tf": 1}, "acmc.phen.OMOP_PATH": {"tf": 1}, "acmc.phen.DEFAULT_PHEN_DIR_LIST": {"tf": 1.4142135623730951}, "acmc.phen.CONFIG_FILE": {"tf": 1}, "acmc.phen.VOCAB_VERSION_FILE": {"tf": 1}, "acmc.phen.SEMANTIC_VERSION_TYPES": {"tf": 1}, "acmc.phen.DEFAULT_VERSION_INC": {"tf": 1}, "acmc.phen.DEFAULT_GIT_BRANCH": {"tf": 1}, "acmc.phen.SPLIT_COL_ACTION": {"tf": 1}, "acmc.phen.CODES_COL_ACTION": {"tf": 1}, "acmc.phen.DIVIDE_COL_ACTION": {"tf": 1}, "acmc.phen.COL_ACTIONS": {"tf": 1}, "acmc.phen.CODE_FILE_TYPES": {"tf": 1}, "acmc.phen.SOURCE_COL_SUFFIX": {"tf": 1}, "acmc.phen.TARGET_COL_SUFFIX": {"tf": 1}, "acmc.phen.CONFIG_SCHEMA": {"tf": 1}, "acmc.phen.PhenValidationException": {"tf": 1}, "acmc.phen.PhenValidationException.__init__": {"tf": 1}, "acmc.phen.PhenValidationException.validation_errors": {"tf": 1}, "acmc.phen.construct_git_url": {"tf": 1}, "acmc.phen.create_empty_git_dir": {"tf": 1}, "acmc.phen.check_delete_dir": {"tf": 1}, "acmc.phen.fork": {"tf": 1}, "acmc.phen.init": {"tf": 1}, "acmc.phen.validate": {"tf": 1}, "acmc.phen.read_table_file": {"tf": 1}, "acmc.phen.process_actions": {"tf": 1}, "acmc.phen.preprocess_source_concepts": {"tf": 1}, "acmc.phen.get_code_type_from_col_name": {"tf": 1}, "acmc.phen.translate_codes": {"tf": 1}, "acmc.phen.sql_row_exist": {"tf": 1}, "acmc.phen.write_code_errors": {"tf": 1}, "acmc.phen.write_vocab_version": {"tf": 1}, "acmc.phen.map": {"tf": 1}, "acmc.phen.map_target_code_type": {"tf": 1}, "acmc.phen.generate_version_tag": {"tf": 1}, "acmc.phen.publish": {"tf": 1}, "acmc.phen.export": {"tf": 1}, "acmc.phen.copy": {"tf": 1}, "acmc.phen.extract_concepts": {"tf": 1}, "acmc.phen.extract_clean_deepdiff_keys": {"tf": 1}, "acmc.phen.diff_config": {"tf": 1}, "acmc.phen.diff_map_files": {"tf": 1}, "acmc.phen.diff_phen": {"tf": 1.4142135623730951}, "acmc.phen.diff": {"tf": 1}}, "df": 60, "v": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"acmc.phen.PhenValidationException": {"tf": 1}, "acmc.phen.PhenValidationException.__init__": {"tf": 1}, "acmc.phen.PhenValidationException.validation_errors": {"tf": 1}}, "df": 3}}}}}}}}}}}}}}}}}}}}}}, "u": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "h": {"docs": {"acmc.main.phen_publish": {"tf": 1}, "acmc.phen.publish": {"tf": 1}}, "df": 2}}}}}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {"acmc.parse.Proto": {"tf": 1}, "acmc.parse.Proto.__init__": {"tf": 1}, "acmc.parse.Proto.checks": {"tf": 1}, "acmc.parse.Proto.name": {"tf": 1}, "acmc.parse.Proto.raise_exception": {"tf": 1}, "acmc.parse.Proto.in_database": {"tf": 1}, "acmc.parse.Proto.process": {"tf": 1}, "acmc.parse.Proto.verify": {"tf": 1}}, "df": 8}}, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"acmc.parse.Proto.process": {"tf": 1}, "acmc.phen.process_actions": {"tf": 1}}, "df": 2, "e": {"docs": {}, "df": 0, "d": {"docs": {"acmc.trud.PROCESSED_PATH": {"tf": 1}}, "df": 1}}}}}}}, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"acmc.phen.preprocess_source_concepts": {"tf": 1}}, "df": 1}}}}}}}}}}, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "d": {"docs": {"acmc.main.trud_install": {"tf": 1}, "acmc.trud": {"tf": 1}, "acmc.trud.logger": {"tf": 1}, "acmc.trud.FQDN": {"tf": 1}, "acmc.trud.VOCAB_PATH": {"tf": 1}, "acmc.trud.VERSION_FILE": {"tf": 1}, "acmc.trud.VERSION_PATH": {"tf": 1}, "acmc.trud.DOWNLOADS_PATH": {"tf": 1}, "acmc.trud.PROCESSED_PATH": {"tf": 1}, "acmc.trud.get_releases": {"tf": 1}, "acmc.trud.download_release_file": {"tf": 1}, "acmc.trud.validate_download_hash": {"tf": 1}, "acmc.trud.unzip_download": {"tf": 1}, "acmc.trud.extract_icd10": {"tf": 1}, "acmc.trud.extract_opsc4": {"tf": 1}, "acmc.trud.extract_nhs_data_migrations": {"tf": 1}, "acmc.trud.extract_nhs_read_browser": {"tf": 1}, "acmc.trud.create_map_directories": {"tf": 1}, "acmc.trud.install": {"tf": 1}}, "df": 19}}, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"acmc.phen.translate_codes": {"tf": 1}}, "df": 1}}}}}}}}, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {"acmc.phen.get_code_type_from_col_name": {"tf": 1}, "acmc.phen.map_target_code_type": {"tf": 1}}, "df": 2, "s": {"docs": {"acmc.omop.omop_vocab_types": {"tf": 1}, "acmc.parse.SUPPORTED_CODE_TYPES": {"tf": 1}, "acmc.parse.CodeTypeParser.code_types": {"tf": 1}, "acmc.phen.SEMANTIC_VERSION_TYPES": {"tf": 1}, "acmc.phen.CODE_FILE_TYPES": {"tf": 1}}, "df": 5}}}}, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"acmc.omop.table_exists": {"tf": 1}, "acmc.phen.read_table_file": {"tf": 1}}, "df": 2}}}, "r": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {"acmc.phen.TARGET_COL_SUFFIX": {"tf": 1}, "acmc.phen.map_target_code_type": {"tf": 1}}, "df": 2}}}}, "g": {"docs": {"acmc.phen.generate_version_tag": {"tf": 1}}, "df": 1}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {"acmc.parse.Proto.in_database": {"tf": 1}}, "df": 1, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {"acmc.main.trud_install": {"tf": 1}, "acmc.main.omop_install": {"tf": 1}, "acmc.omop.install": {"tf": 1}, "acmc.trud.install": {"tf": 1}}, "df": 4}}}}}, "i": {"docs": {}, "df": 0, "t": {"docs": {"acmc.main.phen_init": {"tf": 1}, "acmc.parse.CodesError.__init__": {"tf": 1}, "acmc.parse.InvalidCodesException.__init__": {"tf": 1}, "acmc.parse.Proto.__init__": {"tf": 1}, "acmc.parse.CodeTypeParser.__init__": {"tf": 1}, "acmc.phen.PhenValidationException.__init__": {"tf": 1}, "acmc.phen.init": {"tf": 1}}, "df": 7}}, "v": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"acmc.parse.InvalidCodesException": {"tf": 1}, "acmc.parse.InvalidCodesException.__init__": {"tf": 1}, "acmc.parse.InvalidCodesException.error": {"tf": 1}}, "df": 3}}}}}}}}}}}}}}}}}}}, "c": {"docs": {"acmc.phen.DEFAULT_VERSION_INC": {"tf": 1}}, "df": 1, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"acmc.util.QuotedDumper.increase_indent": {"tf": 1}}, "df": 1}}}}}}, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"acmc.util.QuotedDumper.increase_indent": {"tf": 1}}, "df": 1}}}}}, "c": {"docs": {}, "df": 0, "d": {"1": {"0": {"docs": {"acmc.parse.Icd10": {"tf": 1}, "acmc.parse.Icd10.checks": {"tf": 1}, "acmc.trud.extract_icd10": {"tf": 1}}, "df": 3}, "docs": {}, "df": 0}, "docs": {}, "df": 0}}}, "o": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "p": {"docs": {"acmc.main.omop_install": {"tf": 1}, "acmc.main.omop_clear": {"tf": 1}, "acmc.main.omop_delete": {"tf": 1}, "acmc.omop": {"tf": 1}, "acmc.omop.logger": {"tf": 1}, "acmc.omop.VOCAB_PATH": {"tf": 1}, "acmc.omop.OMOP_CDM_Version": {"tf": 1.4142135623730951}, "acmc.omop.OMOP_DB_FILENAME": {"tf": 1.4142135623730951}, "acmc.omop.DB_PATH": {"tf": 1}, "acmc.omop.VERSION_FILE": {"tf": 1}, "acmc.omop.VERSION_PATH": {"tf": 1}, "acmc.omop.EXPORT_FILE": {"tf": 1}, "acmc.omop.vocabularies": {"tf": 1}, "acmc.omop.omop_vocab_types": {"tf": 1.4142135623730951}, "acmc.omop.install": {"tf": 1}, "acmc.omop.write_version_file": {"tf": 1}, "acmc.omop.clear": {"tf": 1}, "acmc.omop.delete": {"tf": 1}, "acmc.omop.table_exists": {"tf": 1}, "acmc.omop.vocab_exists": {"tf": 1}, "acmc.omop.concept_set_exist": {"tf": 1}, "acmc.omop.export": {"tf": 1}, "acmc.phen.OMOP_PATH": {"tf": 1}}, "df": 23}}}, "p": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "s": {"4": {"docs": {"acmc.parse.Opcs4": {"tf": 1}, "acmc.parse.Opcs4.checks": {"tf": 1}}, "df": 2}, "docs": {}, "df": 0}}, "s": {"docs": {}, "df": 0, "c": {"4": {"docs": {"acmc.trud.extract_opsc4": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}}}}, "v": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"acmc.main.phen_validate": {"tf": 1}, "acmc.phen.validate": {"tf": 1}, "acmc.trud.validate_download_hash": {"tf": 1}}, "df": 3}, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"acmc.phen.PhenValidationException.validation_errors": {"tf": 1}}, "df": 1}}}}}}}}}, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "b": {"docs": {"acmc.omop.VOCAB_PATH": {"tf": 1}, "acmc.omop.omop_vocab_types": {"tf": 1}, "acmc.omop.vocab_exists": {"tf": 1}, "acmc.phen.VOCAB_VERSION_FILE": {"tf": 1}, "acmc.phen.write_vocab_version": {"tf": 1}, "acmc.trud.VOCAB_PATH": {"tf": 1}}, "df": 6, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"acmc.omop.vocabularies": {"tf": 1}}, "df": 1}}}}}}}}}}}, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"acmc.omop.OMOP_CDM_Version": {"tf": 1}, "acmc.omop.VERSION_FILE": {"tf": 1}, "acmc.omop.VERSION_PATH": {"tf": 1}, "acmc.omop.write_version_file": {"tf": 1}, "acmc.phen.VOCAB_VERSION_FILE": {"tf": 1}, "acmc.phen.SEMANTIC_VERSION_TYPES": {"tf": 1}, "acmc.phen.DEFAULT_VERSION_INC": {"tf": 1}, "acmc.phen.write_vocab_version": {"tf": 1}, "acmc.phen.generate_version_tag": {"tf": 1}, "acmc.trud.VERSION_FILE": {"tf": 1}, "acmc.trud.VERSION_PATH": {"tf": 1}}, "df": 11}}}}, "i": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "y": {"docs": {"acmc.parse.Proto.verify": {"tf": 1}}, "df": 1}}}}}}, "e": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {"acmc.main.phen_export": {"tf": 1}, "acmc.omop.EXPORT_FILE": {"tf": 1}, "acmc.omop.export": {"tf": 1}, "acmc.phen.export": {"tf": 1}}, "df": 4}}}}, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"acmc.omop.concept_set_exist": {"tf": 1}, "acmc.phen.sql_row_exist": {"tf": 1}}, "df": 2, "s": {"docs": {"acmc.omop.table_exists": {"tf": 1}, "acmc.omop.vocab_exists": {"tf": 1}}, "df": 2}}}}, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"acmc.parse.Proto.raise_exception": {"tf": 1}}, "df": 1}}}}}}}, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"acmc.phen.extract_concepts": {"tf": 1}, "acmc.phen.extract_clean_deepdiff_keys": {"tf": 1}, "acmc.trud.extract_icd10": {"tf": 1}, "acmc.trud.extract_opsc4": {"tf": 1}, "acmc.trud.extract_nhs_data_migrations": {"tf": 1}, "acmc.trud.extract_nhs_read_browser": {"tf": 1}}, "df": 6}}}}}}, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"acmc.parse.InvalidCodesException.error": {"tf": 1}}, "df": 1, "s": {"docs": {"acmc.phen.PhenValidationException.validation_errors": {"tf": 1}, "acmc.phen.write_code_errors": {"tf": 1}}, "df": 2}}}}}, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {"acmc.phen.create_empty_git_dir": {"tf": 1}}, "df": 1}}}}}, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"acmc.parse.Proto.name": {"tf": 1}, "acmc.phen.get_code_type_from_col_name": {"tf": 1}}, "df": 2}}}, "h": {"docs": {}, "df": 0, "s": {"docs": {"acmc.trud.extract_nhs_data_migrations": {"tf": 1}, "acmc.trud.extract_nhs_read_browser": {"tf": 1}}, "df": 2}}}, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"acmc.parse.Proto.raise_exception": {"tf": 1}}, "df": 1}}}}, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"2": {"docs": {"acmc.parse.Read2": {"tf": 1}, "acmc.parse.Read2.checks": {"tf": 1}}, "df": 2}, "3": {"docs": {"acmc.parse.Read3": {"tf": 1}, "acmc.parse.Read3.checks": {"tf": 1}}, "df": 2}, "docs": {"acmc.phen.read_table_file": {"tf": 1}, "acmc.trud.extract_nhs_read_browser": {"tf": 1}}, "df": 2}}, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"acmc.trud.download_release_file": {"tf": 1}}, "df": 1, "s": {"docs": {"acmc.trud.get_releases": {"tf": 1}}, "df": 1}}}}}}}, "o": {"docs": {}, "df": 0, "w": {"docs": {"acmc.phen.sql_row_exist": {"tf": 1}}, "df": 1}}}, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {"acmc.phen.DEFAULT_GIT_BRANCH": {"tf": 1}, "acmc.phen.construct_git_url": {"tf": 1}, "acmc.phen.create_empty_git_dir": {"tf": 1}}, "df": 3}}, "e": {"docs": {}, "df": 0, "t": {"docs": {"acmc.phen.get_code_type_from_col_name": {"tf": 1}, "acmc.trud.get_releases": {"tf": 1}}, "df": 2}, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"acmc.phen.generate_version_tag": {"tf": 1}}, "df": 1}}}}}}}}, "b": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "h": {"docs": {"acmc.phen.DEFAULT_GIT_BRANCH": {"tf": 1}}, "df": 1}}}}, "o": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"acmc.trud.extract_nhs_read_browser": {"tf": 1}}, "df": 1}}}}}}}, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "l": {"docs": {"acmc.phen.construct_git_url": {"tf": 1}}, "df": 1}}, "n": {"docs": {}, "df": 0, "z": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "p": {"docs": {"acmc.trud.unzip_download": {"tf": 1}}, "df": 1}}}}, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {"acmc.util": {"tf": 1}, "acmc.util.QuotedDumper": {"tf": 1}, "acmc.util.QuotedDumper.increase_indent": {"tf": 1}}, "df": 3}}}}, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "s": {"docs": {"acmc.phen.extract_clean_deepdiff_keys": {"tf": 1}}, "df": 1}}}}, "h": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "h": {"docs": {"acmc.trud.validate_download_hash": {"tf": 1}}, "df": 1}}}}, "q": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"acmc.util.QuotedDumper": {"tf": 1}, "acmc.util.QuotedDumper.increase_indent": {"tf": 1}}, "df": 2}}}}}}}}}}}}}}, "annotation": {"root": {"docs": {"acmc.parse.Proto.checks": {"tf": 1}, "acmc.parse.Proto.name": {"tf": 1}}, "df": 2, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "[": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "[": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {"acmc.parse.Proto.checks": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}, "t": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"acmc.parse.Proto.checks": {"tf": 1.4142135623730951}}, "df": 1}}}}}}, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "[": {"docs": {}, "df": 0, "[": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {"acmc.parse.Proto.checks": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}}}}}}}}}, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"acmc.parse.Proto.checks": {"tf": 2}}, "df": 1}}}}, "f": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"acmc.parse.Proto.checks": {"tf": 1.7320508075688772}}, "df": 1}}}}}, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"acmc.parse.Proto.checks": {"tf": 1.7320508075688772}}, "df": 1}}}}}}}}}, "p": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {"acmc.parse.Proto.checks": {"tf": 1.4142135623730951}}, "df": 1}}}}, "t": {"docs": {}, "df": 0, "h": {"docs": {"acmc.parse.Proto.checks": {"tf": 1}}, "df": 1, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "b": {"docs": {"acmc.parse.Proto.checks": {"tf": 1}}, "df": 1}}}}}}}, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"acmc.parse.Proto.checks": {"tf": 1.4142135623730951}}, "df": 1}}}}}, "t": {"docs": {}, "df": 0, "r": {"docs": {"acmc.parse.Proto.name": {"tf": 1}}, "df": 1}}}}}, "default_value": {"root": {"1": {"4": {"4": {"docs": {"acmc.omop.vocabularies": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "5": {"4": {"docs": {"acmc.omop.vocabularies": {"tf": 1}}, "df": 1}, "5": {"docs": {"acmc.omop.vocabularies": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "7": {"docs": {"acmc.omop.vocabularies": {"tf": 1}}, "df": 1}, "docs": {"acmc.omop.vocabularies": {"tf": 1}}, "df": 1}, "2": {"1": {"docs": {"acmc.omop.vocabularies": {"tf": 1}}, "df": 1}, "docs": {"acmc.omop.vocabularies": {"tf": 1}}, "df": 1}, "5": {"4": {"docs": {"acmc.omop.OMOP_CDM_Version": {"tf": 1}, "acmc.omop.OMOP_DB_FILENAME": {"tf": 1}, "acmc.omop.DB_PATH": {"tf": 1}, "acmc.omop.EXPORT_FILE": {"tf": 1}, "acmc.omop.vocabularies": {"tf": 1}}, "df": 5}, "5": {"docs": {"acmc.omop.vocabularies": {"tf": 1}}, "df": 1}, "7": {"docs": {"acmc.omop.vocabularies": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "7": {"0": {"docs": {"acmc.omop.vocabularies": {"tf": 1}}, "df": 1}, "5": {"docs": {"acmc.omop.vocabularies": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "docs": {"acmc.logging_config.DEFAULT_LOG_FILE": {"tf": 1.4142135623730951}, "acmc.main.logger": {"tf": 1.4142135623730951}, "acmc.main.DEFAULT_WORKSPACE_PATH": {"tf": 1}, "acmc.omop.logger": {"tf": 1.4142135623730951}, "acmc.omop.VOCAB_PATH": {"tf": 1}, "acmc.omop.OMOP_CDM_Version": {"tf": 1.4142135623730951}, "acmc.omop.OMOP_DB_FILENAME": {"tf": 1.4142135623730951}, "acmc.omop.DB_PATH": {"tf": 1}, "acmc.omop.VERSION_FILE": {"tf": 1.4142135623730951}, "acmc.omop.VERSION_PATH": {"tf": 1}, "acmc.omop.EXPORT_FILE": {"tf": 1.4142135623730951}, "acmc.omop.vocabularies": {"tf": 7.211102550927978}, "acmc.omop.omop_vocab_types": {"tf": 3}, "acmc.parse.logger": {"tf": 1.4142135623730951}, "acmc.parse.SUPPORTED_CODE_TYPES": {"tf": 1.4142135623730951}, "acmc.phen.logger": {"tf": 1.4142135623730951}, "acmc.phen.PHEN_DIR": {"tf": 1.4142135623730951}, "acmc.phen.DEFAULT_PHEN_PATH": {"tf": 1}, "acmc.phen.CONCEPTS_DIR": {"tf": 1.4142135623730951}, "acmc.phen.MAP_DIR": {"tf": 1.4142135623730951}, "acmc.phen.CONCEPT_SET_DIR": {"tf": 1.4142135623730951}, "acmc.phen.CSV_PATH": {"tf": 1}, "acmc.phen.OMOP_PATH": {"tf": 1}, "acmc.phen.DEFAULT_PHEN_DIR_LIST": {"tf": 1.4142135623730951}, "acmc.phen.CONFIG_FILE": {"tf": 1.4142135623730951}, "acmc.phen.VOCAB_VERSION_FILE": {"tf": 1.4142135623730951}, "acmc.phen.SEMANTIC_VERSION_TYPES": {"tf": 1.4142135623730951}, "acmc.phen.DEFAULT_VERSION_INC": {"tf": 1.4142135623730951}, "acmc.phen.DEFAULT_GIT_BRANCH": {"tf": 1.4142135623730951}, "acmc.phen.SPLIT_COL_ACTION": {"tf": 1.4142135623730951}, "acmc.phen.CODES_COL_ACTION": {"tf": 1.4142135623730951}, "acmc.phen.DIVIDE_COL_ACTION": {"tf": 1.4142135623730951}, "acmc.phen.COL_ACTIONS": {"tf": 1.4142135623730951}, "acmc.phen.CODE_FILE_TYPES": {"tf": 1.4142135623730951}, "acmc.phen.SOURCE_COL_SUFFIX": {"tf": 1.4142135623730951}, "acmc.phen.TARGET_COL_SUFFIX": {"tf": 1.4142135623730951}, "acmc.phen.CONFIG_SCHEMA": {"tf": 9.327379053088816}, "acmc.trud.logger": {"tf": 1.4142135623730951}, "acmc.trud.FQDN": {"tf": 1.4142135623730951}, "acmc.trud.VOCAB_PATH": {"tf": 1}, "acmc.trud.VERSION_FILE": {"tf": 1.4142135623730951}, "acmc.trud.VERSION_PATH": {"tf": 1}, "acmc.trud.DOWNLOADS_PATH": {"tf": 1}, "acmc.trud.PROCESSED_PATH": {"tf": 1}}, "df": 44, "x": {"2": {"7": {"docs": {"acmc.logging_config.DEFAULT_LOG_FILE": {"tf": 1.4142135623730951}, "acmc.main.DEFAULT_WORKSPACE_PATH": {"tf": 1.4142135623730951}, "acmc.omop.VOCAB_PATH": {"tf": 1.4142135623730951}, "acmc.omop.OMOP_CDM_Version": {"tf": 1.4142135623730951}, "acmc.omop.OMOP_DB_FILENAME": {"tf": 1.4142135623730951}, "acmc.omop.DB_PATH": {"tf": 1.4142135623730951}, "acmc.omop.VERSION_FILE": {"tf": 1.4142135623730951}, "acmc.omop.VERSION_PATH": {"tf": 1.4142135623730951}, "acmc.omop.EXPORT_FILE": {"tf": 1.4142135623730951}, "acmc.omop.vocabularies": {"tf": 9.273618495495704}, "acmc.omop.omop_vocab_types": {"tf": 5.0990195135927845}, "acmc.parse.SUPPORTED_CODE_TYPES": {"tf": 3.4641016151377544}, "acmc.phen.PHEN_DIR": {"tf": 1.4142135623730951}, "acmc.phen.DEFAULT_PHEN_PATH": {"tf": 1.4142135623730951}, "acmc.phen.CONCEPTS_DIR": {"tf": 1.4142135623730951}, "acmc.phen.MAP_DIR": {"tf": 1.4142135623730951}, "acmc.phen.CONCEPT_SET_DIR": {"tf": 1.4142135623730951}, "acmc.phen.CSV_PATH": {"tf": 1.4142135623730951}, "acmc.phen.OMOP_PATH": {"tf": 1.4142135623730951}, "acmc.phen.DEFAULT_PHEN_DIR_LIST": {"tf": 2.449489742783178}, "acmc.phen.CONFIG_FILE": {"tf": 1.4142135623730951}, "acmc.phen.VOCAB_VERSION_FILE": {"tf": 1.4142135623730951}, "acmc.phen.SEMANTIC_VERSION_TYPES": {"tf": 2.449489742783178}, "acmc.phen.DEFAULT_VERSION_INC": {"tf": 1.4142135623730951}, "acmc.phen.DEFAULT_GIT_BRANCH": {"tf": 1.4142135623730951}, "acmc.phen.SPLIT_COL_ACTION": {"tf": 1.4142135623730951}, "acmc.phen.CODES_COL_ACTION": {"tf": 1.4142135623730951}, "acmc.phen.DIVIDE_COL_ACTION": {"tf": 1.4142135623730951}, "acmc.phen.COL_ACTIONS": {"tf": 2.449489742783178}, "acmc.phen.CODE_FILE_TYPES": {"tf": 2.449489742783178}, "acmc.phen.SOURCE_COL_SUFFIX": {"tf": 1.4142135623730951}, "acmc.phen.TARGET_COL_SUFFIX": {"tf": 1.4142135623730951}, "acmc.phen.CONFIG_SCHEMA": {"tf": 12.806248474865697}, "acmc.trud.FQDN": {"tf": 1.4142135623730951}, "acmc.trud.VOCAB_PATH": {"tf": 1.4142135623730951}, "acmc.trud.VERSION_FILE": {"tf": 1.4142135623730951}, "acmc.trud.VERSION_PATH": {"tf": 1.4142135623730951}, "acmc.trud.DOWNLOADS_PATH": {"tf": 1.4142135623730951}, "acmc.trud.PROCESSED_PATH": {"tf": 1.4142135623730951}}, "df": 39}, "docs": {}, "df": 0}, "docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "s": {"docs": {"acmc.phen.CODE_FILE_TYPES": {"tf": 1}}, "df": 1, "x": {"docs": {"acmc.phen.CODE_FILE_TYPES": {"tf": 1}}, "df": 1}}}}, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "c": {"docs": {"acmc.logging_config.DEFAULT_LOG_FILE": {"tf": 1}, "acmc.main.logger": {"tf": 1}, "acmc.omop.logger": {"tf": 1}, "acmc.parse.logger": {"tf": 1}, "acmc.phen.logger": {"tf": 1}, "acmc.phen.SOURCE_COL_SUFFIX": {"tf": 1}, "acmc.phen.TARGET_COL_SUFFIX": {"tf": 1}, "acmc.trud.logger": {"tf": 1}}, "df": 8}}, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"acmc.phen.CONFIG_SCHEMA": {"tf": 1}}, "df": 1}}}}}}, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {"acmc.omop.vocabularies": {"tf": 1}}, "df": 1}}}}, "c": {"docs": {"acmc.omop.vocabularies": {"tf": 1}, "acmc.omop.omop_vocab_types": {"tf": 1.4142135623730951}, "acmc.parse.SUPPORTED_CODE_TYPES": {"tf": 1}, "acmc.phen.CONFIG_SCHEMA": {"tf": 1}}, "df": 4}}, "l": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"acmc.phen.CONFIG_SCHEMA": {"tf": 1}}, "df": 1}}}}}}}, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "g": {"docs": {"acmc.logging_config.DEFAULT_LOG_FILE": {"tf": 1}}, "df": 1, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"acmc.main.logger": {"tf": 1.4142135623730951}, "acmc.omop.logger": {"tf": 1.4142135623730951}, "acmc.parse.logger": {"tf": 1.4142135623730951}, "acmc.phen.logger": {"tf": 1.4142135623730951}, "acmc.trud.logger": {"tf": 1.4142135623730951}}, "df": 5}}}}}, "t": {"docs": {"acmc.main.logger": {"tf": 1}, "acmc.omop.logger": {"tf": 1}, "acmc.parse.logger": {"tf": 1}, "acmc.phen.logger": {"tf": 1}, "acmc.trud.logger": {"tf": 1}}, "df": 5}, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"acmc.phen.CONFIG_SCHEMA": {"tf": 1.4142135623730951}}, "df": 1}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "o": {"docs": {"acmc.main.logger": {"tf": 1}, "acmc.omop.logger": {"tf": 1}, "acmc.parse.logger": {"tf": 1}, "acmc.phen.logger": {"tf": 1}, "acmc.trud.logger": {"tf": 1}}, "df": 5}}}, "d": {"docs": {"acmc.omop.vocabularies": {"tf": 3.3166247903554}, "acmc.phen.CONFIG_SCHEMA": {"tf": 1}}, "df": 2}, "c": {"docs": {}, "df": 0, "d": {"1": {"0": {"docs": {"acmc.omop.omop_vocab_types": {"tf": 1}, "acmc.parse.SUPPORTED_CODE_TYPES": {"tf": 1}, "acmc.phen.CONFIG_SCHEMA": {"tf": 1}}, "df": 3, "c": {"docs": {}, "df": 0, "m": {"docs": {"acmc.omop.vocabularies": {"tf": 1}, "acmc.omop.omop_vocab_types": {"tf": 1}}, "df": 2}}}, "docs": {}, "df": 0}, "9": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "m": {"docs": {"acmc.omop.vocabularies": {"tf": 1}}, "df": 1}}}, "docs": {}, "df": 0}}, "s": {"docs": {}, "df": 0, "d": {"docs": {"acmc.trud.FQDN": {"tf": 1}}, "df": 1}}}, "g": {"docs": {}, "df": 0, "t": {"docs": {"acmc.main.logger": {"tf": 1}, "acmc.omop.logger": {"tf": 1}, "acmc.parse.logger": {"tf": 1}, "acmc.phen.logger": {"tf": 1}, "acmc.trud.logger": {"tf": 1}}, "df": 5}}, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {"acmc.main.DEFAULT_WORKSPACE_PATH": {"tf": 1}, "acmc.omop.VOCAB_PATH": {"tf": 1}, "acmc.omop.DB_PATH": {"tf": 1}, "acmc.omop.VERSION_PATH": {"tf": 1}, "acmc.phen.DEFAULT_PHEN_PATH": {"tf": 1}, "acmc.phen.CSV_PATH": {"tf": 1}, "acmc.phen.OMOP_PATH": {"tf": 1}, "acmc.trud.VOCAB_PATH": {"tf": 1}, "acmc.trud.VERSION_PATH": {"tf": 1}, "acmc.trud.DOWNLOADS_PATH": {"tf": 1}, "acmc.trud.PROCESSED_PATH": {"tf": 1}}, "df": 11}}}}}}}}, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"acmc.omop.vocabularies": {"tf": 1}}, "df": 1}}}}, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {"acmc.phen.PHEN_DIR": {"tf": 1}}, "df": 1, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {"acmc.phen.CONFIG_SCHEMA": {"tf": 1}}, "df": 1}}}}}}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "h": {"docs": {"acmc.phen.SEMANTIC_VERSION_TYPES": {"tf": 1}, "acmc.phen.DEFAULT_VERSION_INC": {"tf": 1}}, "df": 2}}, "h": {"docs": {"acmc.phen.CONFIG_SCHEMA": {"tf": 1}}, "df": 1}}}}, "w": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"acmc.main.DEFAULT_WORKSPACE_PATH": {"tf": 1}}, "df": 1, "/": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {"acmc.phen.DEFAULT_PHEN_PATH": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}, "v": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "b": {"docs": {"acmc.phen.VOCAB_VERSION_FILE": {"tf": 1}}, "df": 1, "/": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "p": {"docs": {"acmc.omop.VOCAB_PATH": {"tf": 1}}, "df": 1, "/": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "p": {"docs": {"acmc.omop.DB_PATH": {"tf": 1}, "acmc.omop.VERSION_PATH": {"tf": 1}}, "df": 2}}}}}}}}}, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "d": {"docs": {"acmc.trud.VOCAB_PATH": {"tf": 1}}, "df": 1, "/": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "d": {"docs": {"acmc.trud.VERSION_PATH": {"tf": 1}}, "df": 1}}}}, "d": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "s": {"docs": {"acmc.trud.DOWNLOADS_PATH": {"tf": 1}}, "df": 1}}}}}}}}}, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"acmc.trud.PROCESSED_PATH": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}}, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"acmc.omop.vocabularies": {"tf": 1}}, "df": 1}}}, "y": {"docs": {"acmc.phen.CONFIG_SCHEMA": {"tf": 1.7320508075688772}}, "df": 1}}}}}}}}}, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"acmc.omop.VERSION_FILE": {"tf": 1}, "acmc.omop.VERSION_PATH": {"tf": 1}, "acmc.omop.vocabularies": {"tf": 1.4142135623730951}, "acmc.phen.VOCAB_VERSION_FILE": {"tf": 1}, "acmc.phen.CONFIG_SCHEMA": {"tf": 1}, "acmc.trud.VERSION_FILE": {"tf": 1}, "acmc.trud.VERSION_PATH": {"tf": 1}}, "df": 7}}}}}}}, "o": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "p": {"docs": {"acmc.omop.OMOP_DB_FILENAME": {"tf": 1}, "acmc.omop.VERSION_FILE": {"tf": 1}, "acmc.omop.EXPORT_FILE": {"tf": 1}, "acmc.phen.CONFIG_SCHEMA": {"tf": 1}}, "df": 4}}}, "h": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {"acmc.omop.vocabularies": {"tf": 1.4142135623730951}}, "df": 1}}}}, "r": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"acmc.omop.vocabularies": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}}}}}, "p": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "s": {"4": {"docs": {"acmc.omop.vocabularies": {"tf": 1}, "acmc.omop.omop_vocab_types": {"tf": 1.4142135623730951}, "acmc.parse.SUPPORTED_CODE_TYPES": {"tf": 1}, "acmc.phen.CONFIG_SCHEMA": {"tf": 1}}, "df": 4}, "docs": {}, "df": 0}}}, "f": {"docs": {"acmc.omop.vocabularies": {"tf": 1}}, "df": 1}}, "s": {"docs": {}, "df": 0, "q": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"acmc.omop.OMOP_DB_FILENAME": {"tf": 1}, "acmc.omop.DB_PATH": {"tf": 1}, "acmc.omop.EXPORT_FILE": {"tf": 1}}, "df": 3}}}}}, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"acmc.omop.vocabularies": {"tf": 1}, "acmc.phen.SOURCE_COL_SUFFIX": {"tf": 1}}, "df": 2}}}}}, "n": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"acmc.omop.vocabularies": {"tf": 1}, "acmc.omop.omop_vocab_types": {"tf": 1.4142135623730951}, "acmc.parse.SUPPORTED_CODE_TYPES": {"tf": 1}, "acmc.phen.CONFIG_SCHEMA": {"tf": 1}}, "df": 4}}}}}, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {"acmc.omop.vocabularies": {"tf": 1}}, "df": 1}}}}}}}, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {"acmc.phen.SPLIT_COL_ACTION": {"tf": 1}, "acmc.phen.COL_ACTIONS": {"tf": 1}}, "df": 2}}}}, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"acmc.omop.vocabularies": {"tf": 1}}, "df": 1}}}}}, "t": {"docs": {}, "df": 0, "s": {"docs": {"acmc.phen.CONCEPT_SET_DIR": {"tf": 1}, "acmc.phen.DEFAULT_PHEN_DIR_LIST": {"tf": 1}, "acmc.phen.CONFIG_SCHEMA": {"tf": 1}}, "df": 3, "/": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "v": {"docs": {"acmc.phen.CSV_PATH": {"tf": 1}}, "df": 1}}}, "o": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "p": {"docs": {"acmc.phen.OMOP_PATH": {"tf": 1}}, "df": 1}}}}}}}}, "c": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {"acmc.phen.CONFIG_SCHEMA": {"tf": 2.6457513110645907}}, "df": 1}}}}}, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"acmc.phen.CONFIG_SCHEMA": {"tf": 3}}, "df": 1}}}}}}, "y": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "l": {"docs": {"acmc.omop.VERSION_FILE": {"tf": 1}, "acmc.omop.VERSION_PATH": {"tf": 1}, "acmc.phen.CONFIG_FILE": {"tf": 1}, "acmc.phen.VOCAB_VERSION_FILE": {"tf": 1}, "acmc.trud.VERSION_FILE": {"tf": 1}, "acmc.trud.VERSION_PATH": {"tf": 1}}, "df": 6}}}, "e": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {"acmc.omop.EXPORT_FILE": {"tf": 1}}, "df": 1}}}}}, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {"acmc.omop.vocabularies": {"tf": 1}}, "df": 1}}}}}}, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "l": {"docs": {"acmc.omop.vocabularies": {"tf": 1}}, "df": 1}}, "k": {"docs": {"acmc.omop.vocabularies": {"tf": 1}, "acmc.trud.FQDN": {"tf": 1}}, "df": 2}}, "h": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "s": {"docs": {"acmc.phen.CONFIG_SCHEMA": {"tf": 1}}, "df": 1, ":": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {"acmc.omop.vocabularies": {"tf": 1}}, "df": 1}}}}}}}}}}}}}, "e": {"docs": {}, "df": 0, "s": {"docs": {"acmc.omop.vocabularies": {"tf": 1}}, "df": 1}}}, "c": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "m": {"docs": {"acmc.omop.vocabularies": {"tf": 1}}, "df": 1}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "y": {"docs": {"acmc.omop.vocabularies": {"tf": 1}, "acmc.phen.CONFIG_SCHEMA": {"tf": 1}}, "df": 2}}}}}}}, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "d": {"docs": {"acmc.omop.omop_vocab_types": {"tf": 1}}, "df": 1}}}, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {"acmc.phen.CONCEPT_SET_DIR": {"tf": 1}, "acmc.phen.CSV_PATH": {"tf": 1}, "acmc.phen.OMOP_PATH": {"tf": 1}, "acmc.phen.DEFAULT_PHEN_DIR_LIST": {"tf": 1}, "acmc.phen.CONFIG_SCHEMA": {"tf": 1}}, "df": 5, "s": {"docs": {"acmc.phen.CONCEPTS_DIR": {"tf": 1}, "acmc.phen.DEFAULT_PHEN_DIR_LIST": {"tf": 1}}, "df": 2}}}}}, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "g": {"docs": {"acmc.phen.CONFIG_FILE": {"tf": 1}}, "df": 1}}}}, "l": {"docs": {"acmc.phen.SPLIT_COL_ACTION": {"tf": 1}, "acmc.phen.CODES_COL_ACTION": {"tf": 1}, "acmc.phen.DIVIDE_COL_ACTION": {"tf": 1}, "acmc.phen.COL_ACTIONS": {"tf": 1.7320508075688772}, "acmc.phen.CONFIG_SCHEMA": {"tf": 1}}, "df": 5, "u": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"acmc.phen.CONFIG_SCHEMA": {"tf": 1}}, "df": 1}}}}}, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"acmc.phen.CODES_COL_ACTION": {"tf": 1}, "acmc.phen.COL_ACTIONS": {"tf": 1}}, "df": 2}}}}, "s": {"docs": {}, "df": 0, "v": {"docs": {"acmc.phen.CODE_FILE_TYPES": {"tf": 1}}, "df": 1}}}, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"acmc.omop.vocabularies": {"tf": 3.3166247903554}, "acmc.phen.CONFIG_SCHEMA": {"tf": 1.4142135623730951}}, "df": 2}}}, "h": {"docs": {}, "df": 0, "s": {"docs": {"acmc.omop.vocabularies": {"tf": 1.4142135623730951}, "acmc.trud.FQDN": {"tf": 1}}, "df": 2}}, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {"acmc.omop.omop_vocab_types": {"tf": 1.7320508075688772}}, "df": 1}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"2": {"docs": {"acmc.omop.omop_vocab_types": {"tf": 1}, "acmc.parse.SUPPORTED_CODE_TYPES": {"tf": 1}, "acmc.phen.CONFIG_SCHEMA": {"tf": 1}}, "df": 3}, "3": {"docs": {"acmc.omop.omop_vocab_types": {"tf": 1}, "acmc.parse.SUPPORTED_CODE_TYPES": {"tf": 1}, "acmc.phen.CONFIG_SCHEMA": {"tf": 1}}, "df": 3}, "docs": {"acmc.omop.omop_vocab_types": {"tf": 1}}, "df": 1, "v": {"2": {"docs": {"acmc.omop.vocabularies": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}}}, "q": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"acmc.phen.CONFIG_SCHEMA": {"tf": 3.4641016151377544}}, "df": 1}}}}}}, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "x": {"docs": {"acmc.phen.CONFIG_SCHEMA": {"tf": 1.4142135623730951}}, "df": 1}}}, "f": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"acmc.phen.CONFIG_SCHEMA": {"tf": 1}}, "df": 1}}}}}}}}}, "d": {"docs": {"acmc.phen.CONFIG_SCHEMA": {"tf": 1.7320508075688772}}, "df": 1, "m": {"docs": {}, "df": 0, "+": {"docs": {}, "df": 0, "d": {"docs": {"acmc.omop.vocabularies": {"tf": 1}}, "df": 1}}}, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {"acmc.phen.DIVIDE_COL_ACTION": {"tf": 1}, "acmc.phen.COL_ACTIONS": {"tf": 1}, "acmc.phen.CONFIG_SCHEMA": {"tf": 1}}, "df": 3}}}}, "c": {"docs": {}, "df": 0, "t": {"docs": {"acmc.phen.CONFIG_SCHEMA": {"tf": 2.6457513110645907}}, "df": 1}}, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"acmc.trud.FQDN": {"tf": 1}}, "df": 1}}}}}}}, "b": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "k": {"docs": {"acmc.omop.vocabularies": {"tf": 1}}, "df": 1}}}}}}}, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"acmc.omop.vocabularies": {"tf": 1}}, "df": 1}}}}, "r": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {"acmc.phen.TARGET_COL_SUFFIX": {"tf": 1}}, "df": 1}}}}}, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {"acmc.phen.CONFIG_SCHEMA": {"tf": 4.242640687119285}}, "df": 1}}}, "r": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {"acmc.phen.CONFIG_SCHEMA": {"tf": 3.3166247903554}}, "df": 1}, "d": {"docs": {"acmc.trud.VERSION_FILE": {"tf": 1}}, "df": 1}}}}, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"acmc.omop.omop_vocab_types": {"tf": 1}}, "df": 1}, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {"acmc.phen.CONFIG_SCHEMA": {"tf": 1}}, "df": 1}}}}}}}, "a": {"docs": {}, "df": 0, "p": {"docs": {"acmc.phen.MAP_DIR": {"tf": 1}, "acmc.phen.DEFAULT_PHEN_DIR_LIST": {"tf": 1}, "acmc.phen.CONFIG_SCHEMA": {"tf": 1}}, "df": 3}, "j": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"acmc.phen.SEMANTIC_VERSION_TYPES": {"tf": 1}}, "df": 1}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {"acmc.phen.DEFAULT_GIT_BRANCH": {"tf": 1}}, "df": 1}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"acmc.phen.SEMANTIC_VERSION_TYPES": {"tf": 1}}, "df": 1}}}}}, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"acmc.phen.CONFIG_SCHEMA": {"tf": 1}}, "df": 1}}}, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"acmc.phen.CONFIG_SCHEMA": {"tf": 1}}, "df": 1}}}}}}}, "signature": {"root": {"2": {"0": {"docs": {"acmc.logging_config.setup_logger": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "3": {"9": {"docs": {"acmc.parse.CodeTypeParser.__init__": {"tf": 1.4142135623730951}, "acmc.phen.read_table_file": {"tf": 1.4142135623730951}, "acmc.phen.generate_version_tag": {"tf": 1.4142135623730951}, "acmc.phen.publish": {"tf": 1.4142135623730951}}, "df": 4}, "docs": {}, "df": 0}, "docs": {"acmc.logging_config.setup_logger": {"tf": 4.47213595499958}, "acmc.logging_config.set_log_level": {"tf": 3.7416573867739413}, "acmc.main.trud_install": {"tf": 4.242640687119285}, "acmc.main.omop_install": {"tf": 4.242640687119285}, "acmc.main.omop_clear": {"tf": 4.242640687119285}, "acmc.main.omop_delete": {"tf": 4.242640687119285}, "acmc.main.phen_init": {"tf": 4.242640687119285}, "acmc.main.phen_fork": {"tf": 4.242640687119285}, "acmc.main.phen_validate": {"tf": 4.242640687119285}, "acmc.main.phen_map": {"tf": 4.242640687119285}, "acmc.main.phen_export": {"tf": 4.242640687119285}, "acmc.main.phen_publish": {"tf": 4.242640687119285}, "acmc.main.phen_copy": {"tf": 4.242640687119285}, "acmc.main.phen_diff": {"tf": 4.242640687119285}, "acmc.main.main": {"tf": 2.6457513110645907}, "acmc.omop.install": {"tf": 4.69041575982343}, "acmc.omop.write_version_file": {"tf": 3.7416573867739413}, "acmc.omop.clear": {"tf": 4.242640687119285}, "acmc.omop.delete": {"tf": 4.242640687119285}, "acmc.omop.table_exists": {"tf": 5.291502622129181}, "acmc.omop.vocab_exists": {"tf": 5.291502622129181}, "acmc.omop.concept_set_exist": {"tf": 5.291502622129181}, "acmc.omop.export": {"tf": 7.483314773547883}, "acmc.parse.CodesError.__init__": {"tf": 6.324555320336759}, "acmc.parse.InvalidCodesException.__init__": {"tf": 2.8284271247461903}, "acmc.parse.Proto.__init__": {"tf": 5.916079783099616}, "acmc.parse.Proto.raise_exception": {"tf": 4.242640687119285}, "acmc.parse.Proto.in_database": {"tf": 8.717797887081348}, "acmc.parse.Proto.process": {"tf": 8.306623862918075}, "acmc.parse.Proto.verify": {"tf": 6.48074069840786}, "acmc.parse.CodeTypeParser.__init__": {"tf": 5.5677643628300215}, "acmc.phen.PhenValidationException.__init__": {"tf": 4}, "acmc.phen.construct_git_url": {"tf": 3.7416573867739413}, "acmc.phen.create_empty_git_dir": {"tf": 4.242640687119285}, "acmc.phen.check_delete_dir": {"tf": 5.291502622129181}, "acmc.phen.fork": {"tf": 6.48074069840786}, "acmc.phen.init": {"tf": 4.69041575982343}, "acmc.phen.validate": {"tf": 3.7416573867739413}, "acmc.phen.read_table_file": {"tf": 5.830951894845301}, "acmc.phen.process_actions": {"tf": 7.0710678118654755}, "acmc.phen.preprocess_source_concepts": {"tf": 8.54400374531753}, "acmc.phen.get_code_type_from_col_name": {"tf": 3.7416573867739413}, "acmc.phen.translate_codes": {"tf": 7.681145747868608}, "acmc.phen.sql_row_exist": {"tf": 6.6332495807108}, "acmc.phen.write_code_errors": {"tf": 5.0990195135927845}, "acmc.phen.write_vocab_version": {"tf": 4.242640687119285}, "acmc.phen.map": {"tf": 4.69041575982343}, "acmc.phen.map_target_code_type": {"tf": 5.830951894845301}, "acmc.phen.generate_version_tag": {"tf": 7.810249675906654}, "acmc.phen.publish": {"tf": 6.782329983125268}, "acmc.phen.export": {"tf": 4.69041575982343}, "acmc.phen.copy": {"tf": 5.477225575051661}, "acmc.phen.extract_concepts": {"tf": 5.385164807134504}, "acmc.phen.extract_clean_deepdiff_keys": {"tf": 5.385164807134504}, "acmc.phen.diff_config": {"tf": 4.898979485566356}, "acmc.phen.diff_map_files": {"tf": 5.656854249492381}, "acmc.phen.diff_phen": {"tf": 7.937253933193772}, "acmc.phen.diff": {"tf": 6.164414002968976}, "acmc.trud.get_releases": {"tf": 5.656854249492381}, "acmc.trud.download_release_file": {"tf": 6.928203230275509}, "acmc.trud.validate_download_hash": {"tf": 4.69041575982343}, "acmc.trud.unzip_download": {"tf": 3.7416573867739413}, "acmc.trud.extract_icd10": {"tf": 2.6457513110645907}, "acmc.trud.extract_opsc4": {"tf": 2.6457513110645907}, "acmc.trud.extract_nhs_data_migrations": {"tf": 2.6457513110645907}, "acmc.trud.extract_nhs_read_browser": {"tf": 2.6457513110645907}, "acmc.trud.create_map_directories": {"tf": 2.6457513110645907}, "acmc.trud.install": {"tf": 2.6457513110645907}, "acmc.util.QuotedDumper.increase_indent": {"tf": 5.0990195135927845}}, "df": 69, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "g": {"docs": {"acmc.logging_config.setup_logger": {"tf": 1}, "acmc.logging_config.set_log_level": {"tf": 1}}, "df": 2}}, "e": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {"acmc.logging_config.setup_logger": {"tf": 1}, "acmc.logging_config.set_log_level": {"tf": 1}}, "df": 2}}}}, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"acmc.parse.Proto.process": {"tf": 1}, "acmc.phen.preprocess_source_concepts": {"tf": 1}, "acmc.phen.write_code_errors": {"tf": 1}, "acmc.trud.get_releases": {"tf": 1}}, "df": 4}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"acmc.trud.get_releases": {"tf": 1}}, "df": 1}}}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"acmc.logging_config.setup_logger": {"tf": 1}, "acmc.logging_config.set_log_level": {"tf": 1}}, "df": 2}, "c": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"acmc.phen.generate_version_tag": {"tf": 1}, "acmc.phen.publish": {"tf": 1}}, "df": 2}}}}}}}, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"acmc.util.QuotedDumper.increase_indent": {"tf": 1}}, "df": 1}}}}}}}}}, "d": {"docs": {"acmc.omop.vocab_exists": {"tf": 1}, "acmc.trud.get_releases": {"tf": 1}, "acmc.trud.download_release_file": {"tf": 1}}, "df": 3}, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "m": {"docs": {"acmc.trud.get_releases": {"tf": 1}, "acmc.trud.download_release_file": {"tf": 1}, "acmc.trud.validate_download_hash": {"tf": 1}}, "df": 3}}}}, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "s": {"docs": {"acmc.main.trud_install": {"tf": 1}, "acmc.main.omop_install": {"tf": 1}, "acmc.main.omop_clear": {"tf": 1}, "acmc.main.omop_delete": {"tf": 1}, "acmc.main.phen_init": {"tf": 1}, "acmc.main.phen_fork": {"tf": 1}, "acmc.main.phen_validate": {"tf": 1}, "acmc.main.phen_map": {"tf": 1}, "acmc.main.phen_export": {"tf": 1}, "acmc.main.phen_publish": {"tf": 1}, "acmc.main.phen_copy": {"tf": 1}, "acmc.main.phen_diff": {"tf": 1}}, "df": 12}, "p": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"acmc.main.trud_install": {"tf": 1}, "acmc.main.omop_install": {"tf": 1}, "acmc.main.omop_clear": {"tf": 1}, "acmc.main.omop_delete": {"tf": 1}, "acmc.main.phen_init": {"tf": 1}, "acmc.main.phen_fork": {"tf": 1}, "acmc.main.phen_validate": {"tf": 1}, "acmc.main.phen_map": {"tf": 1}, "acmc.main.phen_export": {"tf": 1}, "acmc.main.phen_publish": {"tf": 1}, "acmc.main.phen_copy": {"tf": 1}, "acmc.main.phen_diff": {"tf": 1}}, "df": 12}}}}}}}, "n": {"docs": {}, "df": 0, "y": {"docs": {"acmc.phen.extract_clean_deepdiff_keys": {"tf": 1}}, "df": 1}}, "p": {"docs": {}, "df": 0, "i": {"docs": {"acmc.trud.get_releases": {"tf": 1}}, "df": 1}}}, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"acmc.omop.table_exists": {"tf": 1}, "acmc.omop.concept_set_exist": {"tf": 1}, "acmc.parse.Proto.__init__": {"tf": 1}, "acmc.phen.get_code_type_from_col_name": {"tf": 1}, "acmc.phen.translate_codes": {"tf": 1}}, "df": 5, "s": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"acmc.main.trud_install": {"tf": 1}, "acmc.main.omop_install": {"tf": 1}, "acmc.main.omop_clear": {"tf": 1}, "acmc.main.omop_delete": {"tf": 1}, "acmc.main.phen_init": {"tf": 1}, "acmc.main.phen_fork": {"tf": 1}, "acmc.main.phen_validate": {"tf": 1}, "acmc.main.phen_map": {"tf": 1}, "acmc.main.phen_export": {"tf": 1}, "acmc.main.phen_publish": {"tf": 1}, "acmc.main.phen_copy": {"tf": 1}, "acmc.main.phen_diff": {"tf": 1}}, "df": 12}}}}}}}}, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {"acmc.parse.CodesError.__init__": {"tf": 2}, "acmc.parse.Proto.__init__": {"tf": 1}, "acmc.phen.PhenValidationException.__init__": {"tf": 1}}, "df": 3}}}, "e": {"docs": {}, "df": 0, "w": {"docs": {"acmc.phen.fork": {"tf": 1}, "acmc.phen.diff_config": {"tf": 1}, "acmc.phen.diff_map_files": {"tf": 1}, "acmc.phen.diff_phen": {"tf": 1.4142135623730951}}, "df": 4}}}, "o": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "p": {"docs": {"acmc.omop.install": {"tf": 1}, "acmc.omop.export": {"tf": 1}}, "df": 2}}}, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"acmc.parse.Proto.__init__": {"tf": 1}}, "df": 1}}}}}}}, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {"acmc.phen.fork": {"tf": 1}}, "df": 1}}}}, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"acmc.trud.download_release_file": {"tf": 1}}, "df": 1}}}}}}, "l": {"docs": {}, "df": 0, "d": {"docs": {"acmc.phen.diff_config": {"tf": 1}, "acmc.phen.diff_map_files": {"tf": 1}, "acmc.phen.diff_phen": {"tf": 1.4142135623730951}, "acmc.phen.diff": {"tf": 1.4142135623730951}}, "df": 4}}}, "z": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "p": {"docs": {"acmc.omop.install": {"tf": 1}}, "df": 1}}}, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"acmc.omop.install": {"tf": 1}, "acmc.parse.CodesError.__init__": {"tf": 1}, "acmc.parse.Proto.process": {"tf": 1}, "acmc.parse.Proto.verify": {"tf": 1}, "acmc.phen.preprocess_source_concepts": {"tf": 1}, "acmc.trud.download_release_file": {"tf": 1}, "acmc.trud.validate_download_hash": {"tf": 1}, "acmc.trud.unzip_download": {"tf": 1}}, "df": 8}}}, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"acmc.parse.Proto.in_database": {"tf": 1.7320508075688772}, "acmc.parse.Proto.process": {"tf": 1.4142135623730951}, "acmc.parse.Proto.verify": {"tf": 1}, "acmc.phen.process_actions": {"tf": 1.4142135623730951}, "acmc.phen.preprocess_source_concepts": {"tf": 1.4142135623730951}, "acmc.phen.translate_codes": {"tf": 1.4142135623730951}}, "df": 6}}}}, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"acmc.phen.generate_version_tag": {"tf": 1}, "acmc.trud.get_releases": {"tf": 1}, "acmc.util.QuotedDumper.increase_indent": {"tf": 1.4142135623730951}}, "df": 3}}}}, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "w": {"docs": {"acmc.util.QuotedDumper.increase_indent": {"tf": 1}}, "df": 1}}}}, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {"acmc.omop.install": {"tf": 1.4142135623730951}, "acmc.omop.write_version_file": {"tf": 1}, "acmc.omop.table_exists": {"tf": 1}, "acmc.omop.vocab_exists": {"tf": 1}, "acmc.omop.concept_set_exist": {"tf": 1}, "acmc.omop.export": {"tf": 1}, "acmc.parse.Proto.__init__": {"tf": 1}, "acmc.parse.Proto.in_database": {"tf": 1}, "acmc.phen.construct_git_url": {"tf": 1}, "acmc.phen.check_delete_dir": {"tf": 1}, "acmc.phen.fork": {"tf": 2}, "acmc.phen.init": {"tf": 1.4142135623730951}, "acmc.phen.validate": {"tf": 1}, "acmc.phen.read_table_file": {"tf": 1}, "acmc.phen.get_code_type_from_col_name": {"tf": 1}, "acmc.phen.translate_codes": {"tf": 1.4142135623730951}, "acmc.phen.sql_row_exist": {"tf": 1.7320508075688772}, "acmc.phen.map": {"tf": 1.4142135623730951}, "acmc.phen.map_target_code_type": {"tf": 1}, "acmc.phen.generate_version_tag": {"tf": 1.4142135623730951}, "acmc.phen.publish": {"tf": 2}, "acmc.phen.export": {"tf": 1.4142135623730951}, "acmc.phen.copy": {"tf": 1.7320508075688772}, "acmc.phen.extract_concepts": {"tf": 1}, "acmc.phen.extract_clean_deepdiff_keys": {"tf": 1}, "acmc.phen.diff_config": {"tf": 1}, "acmc.phen.diff_map_files": {"tf": 1}, "acmc.phen.diff_phen": {"tf": 1.4142135623730951}, "acmc.phen.diff": {"tf": 2}, "acmc.trud.get_releases": {"tf": 1.4142135623730951}, "acmc.trud.download_release_file": {"tf": 1.7320508075688772}, "acmc.trud.validate_download_hash": {"tf": 1.4142135623730951}, "acmc.trud.unzip_download": {"tf": 1}}, "df": 33}}, "q": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"3": {"docs": {"acmc.omop.table_exists": {"tf": 1}, "acmc.omop.vocab_exists": {"tf": 1}, "acmc.omop.concept_set_exist": {"tf": 1}, "acmc.phen.sql_row_exist": {"tf": 1}}, "df": 4}, "docs": {}, "df": 0}}}}}, "e": {"docs": {}, "df": 0, "t": {"docs": {"acmc.omop.concept_set_exist": {"tf": 1}, "acmc.phen.process_actions": {"tf": 1}, "acmc.phen.preprocess_source_concepts": {"tf": 1}, "acmc.phen.extract_concepts": {"tf": 1}, "acmc.phen.extract_clean_deepdiff_keys": {"tf": 1}}, "df": 5}, "l": {"docs": {}, "df": 0, "f": {"docs": {"acmc.parse.Proto.raise_exception": {"tf": 1}, "acmc.parse.Proto.in_database": {"tf": 1}, "acmc.parse.Proto.process": {"tf": 1}, "acmc.parse.Proto.verify": {"tf": 1}, "acmc.util.QuotedDumper.increase_indent": {"tf": 1}}, "df": 5}}}, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {"acmc.phen.read_table_file": {"tf": 1}}, "df": 1}}}}, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"acmc.phen.translate_codes": {"tf": 1}}, "df": 1}}}}}}, "v": {"docs": {"acmc.phen.generate_version_tag": {"tf": 1}}, "df": 1, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"acmc.omop.install": {"tf": 1}, "acmc.omop.write_version_file": {"tf": 1}, "acmc.omop.export": {"tf": 1}, "acmc.phen.fork": {"tf": 1}, "acmc.phen.export": {"tf": 1}, "acmc.phen.copy": {"tf": 1}, "acmc.phen.diff_phen": {"tf": 1.4142135623730951}, "acmc.phen.diff": {"tf": 1.4142135623730951}}, "df": 8}}}}}}, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "b": {"docs": {"acmc.omop.vocab_exists": {"tf": 1}}, "df": 1, "/": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"acmc.parse.CodeTypeParser.__init__": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}}}}}}, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"acmc.phen.PhenValidationException.__init__": {"tf": 1}}, "df": 1}}}}}}}, "u": {"docs": {}, "df": 0, "e": {"docs": {"acmc.phen.sql_row_exist": {"tf": 1}}, "df": 1}}}}}, "d": {"docs": {}, "df": 0, "b": {"docs": {"acmc.omop.clear": {"tf": 1}, "acmc.omop.delete": {"tf": 1}, "acmc.parse.Proto.in_database": {"tf": 1}}, "df": 3}, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"acmc.omop.export": {"tf": 1}, "acmc.phen.process_actions": {"tf": 1}, "acmc.phen.preprocess_source_concepts": {"tf": 1}, "acmc.phen.map_target_code_type": {"tf": 1}, "acmc.phen.extract_concepts": {"tf": 1.4142135623730951}, "acmc.phen.extract_clean_deepdiff_keys": {"tf": 1}, "acmc.phen.diff_config": {"tf": 1.4142135623730951}, "acmc.trud.download_release_file": {"tf": 1}}, "df": 8}}, "r": {"docs": {"acmc.parse.CodeTypeParser.__init__": {"tf": 1}, "acmc.phen.fork": {"tf": 1}, "acmc.phen.init": {"tf": 1}, "acmc.phen.validate": {"tf": 1}, "acmc.phen.map": {"tf": 1}, "acmc.phen.publish": {"tf": 1}, "acmc.phen.export": {"tf": 1}, "acmc.phen.copy": {"tf": 1.4142135623730951}, "acmc.phen.diff": {"tf": 1.4142135623730951}}, "df": 9}, "f": {"docs": {}, "df": 0, "f": {"docs": {"acmc.phen.extract_clean_deepdiff_keys": {"tf": 1}}, "df": 1}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {"acmc.phen.extract_concepts": {"tf": 1}}, "df": 1, "f": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"acmc.parse.Proto.in_database": {"tf": 1.7320508075688772}, "acmc.parse.Proto.process": {"tf": 1.4142135623730951}, "acmc.parse.Proto.verify": {"tf": 1}, "acmc.phen.process_actions": {"tf": 1.4142135623730951}, "acmc.phen.preprocess_source_concepts": {"tf": 1.4142135623730951}, "acmc.phen.translate_codes": {"tf": 1.4142135623730951}}, "df": 6}}}}}}}}, "f": {"docs": {"acmc.phen.process_actions": {"tf": 1}, "acmc.phen.preprocess_source_concepts": {"tf": 1}, "acmc.phen.translate_codes": {"tf": 1}}, "df": 3}, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"acmc.trud.validate_download_hash": {"tf": 1}, "acmc.trud.unzip_download": {"tf": 1}}, "df": 2}}}}}}}}}}}, "p": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {"acmc.omop.clear": {"tf": 1.4142135623730951}, "acmc.omop.delete": {"tf": 1.4142135623730951}, "acmc.omop.export": {"tf": 2.23606797749979}, "acmc.parse.Proto.__init__": {"tf": 1.4142135623730951}, "acmc.parse.Proto.process": {"tf": 1}, "acmc.parse.Proto.verify": {"tf": 1}, "acmc.parse.CodeTypeParser.__init__": {"tf": 1}, "acmc.phen.create_empty_git_dir": {"tf": 1.4142135623730951}, "acmc.phen.check_delete_dir": {"tf": 1.4142135623730951}, "acmc.phen.read_table_file": {"tf": 1.4142135623730951}, "acmc.phen.preprocess_source_concepts": {"tf": 1.4142135623730951}, "acmc.phen.write_code_errors": {"tf": 1.4142135623730951}, "acmc.phen.write_vocab_version": {"tf": 1.4142135623730951}, "acmc.phen.map_target_code_type": {"tf": 1.4142135623730951}, "acmc.phen.diff_map_files": {"tf": 2}, "acmc.phen.diff_phen": {"tf": 2.449489742783178}, "acmc.trud.download_release_file": {"tf": 1}}, "df": 17, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "b": {"docs": {"acmc.omop.clear": {"tf": 1}, "acmc.omop.delete": {"tf": 1}, "acmc.omop.export": {"tf": 1.7320508075688772}, "acmc.parse.Proto.__init__": {"tf": 1}, "acmc.parse.Proto.process": {"tf": 1}, "acmc.parse.Proto.verify": {"tf": 1}, "acmc.parse.CodeTypeParser.__init__": {"tf": 1}, "acmc.phen.create_empty_git_dir": {"tf": 1}, "acmc.phen.check_delete_dir": {"tf": 1}, "acmc.phen.read_table_file": {"tf": 1}, "acmc.phen.preprocess_source_concepts": {"tf": 1}, "acmc.phen.write_code_errors": {"tf": 1}, "acmc.phen.write_vocab_version": {"tf": 1}, "acmc.phen.map_target_code_type": {"tf": 1}, "acmc.phen.diff_map_files": {"tf": 1.4142135623730951}, "acmc.phen.diff_phen": {"tf": 1.7320508075688772}, "acmc.trud.download_release_file": {"tf": 1}}, "df": 17}}}}, "c": {"docs": {}, "df": 0, "h": {"docs": {"acmc.phen.generate_version_tag": {"tf": 1}, "acmc.phen.publish": {"tf": 1}}, "df": 2}}}, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {"acmc.parse.Proto.in_database": {"tf": 1.7320508075688772}, "acmc.parse.Proto.process": {"tf": 1.4142135623730951}, "acmc.parse.Proto.verify": {"tf": 1}, "acmc.phen.process_actions": {"tf": 1.4142135623730951}, "acmc.phen.preprocess_source_concepts": {"tf": 1.4142135623730951}, "acmc.phen.translate_codes": {"tf": 1.4142135623730951}}, "df": 6}}}}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"acmc.parse.CodeTypeParser.__init__": {"tf": 1}}, "df": 1}}}}}}}, "e": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "x": {"docs": {"acmc.phen.generate_version_tag": {"tf": 1}, "acmc.trud.download_release_file": {"tf": 1}}, "df": 2}}}}}, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {"acmc.parse.CodeTypeParser.__init__": {"tf": 1}}, "df": 1}}}}}}}}, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {"acmc.phen.fork": {"tf": 1}, "acmc.phen.init": {"tf": 1}, "acmc.phen.validate": {"tf": 1}, "acmc.phen.write_vocab_version": {"tf": 1}, "acmc.phen.map": {"tf": 1}, "acmc.phen.map_target_code_type": {"tf": 1}, "acmc.phen.publish": {"tf": 1}, "acmc.phen.export": {"tf": 1}, "acmc.phen.copy": {"tf": 1}, "acmc.phen.diff_phen": {"tf": 1.4142135623730951}, "acmc.phen.diff": {"tf": 1.4142135623730951}}, "df": 11, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {"acmc.phen.map_target_code_type": {"tf": 1}}, "df": 1}}}}}}}}}, "c": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"acmc.omop.table_exists": {"tf": 1.4142135623730951}, "acmc.omop.vocab_exists": {"tf": 1.4142135623730951}, "acmc.omop.concept_set_exist": {"tf": 1.4142135623730951}}, "df": 3}}}}}, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {"acmc.omop.concept_set_exist": {"tf": 1}, "acmc.phen.process_actions": {"tf": 1}, "acmc.phen.preprocess_source_concepts": {"tf": 1}, "acmc.phen.translate_codes": {"tf": 1}}, "df": 4}}}}, "n": {"docs": {"acmc.phen.sql_row_exist": {"tf": 1}}, "df": 1, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"acmc.phen.sql_row_exist": {"tf": 1}}, "df": 1}}}}}}}, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "g": {"docs": {"acmc.phen.extract_concepts": {"tf": 1}, "acmc.phen.diff_config": {"tf": 1.4142135623730951}}, "df": 2}}}}, "d": {"docs": {}, "df": 0, "e": {"docs": {"acmc.parse.CodesError.__init__": {"tf": 1}, "acmc.phen.preprocess_source_concepts": {"tf": 1}, "acmc.phen.translate_codes": {"tf": 1}, "acmc.phen.write_code_errors": {"tf": 1.4142135623730951}, "acmc.phen.map": {"tf": 1}, "acmc.phen.map_target_code_type": {"tf": 1}}, "df": 6, "s": {"docs": {"acmc.parse.CodesError.__init__": {"tf": 1.4142135623730951}, "acmc.parse.Proto.__init__": {"tf": 1}, "acmc.parse.Proto.in_database": {"tf": 1}, "acmc.parse.Proto.process": {"tf": 1.4142135623730951}, "acmc.parse.Proto.verify": {"tf": 1.4142135623730951}}, "df": 5}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {"acmc.parse.Proto.in_database": {"tf": 1.7320508075688772}, "acmc.parse.Proto.process": {"tf": 1.4142135623730951}, "acmc.parse.Proto.verify": {"tf": 1}, "acmc.phen.process_actions": {"tf": 1.4142135623730951}, "acmc.phen.preprocess_source_concepts": {"tf": 1.4142135623730951}, "acmc.phen.translate_codes": {"tf": 1.4142135623730951}}, "df": 6}}, "l": {"docs": {"acmc.parse.Proto.in_database": {"tf": 1}, "acmc.phen.get_code_type_from_col_name": {"tf": 1}}, "df": 2, "u": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "n": {"docs": {"acmc.phen.sql_row_exist": {"tf": 1}}, "df": 1}}}}}}, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"acmc.omop.table_exists": {"tf": 1}, "acmc.phen.sql_row_exist": {"tf": 1}}, "df": 2}}}, "r": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {"acmc.phen.translate_codes": {"tf": 1}, "acmc.phen.map": {"tf": 1}, "acmc.phen.map_target_code_type": {"tf": 1}, "acmc.phen.copy": {"tf": 1}}, "df": 4}}}}}, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {"acmc.parse.CodesError.__init__": {"tf": 1}, "acmc.phen.translate_codes": {"tf": 1}, "acmc.phen.map": {"tf": 1}, "acmc.phen.map_target_code_type": {"tf": 1}, "acmc.phen.extract_clean_deepdiff_keys": {"tf": 1}}, "df": 5}}}, "r": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "d": {"docs": {"acmc.parse.Proto.__init__": {"tf": 1}, "acmc.parse.CodeTypeParser.__init__": {"tf": 1}}, "df": 2}}}, "u": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"acmc.parse.Proto.process": {"tf": 1}, "acmc.phen.preprocess_source_concepts": {"tf": 1}, "acmc.phen.extract_concepts": {"tf": 1}}, "df": 3}}}}}, "b": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {"acmc.omop.table_exists": {"tf": 1}, "acmc.omop.vocab_exists": {"tf": 1}, "acmc.omop.concept_set_exist": {"tf": 1}, "acmc.phen.check_delete_dir": {"tf": 1}, "acmc.phen.sql_row_exist": {"tf": 1}, "acmc.phen.generate_version_tag": {"tf": 1}}, "df": 6}}}, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"acmc.phen.generate_version_tag": {"tf": 1}}, "df": 1}}}}, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "p": {"docs": {"acmc.omop.export": {"tf": 1}, "acmc.phen.diff_map_files": {"tf": 1.4142135623730951}}, "df": 2}, "s": {"docs": {}, "df": 0, "k": {"docs": {"acmc.parse.CodesError.__init__": {"tf": 1}}, "df": 1}}}, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {"acmc.omop.export": {"tf": 1}}, "df": 1}}}}}}, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {"acmc.parse.CodesError.__init__": {"tf": 1}, "acmc.phen.PhenValidationException.__init__": {"tf": 1}}, "df": 2}}}}}}, "s": {"docs": {}, "df": 0, "g": {"docs": {"acmc.phen.check_delete_dir": {"tf": 1}, "acmc.phen.publish": {"tf": 1}}, "df": 2}}}, "e": {"docs": {}, "df": 0, "x": {"docs": {"acmc.parse.Proto.raise_exception": {"tf": 1}}, "df": 1, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {"acmc.omop.export": {"tf": 1}}, "df": 1}}}}, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"acmc.parse.Proto.raise_exception": {"tf": 1}}, "df": 1}}}}}, "l": {"docs": {"acmc.phen.read_table_file": {"tf": 1}}, "df": 1}}}}, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"acmc.parse.InvalidCodesException.__init__": {"tf": 1}}, "df": 1, "s": {"docs": {"acmc.phen.PhenValidationException.__init__": {"tf": 1}, "acmc.phen.write_code_errors": {"tf": 1.4142135623730951}}, "df": 2}}}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"acmc.phen.construct_git_url": {"tf": 1}, "acmc.phen.init": {"tf": 1}, "acmc.phen.publish": {"tf": 1}}, "df": 3}}}}, "p": {"docs": {}, "df": 0, "o": {"docs": {"acmc.phen.generate_version_tag": {"tf": 1.7320508075688772}}, "df": 1, "r": {"docs": {}, "df": 0, "t": {"docs": {"acmc.phen.diff_phen": {"tf": 1}}, "df": 1}}}}, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"acmc.trud.download_release_file": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "l": {"docs": {"acmc.phen.construct_git_url": {"tf": 1}, "acmc.phen.fork": {"tf": 1.4142135623730951}, "acmc.phen.init": {"tf": 1}, "acmc.phen.publish": {"tf": 1}}, "df": 4}}, "p": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {"acmc.phen.fork": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}, "s": {"docs": {}, "df": 0, "e": {"docs": {"acmc.phen.generate_version_tag": {"tf": 1}}, "df": 1}}}, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {"acmc.phen.generate_version_tag": {"tf": 1}}, "df": 1}}}, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "y": {"docs": {"acmc.phen.extract_clean_deepdiff_keys": {"tf": 1}, "acmc.trud.get_releases": {"tf": 1}}, "df": 2}}}, "j": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"acmc.trud.download_release_file": {"tf": 1}}, "df": 1}}}}, "h": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "h": {"docs": {"acmc.trud.validate_download_hash": {"tf": 1}}, "df": 1}}}}}}, "bases": {"root": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"acmc.parse.InvalidCodesException": {"tf": 1}, "acmc.phen.PhenValidationException": {"tf": 1}}, "df": 2}}}}}}}}, "e": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"acmc.parse.InvalidCodesException": {"tf": 1}, "acmc.phen.PhenValidationException": {"tf": 1}}, "df": 2}}}}}}}}}, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {"acmc.parse.Read2": {"tf": 1}, "acmc.parse.Read3": {"tf": 1}, "acmc.parse.Icd10": {"tf": 1}, "acmc.parse.Snomed": {"tf": 1}, "acmc.parse.Opcs4": {"tf": 1}, "acmc.parse.Atc": {"tf": 1}, "acmc.parse.Med": {"tf": 1}, "acmc.parse.Cprd": {"tf": 1}}, "df": 8}}}}}, "y": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "l": {"docs": {"acmc.util.QuotedDumper": {"tf": 1}}, "df": 1}}}}, "d": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"acmc.util.QuotedDumper": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}}, "doc": {"root": {"3": {"docs": {"acmc.parse.Proto": {"tf": 1}, "acmc.parse.Read3": {"tf": 1}, "acmc.parse.Icd10": {"tf": 1}, "acmc.parse.Snomed": {"tf": 1}, "acmc.parse.Opcs4": {"tf": 1}, "acmc.parse.Atc": {"tf": 1}, "acmc.parse.Med": {"tf": 1}, "acmc.parse.Cprd": {"tf": 1}}, "df": 8}, "docs": {"acmc": {"tf": 1.7320508075688772}, "acmc.logging_config": {"tf": 3.7416573867739413}, "acmc.logging_config.DEFAULT_LOG_FILE": {"tf": 1.7320508075688772}, "acmc.logging_config.setup_logger": {"tf": 1.7320508075688772}, "acmc.logging_config.set_log_level": {"tf": 1.7320508075688772}, "acmc.main": {"tf": 1.7320508075688772}, "acmc.main.logger": {"tf": 1.7320508075688772}, "acmc.main.DEFAULT_WORKSPACE_PATH": {"tf": 1.7320508075688772}, "acmc.main.trud_install": {"tf": 2.23606797749979}, "acmc.main.omop_install": {"tf": 2.23606797749979}, "acmc.main.omop_clear": {"tf": 2.23606797749979}, "acmc.main.omop_delete": {"tf": 2.23606797749979}, "acmc.main.phen_init": {"tf": 2.23606797749979}, "acmc.main.phen_fork": {"tf": 2.23606797749979}, "acmc.main.phen_validate": {"tf": 2.23606797749979}, "acmc.main.phen_map": {"tf": 2.23606797749979}, "acmc.main.phen_export": {"tf": 2.23606797749979}, "acmc.main.phen_publish": {"tf": 2.23606797749979}, "acmc.main.phen_copy": {"tf": 2.23606797749979}, "acmc.main.phen_diff": {"tf": 2.23606797749979}, "acmc.main.main": {"tf": 1.7320508075688772}, "acmc.omop": {"tf": 2.23606797749979}, "acmc.omop.logger": {"tf": 1.7320508075688772}, "acmc.omop.VOCAB_PATH": {"tf": 1.7320508075688772}, "acmc.omop.OMOP_CDM_Version": {"tf": 1.7320508075688772}, "acmc.omop.OMOP_DB_FILENAME": {"tf": 1.7320508075688772}, "acmc.omop.DB_PATH": {"tf": 1.7320508075688772}, "acmc.omop.VERSION_FILE": {"tf": 1.7320508075688772}, "acmc.omop.VERSION_PATH": {"tf": 1.7320508075688772}, "acmc.omop.EXPORT_FILE": {"tf": 1.7320508075688772}, "acmc.omop.vocabularies": {"tf": 1.7320508075688772}, "acmc.omop.omop_vocab_types": {"tf": 1.7320508075688772}, "acmc.omop.install": {"tf": 6.082762530298219}, "acmc.omop.write_version_file": {"tf": 3.605551275463989}, "acmc.omop.clear": {"tf": 4.795831523312719}, "acmc.omop.delete": {"tf": 4.795831523312719}, "acmc.omop.table_exists": {"tf": 5.0990195135927845}, "acmc.omop.vocab_exists": {"tf": 5.0990195135927845}, "acmc.omop.concept_set_exist": {"tf": 5.0990195135927845}, "acmc.omop.export": {"tf": 6.082762530298219}, "acmc.parse": {"tf": 1.7320508075688772}, "acmc.parse.logger": {"tf": 1.7320508075688772}, "acmc.parse.SUPPORTED_CODE_TYPES": {"tf": 1.7320508075688772}, "acmc.parse.CodesError": {"tf": 1.4142135623730951}, "acmc.parse.CodesError.__init__": {"tf": 1.7320508075688772}, "acmc.parse.InvalidCodesException": {"tf": 1.4142135623730951}, "acmc.parse.InvalidCodesException.__init__": {"tf": 1.7320508075688772}, "acmc.parse.InvalidCodesException.error": {"tf": 1.7320508075688772}, "acmc.parse.Proto": {"tf": 3.872983346207417}, "acmc.parse.Proto.__init__": {"tf": 1.7320508075688772}, "acmc.parse.Proto.checks": {"tf": 1.7320508075688772}, "acmc.parse.Proto.name": {"tf": 1.7320508075688772}, "acmc.parse.Proto.raise_exception": {"tf": 1.4142135623730951}, "acmc.parse.Proto.in_database": {"tf": 1.7320508075688772}, "acmc.parse.Proto.process": {"tf": 1.4142135623730951}, "acmc.parse.Proto.verify": {"tf": 1.4142135623730951}, "acmc.parse.Read2": {"tf": 1.7320508075688772}, "acmc.parse.Read2.checks": {"tf": 1.7320508075688772}, "acmc.parse.Read3": {"tf": 3.872983346207417}, "acmc.parse.Read3.checks": {"tf": 1.7320508075688772}, "acmc.parse.Icd10": {"tf": 3.872983346207417}, "acmc.parse.Icd10.checks": {"tf": 1.7320508075688772}, "acmc.parse.Snomed": {"tf": 3.872983346207417}, "acmc.parse.Snomed.checks": {"tf": 1.7320508075688772}, "acmc.parse.Opcs4": {"tf": 3.872983346207417}, "acmc.parse.Opcs4.checks": {"tf": 1.7320508075688772}, "acmc.parse.Atc": {"tf": 3.872983346207417}, "acmc.parse.Atc.checks": {"tf": 1.7320508075688772}, "acmc.parse.Med": {"tf": 3.872983346207417}, "acmc.parse.Med.checks": {"tf": 1.7320508075688772}, "acmc.parse.Cprd": {"tf": 3.872983346207417}, "acmc.parse.Cprd.checks": {"tf": 1.7320508075688772}, "acmc.parse.CodeTypeParser": {"tf": 1.4142135623730951}, "acmc.parse.CodeTypeParser.__init__": {"tf": 1.7320508075688772}, "acmc.parse.CodeTypeParser.code_types": {"tf": 1.7320508075688772}, "acmc.phen": {"tf": 2.23606797749979}, "acmc.phen.logger": {"tf": 1.7320508075688772}, "acmc.phen.PHEN_DIR": {"tf": 1.7320508075688772}, "acmc.phen.DEFAULT_PHEN_PATH": {"tf": 1.7320508075688772}, "acmc.phen.CONCEPTS_DIR": {"tf": 1.7320508075688772}, "acmc.phen.MAP_DIR": {"tf": 1.7320508075688772}, "acmc.phen.CONCEPT_SET_DIR": {"tf": 1.7320508075688772}, "acmc.phen.CSV_PATH": {"tf": 1.7320508075688772}, "acmc.phen.OMOP_PATH": {"tf": 1.7320508075688772}, "acmc.phen.DEFAULT_PHEN_DIR_LIST": {"tf": 1.7320508075688772}, "acmc.phen.CONFIG_FILE": {"tf": 1.7320508075688772}, "acmc.phen.VOCAB_VERSION_FILE": {"tf": 1.7320508075688772}, "acmc.phen.SEMANTIC_VERSION_TYPES": {"tf": 1.7320508075688772}, "acmc.phen.DEFAULT_VERSION_INC": {"tf": 1.7320508075688772}, "acmc.phen.DEFAULT_GIT_BRANCH": {"tf": 1.7320508075688772}, "acmc.phen.SPLIT_COL_ACTION": {"tf": 1.7320508075688772}, "acmc.phen.CODES_COL_ACTION": {"tf": 1.7320508075688772}, "acmc.phen.DIVIDE_COL_ACTION": {"tf": 1.7320508075688772}, "acmc.phen.COL_ACTIONS": {"tf": 1.7320508075688772}, "acmc.phen.CODE_FILE_TYPES": {"tf": 1.7320508075688772}, "acmc.phen.SOURCE_COL_SUFFIX": {"tf": 1.7320508075688772}, "acmc.phen.TARGET_COL_SUFFIX": {"tf": 1.7320508075688772}, "acmc.phen.CONFIG_SCHEMA": {"tf": 1.7320508075688772}, "acmc.phen.PhenValidationException": {"tf": 1.4142135623730951}, "acmc.phen.PhenValidationException.__init__": {"tf": 1.7320508075688772}, "acmc.phen.PhenValidationException.validation_errors": {"tf": 1.7320508075688772}, "acmc.phen.construct_git_url": {"tf": 1.4142135623730951}, "acmc.phen.create_empty_git_dir": {"tf": 1.4142135623730951}, "acmc.phen.check_delete_dir": {"tf": 5.0990195135927845}, "acmc.phen.fork": {"tf": 6.928203230275509}, "acmc.phen.init": {"tf": 1.4142135623730951}, "acmc.phen.validate": {"tf": 1.4142135623730951}, "acmc.phen.read_table_file": {"tf": 1.4142135623730951}, "acmc.phen.process_actions": {"tf": 1.7320508075688772}, "acmc.phen.preprocess_source_concepts": {"tf": 1.4142135623730951}, "acmc.phen.get_code_type_from_col_name": {"tf": 1.7320508075688772}, "acmc.phen.translate_codes": {"tf": 1.4142135623730951}, "acmc.phen.sql_row_exist": {"tf": 1.7320508075688772}, "acmc.phen.write_code_errors": {"tf": 1.7320508075688772}, "acmc.phen.write_vocab_version": {"tf": 1.7320508075688772}, "acmc.phen.map": {"tf": 1.7320508075688772}, "acmc.phen.map_target_code_type": {"tf": 1.7320508075688772}, "acmc.phen.generate_version_tag": {"tf": 1.7320508075688772}, "acmc.phen.publish": {"tf": 1.4142135623730951}, "acmc.phen.export": {"tf": 1.4142135623730951}, "acmc.phen.copy": {"tf": 1.4142135623730951}, "acmc.phen.extract_concepts": {"tf": 1.7320508075688772}, "acmc.phen.extract_clean_deepdiff_keys": {"tf": 5.0990195135927845}, "acmc.phen.diff_config": {"tf": 1.7320508075688772}, "acmc.phen.diff_map_files": {"tf": 1.7320508075688772}, "acmc.phen.diff_phen": {"tf": 1.4142135623730951}, "acmc.phen.diff": {"tf": 1.7320508075688772}, "acmc.trud": {"tf": 1.7320508075688772}, "acmc.trud.logger": {"tf": 1.7320508075688772}, "acmc.trud.FQDN": {"tf": 1.7320508075688772}, "acmc.trud.VOCAB_PATH": {"tf": 1.7320508075688772}, "acmc.trud.VERSION_FILE": {"tf": 1.7320508075688772}, "acmc.trud.VERSION_PATH": {"tf": 1.7320508075688772}, "acmc.trud.DOWNLOADS_PATH": {"tf": 1.7320508075688772}, "acmc.trud.PROCESSED_PATH": {"tf": 1.7320508075688772}, "acmc.trud.get_releases": {"tf": 1.7320508075688772}, "acmc.trud.download_release_file": {"tf": 1.7320508075688772}, "acmc.trud.validate_download_hash": {"tf": 1.7320508075688772}, "acmc.trud.unzip_download": {"tf": 1.7320508075688772}, "acmc.trud.extract_icd10": {"tf": 1.7320508075688772}, "acmc.trud.extract_opsc4": {"tf": 1.7320508075688772}, "acmc.trud.extract_nhs_data_migrations": {"tf": 1.7320508075688772}, "acmc.trud.extract_nhs_read_browser": {"tf": 1.7320508075688772}, "acmc.trud.create_map_directories": {"tf": 1.7320508075688772}, "acmc.trud.install": {"tf": 1.7320508075688772}, "acmc.util": {"tf": 1.7320508075688772}, "acmc.util.QuotedDumper": {"tf": 1.7320508075688772}, "acmc.util.QuotedDumper.increase_indent": {"tf": 1.7320508075688772}}, "df": 148, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "g": {"docs": {"acmc.logging_config": {"tf": 1.4142135623730951}, "acmc.logging_config.set_log_level": {"tf": 1}}, "df": 2, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"acmc.logging_config": {"tf": 1.4142135623730951}}, "df": 1}}}, "e": {"docs": {}, "df": 0, "r": {"docs": {"acmc.logging_config.setup_logger": {"tf": 1}, "acmc.logging_config.set_log_level": {"tf": 1}}, "df": 2}, "d": {"docs": {"acmc.parse.Proto": {"tf": 1}, "acmc.parse.Read3": {"tf": 1}, "acmc.parse.Icd10": {"tf": 1}, "acmc.parse.Snomed": {"tf": 1}, "acmc.parse.Opcs4": {"tf": 1}, "acmc.parse.Atc": {"tf": 1}, "acmc.parse.Med": {"tf": 1}, "acmc.parse.Cprd": {"tf": 1}}, "df": 8}}}, "s": {"docs": {"acmc.parse.Read2": {"tf": 1}}, "df": 1}}, "a": {"docs": {}, "df": 0, "d": {"docs": {"acmc.phen.read_table_file": {"tf": 1}}, "df": 1, "e": {"docs": {}, "df": 0, "d": {"docs": {"acmc.parse.Read2": {"tf": 1}}, "df": 1}}}}, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"acmc.phen.fork": {"tf": 1.4142135623730951}}, "df": 1}}}}, "e": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {"acmc.logging_config.set_log_level": {"tf": 1}}, "df": 1}}}, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {"acmc.phen.preprocess_source_concepts": {"tf": 1}}, "df": 1}}}}}, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"acmc.parse.Proto": {"tf": 1}, "acmc.parse.Read3": {"tf": 1}, "acmc.parse.Icd10": {"tf": 1}, "acmc.parse.Snomed": {"tf": 1}, "acmc.parse.Opcs4": {"tf": 1}, "acmc.parse.Atc": {"tf": 1}, "acmc.parse.Med": {"tf": 1}, "acmc.parse.Cprd": {"tf": 1}, "acmc.phen.read_table_file": {"tf": 1}, "acmc.phen.translate_codes": {"tf": 1}}, "df": 10}}, "n": {"docs": {}, "df": 0, "e": {"docs": {"acmc.phen.check_delete_dir": {"tf": 1}}, "df": 1}}}, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {"acmc.parse.Proto.raise_exception": {"tf": 1.7320508075688772}}, "df": 1}}}}}}, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "g": {"docs": {"acmc.logging_config": {"tf": 1}}, "df": 1, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"acmc.phen.PhenValidationException": {"tf": 1}}, "df": 1}}}}}}}}}}, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"acmc.logging_config": {"tf": 1}}, "df": 1}}}}, "r": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"acmc.phen.construct_git_url": {"tf": 1}}, "df": 1}}}}}}}, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {"acmc.omop.concept_set_exist": {"tf": 2}, "acmc.omop.export": {"tf": 1.4142135623730951}, "acmc.phen.translate_codes": {"tf": 1}}, "df": 3, "s": {"docs": {"acmc.phen.extract_concepts": {"tf": 1}}, "df": 1}}}}}, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {"acmc.parse.Proto.raise_exception": {"tf": 1}}, "df": 1, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"acmc.omop.export": {"tf": 1}}, "df": 1}}}}}}}, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"acmc.parse.Proto": {"tf": 2}, "acmc.parse.Read3": {"tf": 2}, "acmc.parse.Icd10": {"tf": 2}, "acmc.parse.Snomed": {"tf": 2}, "acmc.parse.Opcs4": {"tf": 2}, "acmc.parse.Atc": {"tf": 2}, "acmc.parse.Med": {"tf": 2}, "acmc.parse.Cprd": {"tf": 2}}, "df": 8}}}}}}, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"acmc.phen.translate_codes": {"tf": 1}}, "df": 1}}}}}}}}}, "m": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {"acmc.main.trud_install": {"tf": 1}, "acmc.main.omop_install": {"tf": 1}, "acmc.main.omop_clear": {"tf": 1}, "acmc.main.omop_delete": {"tf": 1}, "acmc.main.phen_init": {"tf": 1}, "acmc.main.phen_fork": {"tf": 1}, "acmc.main.phen_validate": {"tf": 1}, "acmc.main.phen_map": {"tf": 1}, "acmc.main.phen_export": {"tf": 1}, "acmc.main.phen_publish": {"tf": 1}, "acmc.main.phen_copy": {"tf": 1}, "acmc.main.phen_diff": {"tf": 1}, "acmc.phen.check_delete_dir": {"tf": 1}}, "df": 13}}}, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"acmc.phen.publish": {"tf": 1}}, "df": 1}}}}}}, "p": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"acmc.phen.diff_phen": {"tf": 1}}, "df": 1}}}}}, "p": {"docs": {}, "df": 0, "y": {"docs": {"acmc.main.phen_export": {"tf": 1}, "acmc.main.phen_copy": {"tf": 1}}, "df": 2, "s": {"docs": {"acmc.phen.copy": {"tf": 1}}, "df": 1}}}, "d": {"docs": {}, "df": 0, "e": {"docs": {"acmc.parse.CodesError": {"tf": 1}, "acmc.parse.CodeTypeParser": {"tf": 1}, "acmc.phen.read_table_file": {"tf": 1}, "acmc.phen.translate_codes": {"tf": 1}}, "df": 4, "s": {"docs": {"acmc.parse.InvalidCodesException": {"tf": 1}, "acmc.parse.Proto.verify": {"tf": 1.4142135623730951}, "acmc.parse.Read2": {"tf": 1.4142135623730951}}, "df": 3}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"acmc.phen.translate_codes": {"tf": 1}}, "df": 1}}}}, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"acmc.parse.Read2": {"tf": 1}}, "df": 1}}}}}}}}}, "l": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "n": {"docs": {"acmc.phen.preprocess_source_concepts": {"tf": 1}}, "df": 1}}}}}, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {"acmc.main.omop_clear": {"tf": 1}}, "df": 1, "s": {"docs": {"acmc.omop.clear": {"tf": 1}}, "df": 1}}, "n": {"docs": {"acmc.phen.extract_clean_deepdiff_keys": {"tf": 1.4142135623730951}}, "df": 1}}}, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"acmc.parse.CodesError": {"tf": 1}, "acmc.parse.InvalidCodesException": {"tf": 1}, "acmc.parse.Read2": {"tf": 1}, "acmc.parse.CodeTypeParser": {"tf": 1}, "acmc.phen.PhenValidationException": {"tf": 1}}, "df": 5}}}, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {"acmc.phen.fork": {"tf": 1}}, "df": 1, "d": {"docs": {"acmc.phen.fork": {"tf": 1}}, "df": 1}}}}}, "s": {"docs": {}, "df": 0, "v": {"docs": {"acmc.omop.install": {"tf": 1.4142135623730951}, "acmc.omop.export": {"tf": 1.7320508075688772}}, "df": 2}}, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {"acmc.omop.table_exists": {"tf": 1.4142135623730951}, "acmc.omop.vocab_exists": {"tf": 1.4142135623730951}, "acmc.omop.concept_set_exist": {"tf": 1.4142135623730951}, "acmc.parse.CodesError": {"tf": 1}, "acmc.parse.CodeTypeParser": {"tf": 1}}, "df": 5, "s": {"docs": {"acmc.parse.Proto": {"tf": 1}, "acmc.parse.Read2": {"tf": 1}, "acmc.parse.Read3": {"tf": 1}, "acmc.parse.Icd10": {"tf": 1}, "acmc.parse.Snomed": {"tf": 1}, "acmc.parse.Opcs4": {"tf": 1}, "acmc.parse.Atc": {"tf": 1}, "acmc.parse.Med": {"tf": 1}, "acmc.parse.Cprd": {"tf": 1}, "acmc.phen.check_delete_dir": {"tf": 1}}, "df": 10}}}}, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {"acmc.parse.Proto": {"tf": 1}, "acmc.parse.Read3": {"tf": 1}, "acmc.parse.Icd10": {"tf": 1}, "acmc.parse.Snomed": {"tf": 1}, "acmc.parse.Opcs4": {"tf": 1}, "acmc.parse.Atc": {"tf": 1}, "acmc.parse.Med": {"tf": 1}, "acmc.parse.Cprd": {"tf": 1}, "acmc.phen.extract_clean_deepdiff_keys": {"tf": 1}}, "df": 9, "s": {"docs": {"acmc.phen.publish": {"tf": 1}}, "df": 1}}}}}}, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"acmc.omop.table_exists": {"tf": 1.7320508075688772}, "acmc.omop.vocab_exists": {"tf": 1.7320508075688772}, "acmc.omop.concept_set_exist": {"tf": 1.7320508075688772}}, "df": 3}}}}, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "m": {"docs": {"acmc.parse.InvalidCodesException": {"tf": 1}, "acmc.parse.Read2": {"tf": 1}, "acmc.phen.PhenValidationException": {"tf": 1}}, "df": 3}}}}}, "a": {"docs": {}, "df": 0, "n": {"docs": {"acmc.parse.Proto.raise_exception": {"tf": 1}}, "df": 1, "n": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {"acmc.parse.InvalidCodesException": {"tf": 1}}, "df": 1}}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"acmc.trud.create_map_directories": {"tf": 1}}, "df": 1, "s": {"docs": {"acmc.phen.create_empty_git_dir": {"tf": 1}}, "df": 1}}}}}}}, "p": {"docs": {}, "df": 0, "y": {"docs": {"acmc.logging_config": {"tf": 1}}, "df": 1, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"acmc.parse.Proto.raise_exception": {"tf": 1}}, "df": 1}}}}}, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {"acmc.main.phen_init": {"tf": 1}, "acmc.main.phen_fork": {"tf": 1}, "acmc.main.phen_validate": {"tf": 1}, "acmc.main.phen_map": {"tf": 1}, "acmc.main.phen_export": {"tf": 1}, "acmc.main.phen_publish": {"tf": 1}, "acmc.main.phen_copy": {"tf": 1}, "acmc.main.phen_diff": {"tf": 1}, "acmc.phen.fork": {"tf": 1}, "acmc.phen.export": {"tf": 1}, "acmc.phen.copy": {"tf": 1}}, "df": 11, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {"acmc.omop.export": {"tf": 1.4142135623730951}, "acmc.phen": {"tf": 1}, "acmc.phen.PhenValidationException": {"tf": 1}, "acmc.phen.fork": {"tf": 1.4142135623730951}, "acmc.phen.init": {"tf": 1}, "acmc.phen.validate": {"tf": 1}, "acmc.phen.publish": {"tf": 1}, "acmc.phen.diff_phen": {"tf": 1}}, "df": 8, "s": {"docs": {"acmc.phen": {"tf": 1}}, "df": 1}}}}}}}}}, "u": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "h": {"docs": {"acmc.main.phen_publish": {"tf": 1}}, "df": 1, "e": {"docs": {}, "df": 0, "s": {"docs": {"acmc.phen.publish": {"tf": 1}}, "df": 1}}}}}}}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"acmc.omop": {"tf": 1}, "acmc.phen": {"tf": 1}}, "df": 2}}}}}, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"acmc.parse.Proto": {"tf": 1.4142135623730951}, "acmc.parse.Proto.process": {"tf": 1}, "acmc.parse.Read3": {"tf": 1.4142135623730951}, "acmc.parse.Icd10": {"tf": 1.4142135623730951}, "acmc.parse.Snomed": {"tf": 1.4142135623730951}, "acmc.parse.Opcs4": {"tf": 1.4142135623730951}, "acmc.parse.Atc": {"tf": 1.4142135623730951}, "acmc.parse.Med": {"tf": 1.4142135623730951}, "acmc.parse.Cprd": {"tf": 1.4142135623730951}}, "df": 9, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"acmc.parse.InvalidCodesException": {"tf": 1}}, "df": 1}}}}}}}, "t": {"docs": {}, "df": 0, "o": {"docs": {"acmc.parse.Read2": {"tf": 1}}, "df": 1}}, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "s": {"docs": {"acmc.phen.fork": {"tf": 1}}, "df": 1}}}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"acmc.parse.Proto": {"tf": 1}, "acmc.parse.Read3": {"tf": 1}, "acmc.parse.Icd10": {"tf": 1}, "acmc.parse.Snomed": {"tf": 1}, "acmc.parse.Opcs4": {"tf": 1}, "acmc.parse.Atc": {"tf": 1}, "acmc.parse.Med": {"tf": 1}, "acmc.parse.Cprd": {"tf": 1}}, "df": 8}}}}}, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"acmc.phen.preprocess_source_concepts": {"tf": 1}}, "df": 1}}}}}}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {"acmc.phen.construct_git_url": {"tf": 1}}, "df": 1, "h": {"docs": {"acmc.omop.clear": {"tf": 1.7320508075688772}, "acmc.omop.delete": {"tf": 1.7320508075688772}, "acmc.omop.export": {"tf": 2.8284271247461903}, "acmc.phen.check_delete_dir": {"tf": 1.7320508075688772}, "acmc.phen.fork": {"tf": 1}, "acmc.phen.extract_concepts": {"tf": 1}}, "df": 6}}, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"acmc.parse.CodesError": {"tf": 1}, "acmc.parse.CodeTypeParser": {"tf": 1}}, "df": 2}, "s": {"docs": {"acmc.phen.preprocess_source_concepts": {"tf": 1}}, "df": 1}}}, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {"acmc.phen.extract_clean_deepdiff_keys": {"tf": 1}}, "df": 1}}}}}}}}, "s": {"docs": {}, "df": 0, "s": {"docs": {"acmc.parse.Proto.process": {"tf": 1}}, "df": 1, "e": {"docs": {}, "df": 0, "d": {"docs": {"acmc.parse.Proto": {"tf": 1}, "acmc.parse.Read3": {"tf": 1}, "acmc.parse.Icd10": {"tf": 1}, "acmc.parse.Snomed": {"tf": 1}, "acmc.parse.Opcs4": {"tf": 1}, "acmc.parse.Atc": {"tf": 1}, "acmc.parse.Med": {"tf": 1}, "acmc.parse.Cprd": {"tf": 1}}, "df": 8}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"acmc.parse.Proto": {"tf": 1}, "acmc.parse.Read3": {"tf": 1}, "acmc.parse.Icd10": {"tf": 1}, "acmc.parse.Snomed": {"tf": 1}, "acmc.parse.Opcs4": {"tf": 1}, "acmc.parse.Atc": {"tf": 1}, "acmc.parse.Med": {"tf": 1}, "acmc.parse.Cprd": {"tf": 1}}, "df": 8}}}}}}}, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {"acmc.logging_config": {"tf": 1}, "acmc.omop": {"tf": 1}, "acmc.parse.Read2": {"tf": 1}, "acmc.phen": {"tf": 1}}, "df": 4}}, "e": {"docs": {"acmc.logging_config": {"tf": 1}, "acmc.logging_config.set_log_level": {"tf": 1.4142135623730951}, "acmc.main.trud_install": {"tf": 1}, "acmc.main.omop_install": {"tf": 1}, "acmc.main.omop_clear": {"tf": 1}, "acmc.main.omop_delete": {"tf": 1}, "acmc.main.phen_init": {"tf": 1}, "acmc.main.phen_fork": {"tf": 1}, "acmc.main.phen_validate": {"tf": 1}, "acmc.main.phen_map": {"tf": 1}, "acmc.main.phen_export": {"tf": 1}, "acmc.main.phen_publish": {"tf": 1}, "acmc.main.phen_copy": {"tf": 1}, "acmc.main.phen_diff": {"tf": 1}, "acmc.omop.install": {"tf": 2}, "acmc.omop.write_version_file": {"tf": 1.4142135623730951}, "acmc.omop.clear": {"tf": 2}, "acmc.omop.delete": {"tf": 2}, "acmc.omop.table_exists": {"tf": 1.4142135623730951}, "acmc.omop.vocab_exists": {"tf": 1.4142135623730951}, "acmc.omop.concept_set_exist": {"tf": 1.4142135623730951}, "acmc.omop.export": {"tf": 2}, "acmc.parse.Proto": {"tf": 1.4142135623730951}, "acmc.parse.Read2": {"tf": 1.4142135623730951}, "acmc.parse.Read3": {"tf": 1.4142135623730951}, "acmc.parse.Icd10": {"tf": 1.4142135623730951}, "acmc.parse.Snomed": {"tf": 1.4142135623730951}, "acmc.parse.Opcs4": {"tf": 1.4142135623730951}, "acmc.parse.Atc": {"tf": 1.4142135623730951}, "acmc.parse.Med": {"tf": 1.4142135623730951}, "acmc.parse.Cprd": {"tf": 1.4142135623730951}, "acmc.phen.check_delete_dir": {"tf": 1.7320508075688772}, "acmc.phen.fork": {"tf": 2.8284271247461903}, "acmc.phen.validate": {"tf": 1}, "acmc.phen.translate_codes": {"tf": 1}, "acmc.phen.publish": {"tf": 1.4142135623730951}, "acmc.phen.extract_clean_deepdiff_keys": {"tf": 1}, "acmc.phen.diff_phen": {"tf": 1}, "acmc.trud.get_releases": {"tf": 1}}, "df": 39, "m": {"docs": {"acmc.parse.Proto.process": {"tf": 1}}, "df": 1}, "r": {"docs": {}, "df": 0, "e": {"docs": {"acmc.phen.fork": {"tf": 1}}, "df": 1}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {"acmc.parse.InvalidCodesException": {"tf": 1}, "acmc.parse.Proto": {"tf": 1}, "acmc.parse.Proto.process": {"tf": 1}, "acmc.parse.Read2": {"tf": 1}, "acmc.parse.Read3": {"tf": 1}, "acmc.parse.Icd10": {"tf": 1}, "acmc.parse.Snomed": {"tf": 1}, "acmc.parse.Opcs4": {"tf": 1}, "acmc.parse.Atc": {"tf": 1}, "acmc.parse.Med": {"tf": 1}, "acmc.parse.Cprd": {"tf": 1}, "acmc.phen.create_empty_git_dir": {"tf": 1}}, "df": 12}}}, "o": {"docs": {"acmc.logging_config": {"tf": 1}, "acmc.logging_config.setup_logger": {"tf": 1}, "acmc.omop": {"tf": 1}, "acmc.omop.write_version_file": {"tf": 1}, "acmc.omop.clear": {"tf": 1}, "acmc.omop.delete": {"tf": 1}, "acmc.omop.table_exists": {"tf": 1.4142135623730951}, "acmc.omop.vocab_exists": {"tf": 1.4142135623730951}, "acmc.omop.concept_set_exist": {"tf": 1.4142135623730951}, "acmc.omop.export": {"tf": 2.23606797749979}, "acmc.parse.CodesError": {"tf": 1}, "acmc.parse.Proto": {"tf": 1}, "acmc.parse.Read3": {"tf": 1}, "acmc.parse.Icd10": {"tf": 1}, "acmc.parse.Snomed": {"tf": 1}, "acmc.parse.Opcs4": {"tf": 1}, "acmc.parse.Atc": {"tf": 1}, "acmc.parse.Med": {"tf": 1}, "acmc.parse.Cprd": {"tf": 1}, "acmc.parse.CodeTypeParser": {"tf": 1}, "acmc.phen.check_delete_dir": {"tf": 2}, "acmc.phen.fork": {"tf": 2.6457513110645907}, "acmc.phen.publish": {"tf": 1.4142135623730951}, "acmc.phen.extract_clean_deepdiff_keys": {"tf": 1}}, "df": 24, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {"acmc.phen.construct_git_url": {"tf": 1}}, "df": 1}}}}, "r": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "d": {"docs": {"acmc.main.trud_install": {"tf": 1}, "acmc.trud.get_releases": {"tf": 1}}, "df": 2}, "e": {"docs": {"acmc.omop.table_exists": {"tf": 1}, "acmc.omop.vocab_exists": {"tf": 1}, "acmc.omop.concept_set_exist": {"tf": 1}, "acmc.parse.Proto": {"tf": 1}, "acmc.parse.Read3": {"tf": 1}, "acmc.parse.Icd10": {"tf": 1}, "acmc.parse.Snomed": {"tf": 1}, "acmc.parse.Opcs4": {"tf": 1}, "acmc.parse.Atc": {"tf": 1}, "acmc.parse.Med": {"tf": 1}, "acmc.parse.Cprd": {"tf": 1}, "acmc.phen.check_delete_dir": {"tf": 1}}, "df": 12}}, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"acmc.phen.create_empty_git_dir": {"tf": 1}}, "df": 1}}}}, "n": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"acmc.phen.translate_codes": {"tf": 1}}, "df": 1}}}}}}}}}, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"acmc.omop.table_exists": {"tf": 2}}, "df": 1}}}, "r": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {"acmc.phen.translate_codes": {"tf": 1}, "acmc.phen.export": {"tf": 1}, "acmc.phen.copy": {"tf": 1}}, "df": 3}}}}, "g": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"acmc.phen.export": {"tf": 1}, "acmc.phen.copy": {"tf": 1}}, "df": 2}}}}}, "u": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"acmc.parse.Proto": {"tf": 1}, "acmc.parse.Read3": {"tf": 1}, "acmc.parse.Icd10": {"tf": 1}, "acmc.parse.Snomed": {"tf": 1}, "acmc.parse.Opcs4": {"tf": 1}, "acmc.parse.Atc": {"tf": 1}, "acmc.parse.Med": {"tf": 1}, "acmc.parse.Cprd": {"tf": 1}}, "df": 8}}}}, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {"acmc.phen.translate_codes": {"tf": 1.4142135623730951}, "acmc.phen.extract_clean_deepdiff_keys": {"tf": 1.4142135623730951}, "acmc.trud.download_release_file": {"tf": 1}}, "df": 3}}}, "w": {"docs": {}, "df": 0, "o": {"docs": {"acmc.phen.diff_phen": {"tf": 1}}, "df": 1}}}, "m": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"acmc.logging_config": {"tf": 1.4142135623730951}, "acmc.omop": {"tf": 1.4142135623730951}, "acmc.phen": {"tf": 1.4142135623730951}}, "df": 3}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {"acmc.parse.Proto.raise_exception": {"tf": 1}}, "df": 1}}}, "a": {"docs": {}, "df": 0, "p": {"docs": {"acmc.main.phen_map": {"tf": 1}, "acmc.omop.export": {"tf": 1.4142135623730951}, "acmc.trud.create_map_directories": {"tf": 1}}, "df": 3}, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {"acmc.omop": {"tf": 1}}, "df": 1}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"acmc.phen": {"tf": 1}}, "df": 1}}}}}}}, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {"acmc.omop.export": {"tf": 1.7320508075688772}}, "df": 1}}}}}}, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {"acmc.parse.Proto": {"tf": 1.4142135623730951}, "acmc.parse.Read3": {"tf": 1.4142135623730951}, "acmc.parse.Icd10": {"tf": 1.4142135623730951}, "acmc.parse.Snomed": {"tf": 1.4142135623730951}, "acmc.parse.Opcs4": {"tf": 1.4142135623730951}, "acmc.parse.Atc": {"tf": 1.4142135623730951}, "acmc.parse.Med": {"tf": 1.4142135623730951}, "acmc.parse.Cprd": {"tf": 1.4142135623730951}, "acmc.phen.check_delete_dir": {"tf": 1}}, "df": 9}}}}}}, "s": {"docs": {}, "df": 0, "g": {"docs": {"acmc.phen.check_delete_dir": {"tf": 1}}, "df": 1}}}, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {"acmc.parse.Proto": {"tf": 1}, "acmc.parse.Read3": {"tf": 1}, "acmc.parse.Icd10": {"tf": 1}, "acmc.parse.Snomed": {"tf": 1}, "acmc.parse.Opcs4": {"tf": 1}, "acmc.parse.Atc": {"tf": 1}, "acmc.parse.Med": {"tf": 1}, "acmc.parse.Cprd": {"tf": 1}}, "df": 8, "s": {"docs": {"acmc.logging_config": {"tf": 1}}, "df": 1}, "/": {"docs": {}, "df": 0, "d": {"docs": {"acmc.parse.Proto.process": {"tf": 1}}, "df": 1}}}}}, "a": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {"acmc.logging_config": {"tf": 1.4142135623730951}}, "df": 1, "s": {"docs": {"acmc.phen.fork": {"tf": 1}}, "df": 1}}}}}}, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"acmc.main.omop_delete": {"tf": 1}, "acmc.phen.check_delete_dir": {"tf": 1}}, "df": 2, "s": {"docs": {"acmc.omop.delete": {"tf": 1}}, "df": 1}, "d": {"docs": {"acmc.phen.check_delete_dir": {"tf": 1.4142135623730951}}, "df": 1}}}}}, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "f": {"docs": {"acmc.phen.extract_clean_deepdiff_keys": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}, "i": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "f": {"docs": {"acmc.main.phen_diff": {"tf": 1}, "acmc.phen.extract_clean_deepdiff_keys": {"tf": 1}}, "df": 2, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"acmc.phen.diff_phen": {"tf": 1}}, "df": 1}}}}}}}}}, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"acmc.omop.install": {"tf": 1.4142135623730951}, "acmc.omop.write_version_file": {"tf": 1}}, "df": 2}}}}}}}}, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"acmc.phen.check_delete_dir": {"tf": 1}}, "df": 1}}}}}}}, "r": {"docs": {"acmc.phen.fork": {"tf": 1}}, "df": 1, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"acmc.phen.fork": {"tf": 1}}, "df": 1, "y": {"docs": {"acmc.omop.export": {"tf": 1.4142135623730951}, "acmc.phen.create_empty_git_dir": {"tf": 1}, "acmc.phen.check_delete_dir": {"tf": 1.4142135623730951}, "acmc.phen.fork": {"tf": 1}, "acmc.phen.init": {"tf": 1}, "acmc.phen.validate": {"tf": 1}, "acmc.phen.publish": {"tf": 1}, "acmc.phen.export": {"tf": 1}, "acmc.phen.copy": {"tf": 1}}, "df": 9}, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"acmc.trud.create_map_directories": {"tf": 1}}, "df": 1}}}}}}}}}, "c": {"docs": {}, "df": 0, "t": {"docs": {"acmc.omop.export": {"tf": 1}}, "df": 1, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "y": {"docs": {"acmc.phen.extract_concepts": {"tf": 1}, "acmc.phen.extract_clean_deepdiff_keys": {"tf": 2}}, "df": 2}}}}}}}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"acmc.omop.install": {"tf": 1}, "acmc.omop.clear": {"tf": 1.7320508075688772}, "acmc.omop.delete": {"tf": 1.7320508075688772}, "acmc.omop.table_exists": {"tf": 1}, "acmc.omop.vocab_exists": {"tf": 1}, "acmc.omop.concept_set_exist": {"tf": 1}, "acmc.omop.export": {"tf": 1.7320508075688772}}, "df": 7}}}}, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {"acmc.parse.Read2": {"tf": 1.4142135623730951}}, "df": 1}}}}}}, "o": {"docs": {"acmc.parse.Proto": {"tf": 1}, "acmc.parse.Proto.process": {"tf": 1}, "acmc.parse.Read3": {"tf": 1}, "acmc.parse.Icd10": {"tf": 1}, "acmc.parse.Snomed": {"tf": 1}, "acmc.parse.Opcs4": {"tf": 1}, "acmc.parse.Atc": {"tf": 1}, "acmc.parse.Med": {"tf": 1}, "acmc.parse.Cprd": {"tf": 1}}, "df": 9, "e": {"docs": {}, "df": 0, "s": {"docs": {"acmc.omop.install": {"tf": 1}, "acmc.omop.clear": {"tf": 1}, "acmc.omop.delete": {"tf": 1}, "acmc.parse.Proto.raise_exception": {"tf": 1}}, "df": 4}}, "w": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {"acmc.trud.download_release_file": {"tf": 1}}, "df": 1}}}}}}}, "b": {"docs": {"acmc.omop.clear": {"tf": 1}, "acmc.omop.delete": {"tf": 1}}, "df": 2}}, "f": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"acmc.parse.Proto.raise_exception": {"tf": 1}}, "df": 1, "s": {"docs": {"acmc.logging_config": {"tf": 1}}, "df": 1}, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {"acmc.omop": {"tf": 1}, "acmc.phen": {"tf": 1}}, "df": 2}}}}}}}}}}}}, "o": {"docs": {}, "df": 0, "r": {"docs": {"acmc.logging_config": {"tf": 1}, "acmc.logging_config.set_log_level": {"tf": 1}, "acmc.omop.export": {"tf": 1.4142135623730951}, "acmc.parse.Read2": {"tf": 1}, "acmc.phen": {"tf": 1}, "acmc.phen.construct_git_url": {"tf": 1}, "acmc.trud.get_releases": {"tf": 1}, "acmc.trud.download_release_file": {"tf": 1}}, "df": 8, "k": {"docs": {"acmc.main.phen_fork": {"tf": 1}}, "df": 1, "s": {"docs": {"acmc.phen.fork": {"tf": 1}}, "df": 1}}, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {"acmc.omop.export": {"tf": 1.4142135623730951}}, "df": 1}}}}, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {"acmc.parse.InvalidCodesException": {"tf": 1}}, "df": 1}}}}, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"acmc.logging_config": {"tf": 1}, "acmc.logging_config.setup_logger": {"tf": 1}, "acmc.omop.install": {"tf": 2.449489742783178}, "acmc.omop.write_version_file": {"tf": 1}, "acmc.parse.Proto.verify": {"tf": 1}, "acmc.phen.PhenValidationException": {"tf": 1}, "acmc.phen.create_empty_git_dir": {"tf": 1}, "acmc.phen.read_table_file": {"tf": 1}, "acmc.phen.extract_concepts": {"tf": 1}, "acmc.trud.download_release_file": {"tf": 1}}, "df": 10, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"acmc.logging_config": {"tf": 1}}, "df": 1}}}, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"acmc.omop.clear": {"tf": 1}, "acmc.omop.delete": {"tf": 1}}, "df": 2}}}}}}}}}}}}}, "s": {"docs": {"acmc.omop.install": {"tf": 1.4142135623730951}, "acmc.omop.export": {"tf": 1}}, "df": 2}}}, "x": {"docs": {"acmc.parse.Proto.process": {"tf": 1}}, "df": 1}}, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "s": {"docs": {"acmc.parse.CodesError": {"tf": 1}, "acmc.parse.CodeTypeParser": {"tf": 1}}, "df": 2}, "e": {"docs": {}, "df": 0, "d": {"docs": {"acmc.parse.Proto": {"tf": 1}, "acmc.parse.Read3": {"tf": 1}, "acmc.parse.Icd10": {"tf": 1}, "acmc.parse.Snomed": {"tf": 1}, "acmc.parse.Opcs4": {"tf": 1}, "acmc.parse.Atc": {"tf": 1}, "acmc.parse.Med": {"tf": 1}, "acmc.parse.Cprd": {"tf": 1}}, "df": 8}}}}, "l": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"acmc.parse.Proto": {"tf": 1}, "acmc.parse.Read3": {"tf": 1}, "acmc.parse.Icd10": {"tf": 1}, "acmc.parse.Snomed": {"tf": 1}, "acmc.parse.Opcs4": {"tf": 1}, "acmc.parse.Atc": {"tf": 1}, "acmc.parse.Med": {"tf": 1}, "acmc.parse.Cprd": {"tf": 1}}, "df": 8}}}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "m": {"docs": {"acmc.parse.Proto": {"tf": 1}, "acmc.parse.Read3": {"tf": 1}, "acmc.parse.Icd10": {"tf": 1}, "acmc.parse.Snomed": {"tf": 1}, "acmc.parse.Opcs4": {"tf": 1}, "acmc.parse.Atc": {"tf": 1}, "acmc.parse.Med": {"tf": 1}, "acmc.parse.Cprd": {"tf": 1}, "acmc.phen.extract_clean_deepdiff_keys": {"tf": 1}, "acmc.trud.get_releases": {"tf": 1}}, "df": 10}}}}, "s": {"docs": {"acmc.parse.Proto.raise_exception": {"tf": 1}, "acmc.phen.create_empty_git_dir": {"tf": 1}, "acmc.phen.fork": {"tf": 1}}, "df": 3, "e": {"docs": {}, "df": 0, "t": {"docs": {"acmc.omop.concept_set_exist": {"tf": 2}, "acmc.phen.fork": {"tf": 1}, "acmc.phen.translate_codes": {"tf": 1}, "acmc.phen.extract_concepts": {"tf": 1}, "acmc.phen.extract_clean_deepdiff_keys": {"tf": 1}}, "df": 5, "u": {"docs": {}, "df": 0, "p": {"docs": {"acmc.logging_config": {"tf": 1}}, "df": 1}}, "s": {"docs": {"acmc.logging_config.setup_logger": {"tf": 1}, "acmc.logging_config.set_log_level": {"tf": 1}, "acmc.omop.export": {"tf": 1.4142135623730951}, "acmc.phen.fork": {"tf": 1}}, "df": 4}}, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"acmc.parse.Read2": {"tf": 1}}, "df": 1}}}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"acmc.logging_config.setup_logger": {"tf": 1}}, "df": 1}}}}}}}}, "y": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {"acmc.logging_config.setup_logger": {"tf": 1}}, "df": 1}}}, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "r": {"docs": {"acmc.logging_config.setup_logger": {"tf": 1}}, "df": 1}}}}}, "q": {"docs": {}, "df": 0, "l": {"docs": {"acmc.omop.install": {"tf": 1}, "acmc.omop.clear": {"tf": 1}, "acmc.omop.delete": {"tf": 1}}, "df": 3, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"acmc.omop.clear": {"tf": 1.4142135623730951}, "acmc.omop.delete": {"tf": 1.4142135623730951}, "acmc.omop.table_exists": {"tf": 1}, "acmc.omop.vocab_exists": {"tf": 1}, "acmc.omop.concept_set_exist": {"tf": 1}, "acmc.omop.export": {"tf": 1}}, "df": 6}}}}, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"3": {"docs": {"acmc.omop.table_exists": {"tf": 1}, "acmc.omop.vocab_exists": {"tf": 1}, "acmc.omop.concept_set_exist": {"tf": 1}}, "df": 3}, "docs": {}, "df": 0}}}}}, "t": {"docs": {}, "df": 0, "r": {"docs": {"acmc.omop.install": {"tf": 1.4142135623730951}, "acmc.omop.write_version_file": {"tf": 1}, "acmc.omop.table_exists": {"tf": 1}, "acmc.omop.vocab_exists": {"tf": 1}, "acmc.omop.concept_set_exist": {"tf": 1}, "acmc.omop.export": {"tf": 1}, "acmc.phen.check_delete_dir": {"tf": 1}, "acmc.phen.fork": {"tf": 2}}, "df": 8, "u": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"acmc.phen.init": {"tf": 1}, "acmc.phen.validate": {"tf": 1}}, "df": 2}}}}}}}, "o": {"docs": {}, "df": 0, "p": {"docs": {"acmc.parse.Proto": {"tf": 1}, "acmc.parse.Read3": {"tf": 1}, "acmc.parse.Icd10": {"tf": 1}, "acmc.parse.Snomed": {"tf": 1}, "acmc.parse.Opcs4": {"tf": 1}, "acmc.parse.Atc": {"tf": 1}, "acmc.parse.Med": {"tf": 1}, "acmc.parse.Cprd": {"tf": 1}}, "df": 8}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"acmc.parse.Proto.raise_exception": {"tf": 1}}, "df": 1, "s": {"docs": {"acmc.parse.Proto.raise_exception": {"tf": 1}}, "df": 1}}}}}}}, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "d": {"docs": {"acmc.phen.init": {"tf": 1}, "acmc.phen.validate": {"tf": 1}}, "df": 2}}}}}}}, "o": {"docs": {"acmc.phen.create_empty_git_dir": {"tf": 1}}, "df": 1, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"acmc.phen.translate_codes": {"tf": 1.4142135623730951}}, "df": 1}}}}}, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {"acmc.phen.fork": {"tf": 1}, "acmc.phen.export": {"tf": 1}, "acmc.phen.copy": {"tf": 1}}, "df": 3}, "e": {"docs": {}, "df": 0, "d": {"docs": {"acmc.phen.fork": {"tf": 1}, "acmc.trud.download_release_file": {"tf": 1}}, "df": 2}}}}}}}}}, "a": {"docs": {"acmc.logging_config.setup_logger": {"tf": 1}, "acmc.omop.install": {"tf": 1.4142135623730951}, "acmc.omop.write_version_file": {"tf": 1}, "acmc.omop.table_exists": {"tf": 1}, "acmc.omop.vocab_exists": {"tf": 1}, "acmc.omop.concept_set_exist": {"tf": 1}, "acmc.parse.CodesError": {"tf": 1.4142135623730951}, "acmc.parse.Proto.raise_exception": {"tf": 1}, "acmc.parse.Read2": {"tf": 1}, "acmc.parse.CodeTypeParser": {"tf": 1.4142135623730951}, "acmc.phen.construct_git_url": {"tf": 1.4142135623730951}, "acmc.phen.create_empty_git_dir": {"tf": 1.4142135623730951}, "acmc.phen.check_delete_dir": {"tf": 1.4142135623730951}, "acmc.phen.fork": {"tf": 2.23606797749979}, "acmc.phen.validate": {"tf": 1}, "acmc.phen.translate_codes": {"tf": 1.4142135623730951}, "acmc.phen.export": {"tf": 1.7320508075688772}, "acmc.phen.copy": {"tf": 1.7320508075688772}, "acmc.phen.extract_concepts": {"tf": 1}, "acmc.phen.extract_clean_deepdiff_keys": {"tf": 1.4142135623730951}, "acmc.phen.diff_phen": {"tf": 1}, "acmc.trud.download_release_file": {"tf": 1}}, "df": 22, "c": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "c": {"docs": {"acmc.logging_config": {"tf": 1.4142135623730951}, "acmc.logging_config.setup_logger": {"tf": 1}, "acmc.logging_config.set_log_level": {"tf": 1}, "acmc.omop.export": {"tf": 1}}, "df": 4}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"acmc.logging_config": {"tf": 1}}, "df": 1}}}}}, "l": {"docs": {}, "df": 0, "l": {"docs": {"acmc.logging_config": {"tf": 1}, "acmc.parse.Proto": {"tf": 1}, "acmc.parse.Read3": {"tf": 1}, "acmc.parse.Icd10": {"tf": 1}, "acmc.parse.Snomed": {"tf": 1}, "acmc.parse.Opcs4": {"tf": 1}, "acmc.parse.Atc": {"tf": 1}, "acmc.parse.Med": {"tf": 1}, "acmc.parse.Cprd": {"tf": 1}, "acmc.phen.translate_codes": {"tf": 1}, "acmc.phen.publish": {"tf": 1}}, "df": 11, "o": {"docs": {}, "df": 0, "w": {"docs": {"acmc.parse.Proto.raise_exception": {"tf": 1}}, "df": 1}}}}, "p": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"acmc.logging_config": {"tf": 1}}, "df": 1}}}}}}, "e": {"docs": {}, "df": 0, "s": {"docs": {"acmc.parse.Read2": {"tf": 1}}, "df": 1}}}}}, "i": {"docs": {"acmc.trud.get_releases": {"tf": 1}}, "df": 1}}, "s": {"docs": {"acmc.logging_config.setup_logger": {"tf": 1}, "acmc.parse.Proto": {"tf": 1}, "acmc.parse.Proto.raise_exception": {"tf": 1}, "acmc.parse.Read3": {"tf": 1}, "acmc.parse.Icd10": {"tf": 1}, "acmc.parse.Snomed": {"tf": 1}, "acmc.parse.Opcs4": {"tf": 1}, "acmc.parse.Atc": {"tf": 1}, "acmc.parse.Med": {"tf": 1}, "acmc.parse.Cprd": {"tf": 1}, "acmc.phen.fork": {"tf": 1}, "acmc.phen.init": {"tf": 1}, "acmc.phen.translate_codes": {"tf": 1}, "acmc.phen.extract_concepts": {"tf": 1}}, "df": 14}, "n": {"docs": {"acmc.parse.CodesError": {"tf": 1}, "acmc.parse.Proto.raise_exception": {"tf": 1}, "acmc.parse.CodeTypeParser": {"tf": 1}, "acmc.phen.fork": {"tf": 1}, "acmc.trud.get_releases": {"tf": 1}, "acmc.trud.download_release_file": {"tf": 1}}, "df": 6, "d": {"docs": {"acmc.logging_config.setup_logger": {"tf": 1}, "acmc.omop.write_version_file": {"tf": 1}, "acmc.parse.Proto": {"tf": 1.4142135623730951}, "acmc.parse.Proto.process": {"tf": 1}, "acmc.parse.Read2": {"tf": 1}, "acmc.parse.Read3": {"tf": 1.4142135623730951}, "acmc.parse.Icd10": {"tf": 1.4142135623730951}, "acmc.parse.Snomed": {"tf": 1.4142135623730951}, "acmc.parse.Opcs4": {"tf": 1.4142135623730951}, "acmc.parse.Atc": {"tf": 1.4142135623730951}, "acmc.parse.Med": {"tf": 1.4142135623730951}, "acmc.parse.Cprd": {"tf": 1.4142135623730951}, "acmc.phen.fork": {"tf": 1}, "acmc.phen.preprocess_source_concepts": {"tf": 1}, "acmc.phen.translate_codes": {"tf": 1}, "acmc.phen.extract_concepts": {"tf": 1}}, "df": 16}, "y": {"docs": {"acmc.phen.fork": {"tf": 1}}, "df": 1}}, "r": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"acmc.omop.install": {"tf": 1}, "acmc.omop.write_version_file": {"tf": 1}, "acmc.omop.clear": {"tf": 1}, "acmc.omop.delete": {"tf": 1}, "acmc.omop.table_exists": {"tf": 1}, "acmc.omop.vocab_exists": {"tf": 1}, "acmc.omop.concept_set_exist": {"tf": 1}, "acmc.omop.export": {"tf": 1}, "acmc.phen.check_delete_dir": {"tf": 1}, "acmc.phen.fork": {"tf": 1}}, "df": 10}}}}}}}, "e": {"docs": {"acmc.omop.export": {"tf": 1}, "acmc.parse.InvalidCodesException": {"tf": 1}}, "df": 2}}, "t": {"docs": {"acmc.phen.fork": {"tf": 1}, "acmc.phen.export": {"tf": 1}, "acmc.phen.copy": {"tf": 1}}, "df": 3, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {"acmc.omop.install": {"tf": 1.4142135623730951}, "acmc.omop.write_version_file": {"tf": 1}}, "df": 2}}}}}, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "s": {"docs": {"acmc.parse.Proto": {"tf": 1}, "acmc.parse.Read3": {"tf": 1}, "acmc.parse.Icd10": {"tf": 1}, "acmc.parse.Snomed": {"tf": 1}, "acmc.parse.Opcs4": {"tf": 1}, "acmc.parse.Atc": {"tf": 1}, "acmc.parse.Med": {"tf": 1}, "acmc.parse.Cprd": {"tf": 1}}, "df": 8}}}, "d": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"acmc.parse.Read2": {"tf": 1}}, "df": 1}}}, "e": {"docs": {}, "df": 0, "d": {"docs": {"acmc.phen.extract_clean_deepdiff_keys": {"tf": 1}}, "df": 1}}}}}, "u": {"docs": {}, "df": 0, "p": {"docs": {"acmc.logging_config.setup_logger": {"tf": 1}}, "df": 1, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {"acmc.phen.fork": {"tf": 2.8284271247461903}}, "df": 1}}}}}}, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"acmc.phen.publish": {"tf": 1}}, "df": 1}}}}}}, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"acmc.parse.CodesError": {"tf": 1}, "acmc.parse.CodeTypeParser": {"tf": 1}}, "df": 2}, "r": {"docs": {"acmc.phen.check_delete_dir": {"tf": 1.4142135623730951}}, "df": 1}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"acmc.parse.Proto.raise_exception": {"tf": 1.4142135623730951}}, "df": 1}}}}, "r": {"docs": {}, "df": 0, "l": {"docs": {"acmc.phen.construct_git_url": {"tf": 1}, "acmc.phen.fork": {"tf": 2}}, "df": 2}}}, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"acmc.logging_config.setup_logger": {"tf": 1}}, "df": 1}}}}}}}}, "m": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "p": {"docs": {"acmc.main.omop_install": {"tf": 1}, "acmc.main.omop_clear": {"tf": 1}, "acmc.main.omop_delete": {"tf": 1}, "acmc.omop": {"tf": 1.4142135623730951}, "acmc.omop.install": {"tf": 1.7320508075688772}, "acmc.omop.write_version_file": {"tf": 1}, "acmc.omop.clear": {"tf": 1.7320508075688772}, "acmc.omop.delete": {"tf": 1.7320508075688772}, "acmc.omop.export": {"tf": 2.449489742783178}}, "df": 9}}}, "h": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {"acmc.omop.install": {"tf": 1.4142135623730951}, "acmc.omop.write_version_file": {"tf": 1}}, "df": 2}}}}, "f": {"docs": {"acmc.omop.install": {"tf": 1}, "acmc.omop.write_version_file": {"tf": 1}, "acmc.parse.Proto": {"tf": 1.4142135623730951}, "acmc.parse.Read2": {"tf": 1}, "acmc.parse.Read3": {"tf": 1.4142135623730951}, "acmc.parse.Icd10": {"tf": 1.4142135623730951}, "acmc.parse.Snomed": {"tf": 1.4142135623730951}, "acmc.parse.Opcs4": {"tf": 1.4142135623730951}, "acmc.parse.Atc": {"tf": 1.4142135623730951}, "acmc.parse.Med": {"tf": 1.4142135623730951}, "acmc.parse.Cprd": {"tf": 1.4142135623730951}, "acmc.phen.check_delete_dir": {"tf": 1}, "acmc.phen.fork": {"tf": 1}, "acmc.phen.extract_clean_deepdiff_keys": {"tf": 1.4142135623730951}, "acmc.phen.diff_phen": {"tf": 1}, "acmc.trud.download_release_file": {"tf": 1}}, "df": 16}, "n": {"docs": {"acmc.parse.Read2": {"tf": 1}, "acmc.phen.check_delete_dir": {"tf": 1}}, "df": 2, "l": {"docs": {}, "df": 0, "y": {"docs": {"acmc.parse.Proto.raise_exception": {"tf": 1}}, "df": 1}}}, "r": {"docs": {"acmc.parse.Read2": {"tf": 1}, "acmc.phen.construct_git_url": {"tf": 1}}, "df": 2, "i": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {"acmc.phen.fork": {"tf": 1.7320508075688772}}, "df": 1}}}}, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"acmc.phen.preprocess_source_concepts": {"tf": 1}}, "df": 1}}}}, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"acmc.phen.fork": {"tf": 1}}, "df": 1, "l": {"docs": {}, "df": 0, "y": {"docs": {"acmc.phen.fork": {"tf": 1}}, "df": 1}}}}}}}}}, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"acmc.phen.fork": {"tf": 1}}, "df": 1}}}}}, "h": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"acmc.main.trud_install": {"tf": 1}, "acmc.main.omop_install": {"tf": 1}, "acmc.main.omop_clear": {"tf": 1}, "acmc.main.omop_delete": {"tf": 1}, "acmc.main.phen_init": {"tf": 1}, "acmc.main.phen_fork": {"tf": 1}, "acmc.main.phen_validate": {"tf": 1}, "acmc.main.phen_map": {"tf": 1}, "acmc.main.phen_export": {"tf": 1}, "acmc.main.phen_publish": {"tf": 1}, "acmc.main.phen_copy": {"tf": 1}, "acmc.main.phen_diff": {"tf": 1}}, "df": 12}}}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {"acmc.omop.install": {"tf": 1}, "acmc.omop.export": {"tf": 1.4142135623730951}, "acmc.parse.CodesError": {"tf": 1}, "acmc.parse.Proto.verify": {"tf": 1}, "acmc.parse.CodeTypeParser": {"tf": 1}, "acmc.phen.PhenValidationException": {"tf": 1}, "acmc.phen.create_empty_git_dir": {"tf": 1}, "acmc.phen.fork": {"tf": 1.7320508075688772}}, "df": 8, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {"acmc.main.trud_install": {"tf": 1}, "acmc.main.omop_install": {"tf": 1}}, "df": 2, "s": {"docs": {"acmc.omop.install": {"tf": 1}}, "df": 1}}}}}, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {"acmc.parse.Proto.raise_exception": {"tf": 1.4142135623730951}}, "df": 1}}}}, "i": {"docs": {}, "df": 0, "t": {"docs": {"acmc.main.phen_init": {"tf": 1}}, "df": 1, "i": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"acmc.phen.init": {"tf": 1}}, "df": 1}}}}}, "v": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {"acmc.parse.InvalidCodesException": {"tf": 1}}, "df": 1, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"acmc.parse.CodesError": {"tf": 1}, "acmc.parse.CodeTypeParser": {"tf": 1}}, "df": 2}}}}}}}}}}}}}}}}}}}, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "x": {"docs": {"acmc.parse.Proto": {"tf": 1}, "acmc.parse.Read3": {"tf": 1}, "acmc.parse.Icd10": {"tf": 1}, "acmc.parse.Snomed": {"tf": 1}, "acmc.parse.Opcs4": {"tf": 1}, "acmc.parse.Atc": {"tf": 1}, "acmc.parse.Med": {"tf": 1}, "acmc.parse.Cprd": {"tf": 1}}, "df": 8}}, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "y": {"docs": {"acmc.phen.preprocess_source_concepts": {"tf": 1}}, "df": 1}}}}}}}}}}, "c": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"acmc.phen.construct_git_url": {"tf": 1}}, "df": 1}}}}}}}, "t": {"docs": {}, "df": 0, "o": {"docs": {"acmc.phen.translate_codes": {"tf": 1}, "acmc.phen.export": {"tf": 1}, "acmc.phen.copy": {"tf": 1}}, "df": 3}}, "f": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"acmc.trud.get_releases": {"tf": 1}}, "df": 1}}}}}}}}}}, "f": {"docs": {"acmc.omop.install": {"tf": 1.7320508075688772}, "acmc.omop.clear": {"tf": 1}, "acmc.omop.delete": {"tf": 1}, "acmc.omop.table_exists": {"tf": 1.4142135623730951}, "acmc.omop.vocab_exists": {"tf": 1.4142135623730951}, "acmc.omop.concept_set_exist": {"tf": 1.4142135623730951}, "acmc.parse.CodesError": {"tf": 1}, "acmc.parse.Proto": {"tf": 1.4142135623730951}, "acmc.parse.Read3": {"tf": 1.4142135623730951}, "acmc.parse.Icd10": {"tf": 1.4142135623730951}, "acmc.parse.Snomed": {"tf": 1.4142135623730951}, "acmc.parse.Opcs4": {"tf": 1.4142135623730951}, "acmc.parse.Atc": {"tf": 1.4142135623730951}, "acmc.parse.Med": {"tf": 1.4142135623730951}, "acmc.parse.Cprd": {"tf": 1.4142135623730951}, "acmc.parse.CodeTypeParser": {"tf": 1}, "acmc.phen.check_delete_dir": {"tf": 1.4142135623730951}, "acmc.phen.fork": {"tf": 1.7320508075688772}}, "df": 18}, "s": {"docs": {"acmc.omop.install": {"tf": 1}, "acmc.parse.Proto": {"tf": 1}, "acmc.parse.Read2": {"tf": 1}, "acmc.parse.Read3": {"tf": 1}, "acmc.parse.Icd10": {"tf": 1}, "acmc.parse.Snomed": {"tf": 1}, "acmc.parse.Opcs4": {"tf": 1}, "acmc.parse.Atc": {"tf": 1}, "acmc.parse.Med": {"tf": 1}, "acmc.parse.Cprd": {"tf": 1}, "acmc.phen.fork": {"tf": 1.7320508075688772}, "acmc.phen.validate": {"tf": 1}}, "df": 12, "s": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"acmc.parse.Proto": {"tf": 1}, "acmc.parse.Proto.process": {"tf": 1}, "acmc.parse.Read3": {"tf": 1}, "acmc.parse.Icd10": {"tf": 1}, "acmc.parse.Snomed": {"tf": 1}, "acmc.parse.Opcs4": {"tf": 1}, "acmc.parse.Atc": {"tf": 1}, "acmc.parse.Med": {"tf": 1}, "acmc.parse.Cprd": {"tf": 1}}, "df": 9}}}}}, "d": {"docs": {"acmc.omop.vocab_exists": {"tf": 1.7320508075688772}}, "df": 1, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "y": {"docs": {"acmc.parse.Proto.process": {"tf": 1}}, "df": 1}}}}}}}, "t": {"docs": {"acmc.parse.Proto.raise_exception": {"tf": 1}, "acmc.parse.Read2": {"tf": 1}, "acmc.phen.create_empty_git_dir": {"tf": 1}}, "df": 3, "e": {"docs": {}, "df": 0, "m": {"docs": {"acmc.phen.extract_clean_deepdiff_keys": {"tf": 1.4142135623730951}, "acmc.trud.get_releases": {"tf": 1}, "acmc.trud.download_release_file": {"tf": 1}}, "df": 3}}}}, "v": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {"acmc.phen.fork": {"tf": 1}}, "df": 1, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"acmc.main.phen_validate": {"tf": 1}}, "df": 1, "s": {"docs": {"acmc.parse.Read2": {"tf": 1}, "acmc.phen.validate": {"tf": 1}}, "df": 2}}, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"acmc.parse.Read2": {"tf": 1}, "acmc.phen.PhenValidationException": {"tf": 1}}, "df": 2}}}}}}}, "u": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"acmc.omop.install": {"tf": 1.4142135623730951}, "acmc.phen.fork": {"tf": 1.7320508075688772}}, "df": 2}}}}}}}}, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"acmc.phen.construct_git_url": {"tf": 1}}, "df": 1}}}}}}}, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "b": {"docs": {"acmc.omop.vocab_exists": {"tf": 1}}, "df": 1, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"acmc.omop": {"tf": 1}, "acmc.omop.install": {"tf": 1.4142135623730951}, "acmc.omop.write_version_file": {"tf": 1}}, "df": 3}}}, "y": {"docs": {"acmc.omop.vocab_exists": {"tf": 1.7320508075688772}, "acmc.omop.export": {"tf": 1.4142135623730951}}, "df": 2}}}}, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"acmc.omop.write_version_file": {"tf": 1}}, "df": 1}}}}}}}}}}}, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"acmc.omop.install": {"tf": 1.4142135623730951}, "acmc.omop.write_version_file": {"tf": 1.7320508075688772}, "acmc.omop.export": {"tf": 1.7320508075688772}, "acmc.phen.fork": {"tf": 2}, "acmc.phen.export": {"tf": 1}, "acmc.phen.copy": {"tf": 1}}, "df": 6, "s": {"docs": {"acmc.phen.diff_phen": {"tf": 1}}, "df": 1}}}}}, "i": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "y": {"docs": {"acmc.parse.Proto.verify": {"tf": 1}}, "df": 1}}}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"acmc.omop.install": {"tf": 1}, "acmc.trud.get_releases": {"tf": 1}, "acmc.trud.download_release_file": {"tf": 1}}, "df": 3}}}}}, "a": {"docs": {}, "df": 0, "d": {"2": {"docs": {"acmc.parse.Read2": {"tf": 1.4142135623730951}}, "df": 1}, "docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"acmc.omop.install": {"tf": 1}}, "df": 1}}}}}, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"acmc.omop.table_exists": {"tf": 1}, "acmc.omop.vocab_exists": {"tf": 1}, "acmc.omop.concept_set_exist": {"tf": 1}, "acmc.omop.export": {"tf": 1}, "acmc.phen.check_delete_dir": {"tf": 1}, "acmc.phen.translate_codes": {"tf": 1}, "acmc.phen.extract_clean_deepdiff_keys": {"tf": 1}}, "df": 7}}}}, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"acmc.trud.get_releases": {"tf": 1}}, "df": 1}}}}}}, "p": {"docs": {}, "df": 0, "o": {"docs": {"acmc.phen.fork": {"tf": 2.8284271247461903}, "acmc.phen.init": {"tf": 1}, "acmc.phen.validate": {"tf": 1}, "acmc.phen.publish": {"tf": 1}, "acmc.phen.export": {"tf": 1}, "acmc.phen.copy": {"tf": 1}}, "df": 6, "r": {"docs": {}, "df": 0, "t": {"docs": {"acmc.parse.CodesError": {"tf": 1}, "acmc.parse.CodeTypeParser": {"tf": 1}}, "df": 2}}}}, "s": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"acmc.parse.Proto": {"tf": 1}, "acmc.parse.Read3": {"tf": 1}, "acmc.parse.Icd10": {"tf": 1}, "acmc.parse.Snomed": {"tf": 1}, "acmc.parse.Opcs4": {"tf": 1}, "acmc.parse.Atc": {"tf": 1}, "acmc.parse.Med": {"tf": 1}, "acmc.parse.Cprd": {"tf": 1}}, "df": 8, "d": {"docs": {"acmc.parse.InvalidCodesException": {"tf": 1}}, "df": 1}}}}}, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {"acmc.phen.extract_clean_deepdiff_keys": {"tf": 1}}, "df": 1}}}}, "m": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"acmc.phen.fork": {"tf": 1.7320508075688772}}, "df": 1}}, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"acmc.phen.extract_clean_deepdiff_keys": {"tf": 1}}, "df": 1}}}}}}, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"acmc.parse.Proto.raise_exception": {"tf": 1.7320508075688772}}, "df": 1, "s": {"docs": {"acmc.omop.install": {"tf": 1}, "acmc.omop.clear": {"tf": 1}, "acmc.omop.delete": {"tf": 1}, "acmc.parse.Proto.raise_exception": {"tf": 1}, "acmc.phen.fork": {"tf": 1}}, "df": 5}, "d": {"docs": {"acmc.parse.InvalidCodesException": {"tf": 1}, "acmc.phen.PhenValidationException": {"tf": 1}}, "df": 2}}}}}, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"acmc.parse.Read2": {"tf": 1}}, "df": 1}}}}}, "b": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"acmc.omop.install": {"tf": 1}, "acmc.parse.Read2": {"tf": 1}}, "df": 2}}}}, "y": {"docs": {"acmc.omop.install": {"tf": 1.4142135623730951}, "acmc.omop.write_version_file": {"tf": 1}, "acmc.parse.InvalidCodesException": {"tf": 1}, "acmc.phen.publish": {"tf": 1}}, "df": 4}, "o": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {"acmc.omop.table_exists": {"tf": 1}, "acmc.omop.vocab_exists": {"tf": 1}, "acmc.omop.concept_set_exist": {"tf": 1}}, "df": 3, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {"acmc.phen.check_delete_dir": {"tf": 1}}, "df": 1}}}}}}, "e": {"docs": {"acmc.omop.export": {"tf": 1}, "acmc.parse.InvalidCodesException": {"tf": 1}, "acmc.phen.check_delete_dir": {"tf": 1.4142135623730951}, "acmc.phen.fork": {"tf": 1}, "acmc.phen.preprocess_source_concepts": {"tf": 1}}, "df": 5, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"acmc.parse.Proto.raise_exception": {"tf": 1}}, "df": 1}}}}}, "t": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {"acmc.phen.diff_phen": {"tf": 1}}, "df": 1}}}}}}}, "z": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "p": {"docs": {"acmc.omop.install": {"tf": 2}}, "df": 1}}}, "n": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {"acmc.omop.install": {"tf": 1.4142135623730951}, "acmc.omop.clear": {"tf": 1}, "acmc.omop.delete": {"tf": 1}, "acmc.parse.Proto": {"tf": 1}, "acmc.parse.Proto.raise_exception": {"tf": 1.7320508075688772}, "acmc.parse.Proto.process": {"tf": 1}, "acmc.parse.Read3": {"tf": 1}, "acmc.parse.Icd10": {"tf": 1}, "acmc.parse.Snomed": {"tf": 1}, "acmc.parse.Opcs4": {"tf": 1}, "acmc.parse.Atc": {"tf": 1}, "acmc.parse.Med": {"tf": 1}, "acmc.parse.Cprd": {"tf": 1}, "acmc.phen.fork": {"tf": 1.4142135623730951}, "acmc.phen.preprocess_source_concepts": {"tf": 1}}, "df": 15}, "n": {"docs": {}, "df": 0, "e": {"docs": {"acmc.phen.fork": {"tf": 1}}, "df": 1}}}, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"acmc.omop.table_exists": {"tf": 1.4142135623730951}, "acmc.omop.concept_set_exist": {"tf": 1.4142135623730951}, "acmc.parse.Proto": {"tf": 1}, "acmc.parse.Read3": {"tf": 1}, "acmc.parse.Icd10": {"tf": 1}, "acmc.parse.Snomed": {"tf": 1}, "acmc.parse.Opcs4": {"tf": 1}, "acmc.parse.Atc": {"tf": 1}, "acmc.parse.Med": {"tf": 1}, "acmc.parse.Cprd": {"tf": 1}, "acmc.phen.extract_concepts": {"tf": 1.4142135623730951}}, "df": 11, "s": {"docs": {"acmc.phen.extract_clean_deepdiff_keys": {"tf": 1}}, "df": 1}}}}, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "y": {"docs": {"acmc.parse.Read2": {"tf": 1}}, "df": 1}}}}}}}, "w": {"docs": {"acmc.phen.fork": {"tf": 1.7320508075688772}}, "df": 1}}}, "e": {"docs": {"acmc.phen.extract_clean_deepdiff_keys": {"tf": 1}}, "df": 1, "x": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"acmc.omop.install": {"tf": 1}, "acmc.omop.clear": {"tf": 1}, "acmc.omop.delete": {"tf": 1}}, "df": 3, "s": {"docs": {"acmc.omop.table_exists": {"tf": 1.4142135623730951}, "acmc.omop.vocab_exists": {"tf": 1.4142135623730951}, "acmc.omop.concept_set_exist": {"tf": 1.4142135623730951}}, "df": 3}}}}, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"acmc.omop.install": {"tf": 1}, "acmc.parse.InvalidCodesException": {"tf": 1}, "acmc.parse.Proto.raise_exception": {"tf": 1.4142135623730951}, "acmc.phen.PhenValidationException": {"tf": 1}}, "df": 4}}}}}}}, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {"acmc.omop.export": {"tf": 1.4142135623730951}}, "df": 1, "e": {"docs": {}, "df": 0, "d": {"docs": {"acmc.omop.export": {"tf": 1}}, "df": 1}}, "s": {"docs": {"acmc.phen.export": {"tf": 1}}, "df": 1}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"acmc.parse.Proto.raise_exception": {"tf": 1}}, "df": 1}}}}}}}}, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"acmc.parse.Proto.raise_exception": {"tf": 1}}, "df": 1}}}}}, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "s": {"docs": {"acmc.parse.Read2": {"tf": 1}}, "df": 1}}}}, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"acmc.phen.extract_clean_deepdiff_keys": {"tf": 1}}, "df": 1, "s": {"docs": {"acmc.phen.extract_concepts": {"tf": 1}, "acmc.phen.extract_clean_deepdiff_keys": {"tf": 1}}, "df": 2}}}}}}}, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"acmc.omop.install": {"tf": 1}, "acmc.parse.CodesError": {"tf": 1}, "acmc.parse.CodeTypeParser": {"tf": 1}}, "df": 3, "s": {"docs": {"acmc.parse.Read2": {"tf": 1}, "acmc.phen.PhenValidationException": {"tf": 1}}, "df": 2}}}}}, "n": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"acmc.parse.Read2": {"tf": 1}}, "df": 1}}}}}, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"acmc.phen.construct_git_url": {"tf": 1}}, "df": 1}}}}}}}}}}, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "h": {"docs": {"acmc.phen.preprocess_source_concepts": {"tf": 1}, "acmc.phen.translate_codes": {"tf": 1}}, "df": 2}}}}, "w": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"acmc.omop.write_version_file": {"tf": 1}}, "df": 1}}, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {"acmc.omop.export": {"tf": 1}}, "df": 1}}}}}}, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"acmc.omop.export": {"tf": 1}, "acmc.phen.fork": {"tf": 1}}, "df": 2}}, "n": {"docs": {"acmc.parse.InvalidCodesException": {"tf": 1}, "acmc.parse.Read2": {"tf": 1}, "acmc.phen.PhenValidationException": {"tf": 1}}, "df": 3}}, "a": {"docs": {}, "df": 0, "t": {"docs": {"acmc.parse.Proto": {"tf": 1}, "acmc.parse.Read3": {"tf": 1}, "acmc.parse.Icd10": {"tf": 1}, "acmc.parse.Snomed": {"tf": 1}, "acmc.parse.Opcs4": {"tf": 1}, "acmc.parse.Atc": {"tf": 1}, "acmc.parse.Med": {"tf": 1}, "acmc.parse.Cprd": {"tf": 1}}, "df": 8}}}, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {"acmc.parse.Proto.process": {"tf": 1}, "acmc.phen.create_empty_git_dir": {"tf": 1}, "acmc.phen.fork": {"tf": 1}, "acmc.phen.init": {"tf": 1}, "acmc.phen.validate": {"tf": 1}}, "df": 5}}, "l": {"docs": {}, "df": 0, "l": {"docs": {"acmc.phen.preprocess_source_concepts": {"tf": 1}}, "df": 1}}}, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"acmc.phen.check_delete_dir": {"tf": 1}}, "df": 1}}}}}, "q": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "y": {"docs": {"acmc.omop.table_exists": {"tf": 1}, "acmc.omop.vocab_exists": {"tf": 1}, "acmc.omop.concept_set_exist": {"tf": 1}}, "df": 3}}}}}, "g": {"docs": {"acmc.phen.extract_clean_deepdiff_keys": {"tf": 1}}, "df": 1, "i": {"docs": {}, "df": 0, "t": {"docs": {"acmc.phen.construct_git_url": {"tf": 1}, "acmc.phen.create_empty_git_dir": {"tf": 1}, "acmc.phen.fork": {"tf": 1}, "acmc.phen.init": {"tf": 1}, "acmc.phen.validate": {"tf": 1}}, "df": 5, "h": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "b": {"docs": {"acmc.phen.construct_git_url": {"tf": 1}}, "df": 1}}}, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "b": {"docs": {"acmc.phen.construct_git_url": {"tf": 1}}, "df": 1}}}, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "p": {"docs": {"acmc.phen.create_empty_git_dir": {"tf": 1}}, "df": 1}}}}}, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {"acmc.trud.download_release_file": {"tf": 1}}, "df": 1}}}}}, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "y": {"docs": {"acmc.phen.extract_clean_deepdiff_keys": {"tf": 1.4142135623730951}}, "df": 1, "s": {"docs": {"acmc.phen.extract_clean_deepdiff_keys": {"tf": 1}}, "df": 1}}}}}}}, "pipeline": ["trimmer"], "_isPrebuiltIndex": true};
+    /** pdoc search index */const docs = {"version": "0.9.5", "fields": ["qualname", "fullname", "annotation", "default_value", "signature", "bases", "doc"], "ref": "fullname", "documentStore": {"docs": {"acmc": {"fullname": "acmc", "modulename": "acmc", "kind": "module", "doc": "<p></p>\n"}, "acmc.logging_config": {"fullname": "acmc.logging_config", "modulename": "acmc.logging_config", "kind": "module", "doc": "<p>logging_config.py</p>\n\n<p>This module defines functions to setup logging for acmc across all module.</p>\n"}, "acmc.logging_config.DEFAULT_LOG_FILE": {"fullname": "acmc.logging_config.DEFAULT_LOG_FILE", "modulename": "acmc.logging_config", "qualname": "DEFAULT_LOG_FILE", "kind": "variable", "doc": "<p>The default acmc application log filename.</p>\n", "default_value": "&#x27;acmc.log&#x27;"}, "acmc.logging_config.setup_logger": {"fullname": "acmc.logging_config.setup_logger", "modulename": "acmc.logging_config", "qualname": "setup_logger", "kind": "function", "doc": "<p>Sets up acmc logger as a singleton outputing to file and sysout syserr.</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">log_level</span><span class=\"p\">:</span> <span class=\"nb\">int</span> <span class=\"o\">=</span> <span class=\"mi\">20</span></span><span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.logging_config.set_log_level": {"fullname": "acmc.logging_config.set_log_level", "modulename": "acmc.logging_config", "qualname": "set_log_level", "kind": "function", "doc": "<p>Sets the log level for the acmc logger.</p>\n\n<h6 id=\"arguments\">Arguments:</h6>\n\n<ul>\n<li><strong>log_level (int):</strong>  log level from the python logging libraru</li>\n</ul>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">log_level</span><span class=\"p\">:</span> <span class=\"nb\">int</span></span><span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.main": {"fullname": "acmc.main", "modulename": "acmc.main", "kind": "module", "doc": "<p>main.py module</p>\n\n<p>This module provides the functionality for the acmc command line interface</p>\n"}, "acmc.main.DEFAULT_WORKSPACE_PATH": {"fullname": "acmc.main.DEFAULT_WORKSPACE_PATH", "modulename": "acmc.main", "qualname": "DEFAULT_WORKSPACE_PATH", "kind": "variable", "doc": "<p>Default phenotype workspace path</p>\n", "default_value": "PosixPath(&#x27;workspace&#x27;)"}, "acmc.main.main": {"fullname": "acmc.main.main", "modulename": "acmc.main", "qualname": "main", "kind": "function", "doc": "<p></p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.omop": {"fullname": "acmc.omop", "modulename": "acmc.omop", "kind": "module", "doc": "<p>omop.py module</p>\n\n<p>This module provides functionality to manage OMOP vocabularies.</p>\n"}, "acmc.omop.VOCAB_PATH": {"fullname": "acmc.omop.VOCAB_PATH", "modulename": "acmc.omop", "qualname": "VOCAB_PATH", "kind": "variable", "doc": "<p>Default OMOP vocabulary path</p>\n", "default_value": "PosixPath(&#x27;vocab/omop&#x27;)"}, "acmc.omop.OMOP_CDM_Version": {"fullname": "acmc.omop.OMOP_CDM_Version", "modulename": "acmc.omop", "qualname": "OMOP_CDM_Version", "kind": "variable", "doc": "<p>Supported OMOP CDM version number</p>\n", "default_value": "&#x27;54&#x27;"}, "acmc.omop.OMOP_DB_FILENAME": {"fullname": "acmc.omop.OMOP_DB_FILENAME", "modulename": "acmc.omop", "qualname": "OMOP_DB_FILENAME", "kind": "variable", "doc": "<p>Default OMOP sqllite database filename</p>\n", "default_value": "&#x27;omop_54.sqlite&#x27;"}, "acmc.omop.DB_PATH": {"fullname": "acmc.omop.DB_PATH", "modulename": "acmc.omop", "qualname": "DB_PATH", "kind": "variable", "doc": "<p>Default OMOP sqllite database path</p>\n", "default_value": "PosixPath(&#x27;vocab/omop/omop_54.sqlite&#x27;)"}, "acmc.omop.VERSION_FILE": {"fullname": "acmc.omop.VERSION_FILE", "modulename": "acmc.omop", "qualname": "VERSION_FILE", "kind": "variable", "doc": "<p>Default OMOP version file</p>\n", "default_value": "&#x27;omop_version.yml&#x27;"}, "acmc.omop.VERSION_PATH": {"fullname": "acmc.omop.VERSION_PATH", "modulename": "acmc.omop", "qualname": "VERSION_PATH", "kind": "variable", "doc": "<p>Default OMOP version path</p>\n", "default_value": "PosixPath(&#x27;vocab/omop/omop_version.yml&#x27;)"}, "acmc.omop.EXPORT_FILE": {"fullname": "acmc.omop.EXPORT_FILE", "modulename": "acmc.omop", "qualname": "EXPORT_FILE", "kind": "variable", "doc": "<p>Default OMOP export database filename</p>\n", "default_value": "&#x27;omop_54_export.sqlite&#x27;"}, "acmc.omop.vocabularies": {"fullname": "acmc.omop.vocabularies", "modulename": "acmc.omop", "qualname": "vocabularies", "kind": "variable", "doc": "<p>Required OMOP vocabularies definition</p>\n", "default_value": "{&#x27;source&#x27;: &#x27;OHDSI Athena&#x27;, &#x27;url&#x27;: &#x27;https://athena.ohdsi.org/vocabulary/list&#x27;, &#x27;cdm_version&#x27;: &#x27;54&#x27;, &#x27;version&#x27;: &#x27;&#x27;, &#x27;vocabularies&#x27;: [{&#x27;id&#x27;: 1, &#x27;name&#x27;: &#x27;SNOMED&#x27;}, {&#x27;id&#x27;: 2, &#x27;name&#x27;: &#x27;ICD9CM&#x27;}, {&#x27;id&#x27;: 17, &#x27;name&#x27;: &#x27;Readv2&#x27;}, {&#x27;id&#x27;: 21, &#x27;name&#x27;: &#x27;ATC&#x27;}, {&#x27;id&#x27;: 55, &#x27;name&#x27;: &#x27;OPCS4&#x27;}, {&#x27;id&#x27;: 57, &#x27;name&#x27;: &#x27;HES Specialty&#x27;}, {&#x27;id&#x27;: 70, &#x27;name&#x27;: &#x27;ICD10CM&#x27;}, {&#x27;id&#x27;: 75, &#x27;name&#x27;: &#x27;dm+d&#x27;}, {&#x27;id&#x27;: 144, &#x27;name&#x27;: &#x27;UK Biobank&#x27;}, {&#x27;id&#x27;: 154, &#x27;name&#x27;: &#x27;NHS Ethnic Category&#x27;}, {&#x27;id&#x27;: 155, &#x27;name&#x27;: &#x27;NHS Place of Service&#x27;}], &#x27;tables&#x27;: []}"}, "acmc.omop.omop_vocab_types": {"fullname": "acmc.omop.omop_vocab_types", "modulename": "acmc.omop", "qualname": "omop_vocab_types", "kind": "variable", "doc": "<p>Type mappings from acmc medical coding types to OMOP vocabulary types</p>\n", "default_value": "{&#x27;read2&#x27;: &#x27;Read&#x27;, &#x27;read3&#x27;: None, &#x27;icd10&#x27;: &#x27;ICD10CM&#x27;, &#x27;snomed&#x27;: &#x27;SNOMED&#x27;, &#x27;opcs4&#x27;: &#x27;OPCS4&#x27;, &#x27;atc&#x27;: &#x27;ATC&#x27;, &#x27;med&#x27;: None, &#x27;cprd&#x27;: None}"}, "acmc.omop.install": {"fullname": "acmc.omop.install", "modulename": "acmc.omop", "qualname": "install", "kind": "function", "doc": "<p>\"Installs the OMOP release csv files in a file-based sql database</p>\n\n<h6 id=\"arguments\">Arguments:</h6>\n\n<ul>\n<li><strong>omop_zip_file (str):</strong>  vocabularies zip file distributed by OHDSI Athena</li>\n<li><strong>version (str):</strong>  version of the vocabularies distributed by OHDSI Athena</li>\n</ul>\n\n<h6 id=\"raises\">Raises:</h6>\n\n<ul>\n<li><strong>ValueError:</strong>  if the zip file does not exist</li>\n<li><strong>ValueError:</strong>  if the file is not a zip file</li>\n<li><strong>Exception:</strong>  if error reading omop csv files</li>\n</ul>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">omop_zip_file</span><span class=\"p\">:</span> <span class=\"nb\">str</span>, </span><span class=\"param\"><span class=\"n\">version</span><span class=\"p\">:</span> <span class=\"nb\">str</span></span><span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.omop.write_version_file": {"fullname": "acmc.omop.write_version_file", "modulename": "acmc.omop", "qualname": "write_version_file", "kind": "function", "doc": "<p>Writes the OMOP vocaburaries and version to a file</p>\n\n<h6 id=\"arguments\">Arguments:</h6>\n\n<ul>\n<li><strong>version (str):</strong>  version of the vocabularies distributed by OHDSI Athena</li>\n</ul>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">version</span><span class=\"p\">:</span> <span class=\"nb\">str</span></span><span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.omop.clear": {"fullname": "acmc.omop.clear", "modulename": "acmc.omop", "qualname": "clear", "kind": "function", "doc": "<p>Clears the OMOP sql database</p>\n\n<h6 id=\"arguments\">Arguments:</h6>\n\n<ul>\n<li><strong>db_path (Path):</strong>  the path to the omop sqllite database</li>\n</ul>\n\n<h6 id=\"raises\">Raises:</h6>\n\n<ul>\n<li><strong>FileNotFoundError:</strong>  if the omop sqllite database does not exist</li>\n</ul>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">db_path</span><span class=\"p\">:</span> <span class=\"n\">pathlib</span><span class=\"o\">.</span><span class=\"n\">Path</span></span><span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.omop.delete": {"fullname": "acmc.omop.delete", "modulename": "acmc.omop", "qualname": "delete", "kind": "function", "doc": "<p>Deletes the OMOP sql database</p>\n\n<h6 id=\"arguments\">Arguments:</h6>\n\n<ul>\n<li><strong>db_path (Path):</strong>  the path to the omop sqllite database</li>\n</ul>\n\n<h6 id=\"raises\">Raises:</h6>\n\n<ul>\n<li><strong>FileNotFoundError:</strong>  if the omop sqllite database does not exist</li>\n</ul>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">db_path</span><span class=\"p\">:</span> <span class=\"n\">pathlib</span><span class=\"o\">.</span><span class=\"n\">Path</span></span><span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.omop.table_exists": {"fullname": "acmc.omop.table_exists", "modulename": "acmc.omop", "qualname": "table_exists", "kind": "function", "doc": "<p>Query to check if the table exists</p>\n\n<h6 id=\"arguments\">Arguments:</h6>\n\n<ul>\n<li><strong>cursor (sqlite3.Cursor):</strong>  a sqllite database cursor</li>\n<li><strong>table_name (str):</strong>  the table name to check</li>\n</ul>\n\n<h6 id=\"returns\">Returns:</h6>\n\n<blockquote>\n  <p>bool: true if table exists</p>\n</blockquote>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">cursor</span><span class=\"p\">:</span> <span class=\"n\">sqlite3</span><span class=\"o\">.</span><span class=\"n\">Cursor</span>, </span><span class=\"param\"><span class=\"n\">table_name</span><span class=\"p\">:</span> <span class=\"nb\">str</span></span><span class=\"return-annotation\">) -> <span class=\"nb\">bool</span>:</span></span>", "funcdef": "def"}, "acmc.omop.vocab_exists": {"fullname": "acmc.omop.vocab_exists", "modulename": "acmc.omop", "qualname": "vocab_exists", "kind": "function", "doc": "<p>Query to check if the vocabulary exists</p>\n\n<h6 id=\"arguments\">Arguments:</h6>\n\n<ul>\n<li><strong>cursor (sqlite3.Cursor):</strong>  a sqllite database cursor</li>\n<li><strong>vocab_id (str):</strong>  the vocabulary id to check</li>\n</ul>\n\n<h6 id=\"returns\">Returns:</h6>\n\n<blockquote>\n  <p>bool: true if vocabulary id exists</p>\n</blockquote>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">cursor</span><span class=\"p\">:</span> <span class=\"n\">sqlite3</span><span class=\"o\">.</span><span class=\"n\">Cursor</span>, </span><span class=\"param\"><span class=\"n\">vocab_id</span><span class=\"p\">:</span> <span class=\"nb\">str</span></span><span class=\"return-annotation\">) -> <span class=\"nb\">bool</span>:</span></span>", "funcdef": "def"}, "acmc.omop.concept_set_exist": {"fullname": "acmc.omop.concept_set_exist", "modulename": "acmc.omop", "qualname": "concept_set_exist", "kind": "function", "doc": "<p>Query to check if the concept set exists</p>\n\n<h6 id=\"arguments\">Arguments:</h6>\n\n<ul>\n<li><strong>cursor (sqlite3.Cursor):</strong>  a sqllite database cursor</li>\n<li><strong>concept_set_name (str):</strong>  the concept set name to check</li>\n</ul>\n\n<h6 id=\"returns\">Returns:</h6>\n\n<blockquote>\n  <p>bool: true if concept set exists</p>\n</blockquote>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">cursor</span><span class=\"p\">:</span> <span class=\"n\">sqlite3</span><span class=\"o\">.</span><span class=\"n\">Cursor</span>, </span><span class=\"param\"><span class=\"n\">concept_set_name</span><span class=\"p\">:</span> <span class=\"nb\">str</span></span><span class=\"return-annotation\">) -> <span class=\"nb\">bool</span>:</span></span>", "funcdef": "def"}, "acmc.omop.export": {"fullname": "acmc.omop.export", "modulename": "acmc.omop", "qualname": "export", "kind": "function", "doc": "<p>Export concept sets to omop database in csv format</p>\n\n<h6 id=\"arguments\">Arguments:</h6>\n\n<ul>\n<li><strong>map_path (Path):</strong>  path to the acmc map directory containing concept sets in csv format</li>\n<li><strong>export_path (Path):</strong>  path to the directory where the omop database csv files are to be written</li>\n<li><strong>version (str):</strong>  phenotype version for omop vocabulary version</li>\n<li><strong>omop_metadata (dict):</strong>  phenotype omop metadata for omop vocabulary metadata</li>\n</ul>\n\n<h6 id=\"returns\">Returns:</h6>\n\n<blockquote>\n  <p>Path: path to the exported sqllite database</p>\n</blockquote>\n", "signature": "<span class=\"signature pdoc-code multiline\">(<span class=\"param\">\t<span class=\"n\">map_path</span><span class=\"p\">:</span> <span class=\"n\">pathlib</span><span class=\"o\">.</span><span class=\"n\">Path</span>,</span><span class=\"param\">\t<span class=\"n\">export_path</span><span class=\"p\">:</span> <span class=\"n\">pathlib</span><span class=\"o\">.</span><span class=\"n\">Path</span>,</span><span class=\"param\">\t<span class=\"n\">version</span><span class=\"p\">:</span> <span class=\"nb\">str</span>,</span><span class=\"param\">\t<span class=\"n\">omop_metadata</span><span class=\"p\">:</span> <span class=\"nb\">dict</span></span><span class=\"return-annotation\">) -> <span class=\"n\">pathlib</span><span class=\"o\">.</span><span class=\"n\">Path</span>:</span></span>", "funcdef": "def"}, "acmc.parse": {"fullname": "acmc.parse", "modulename": "acmc.parse", "kind": "module", "doc": "<p>parse.py module</p>\n\n<p>This module provides functionality to set up medical code translation classes</p>\n"}, "acmc.parse.SUPPORTED_CODE_TYPES": {"fullname": "acmc.parse.SUPPORTED_CODE_TYPES", "modulename": "acmc.parse", "qualname": "SUPPORTED_CODE_TYPES", "kind": "variable", "doc": "<p>List of support medical coding types</p>\n", "default_value": "{&#x27;atc&#x27;, &#x27;read3&#x27;, &#x27;snomed&#x27;, &#x27;opcs4&#x27;, &#x27;read2&#x27;, &#x27;icd10&#x27;}"}, "acmc.parse.CodesError": {"fullname": "acmc.parse.CodesError", "modulename": "acmc.parse", "qualname": "CodesError", "kind": "class", "doc": "<p>A class used in InvalidCodesException to report an error if a code parser check fails</p>\n"}, "acmc.parse.CodesError.__init__": {"fullname": "acmc.parse.CodesError.__init__", "modulename": "acmc.parse", "qualname": "CodesError.__init__", "kind": "function", "doc": "<p></p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">message</span>, </span><span class=\"param\"><span class=\"n\">codes</span><span class=\"o\">=</span><span class=\"kc\">None</span>, </span><span class=\"param\"><span class=\"n\">codes_file</span><span class=\"o\">=</span><span class=\"kc\">None</span>, </span><span class=\"param\"><span class=\"n\">mask</span><span class=\"o\">=</span><span class=\"kc\">None</span>, </span><span class=\"param\"><span class=\"n\">code_type</span><span class=\"o\">=</span><span class=\"kc\">None</span></span>)</span>"}, "acmc.parse.InvalidCodesException": {"fullname": "acmc.parse.InvalidCodesException", "modulename": "acmc.parse", "qualname": "InvalidCodesException", "kind": "class", "doc": "<p>Custom exception class raised when invalid codes are found that cannot be resolved by processing</p>\n", "bases": "builtins.Exception"}, "acmc.parse.InvalidCodesException.__init__": {"fullname": "acmc.parse.InvalidCodesException.__init__", "modulename": "acmc.parse", "qualname": "InvalidCodesException.__init__", "kind": "function", "doc": "<p></p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">error</span></span>)</span>"}, "acmc.parse.InvalidCodesException.error": {"fullname": "acmc.parse.InvalidCodesException.error", "modulename": "acmc.parse", "qualname": "InvalidCodesException.error", "kind": "variable", "doc": "<p></p>\n"}, "acmc.parse.Proto": {"fullname": "acmc.parse.Proto", "modulename": "acmc.parse", "qualname": "Proto", "kind": "class", "doc": "<p>Define checks as list of 3 tuple: (Message, Condition, Process)</p>\n\n<ul>\n<li>Message = The name of the condition (what is printed and logged)</li>\n<li>Condition = True if Passed, and False if Failed</li>\n<li>Process = Aims to resolve all issues that stop condition from passing (Do not change index!)</li>\n</ul>\n"}, "acmc.parse.Proto.__init__": {"fullname": "acmc.parse.Proto.__init__", "modulename": "acmc.parse", "qualname": "Proto.__init__", "kind": "function", "doc": "<p></p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">name</span><span class=\"p\">:</span> <span class=\"nb\">str</span>, </span><span class=\"param\"><span class=\"n\">trud_codes_path</span><span class=\"p\">:</span> <span class=\"n\">Optional</span><span class=\"p\">[</span><span class=\"n\">pathlib</span><span class=\"o\">.</span><span class=\"n\">Path</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"kc\">None</span></span>)</span>"}, "acmc.parse.Proto.checks": {"fullname": "acmc.parse.Proto.checks", "modulename": "acmc.parse", "qualname": "Proto.checks", "kind": "variable", "doc": "<p></p>\n", "annotation": ": list[tuple[str, typing.Callable[[pandas.core.frame.DataFrame], pandas.core.series.Series], typing.Callable[[pandas.core.frame.DataFrame, pathlib.Path], pandas.core.frame.DataFrame]]]"}, "acmc.parse.Proto.name": {"fullname": "acmc.parse.Proto.name", "modulename": "acmc.parse", "qualname": "Proto.name", "kind": "variable", "doc": "<p></p>\n", "annotation": ": str"}, "acmc.parse.Proto.raise_exception": {"fullname": "acmc.parse.Proto.raise_exception", "modulename": "acmc.parse", "qualname": "Proto.raise_exception", "kind": "function", "doc": "<p>Raises an exception inside a lambda function. Python does not allow using raise statement inside lambda because lambda can only contain expressions, not statements. Using raise_exception not raise_ as it's more explict</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"bp\">self</span>, </span><span class=\"param\"><span class=\"n\">ex</span><span class=\"p\">:</span> <span class=\"ne\">Exception</span></span><span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.parse.Proto.in_database": {"fullname": "acmc.parse.Proto.in_database", "modulename": "acmc.parse", "qualname": "Proto.in_database", "kind": "function", "doc": "<p></p>\n", "signature": "<span class=\"signature pdoc-code multiline\">(<span class=\"param\">\t<span class=\"bp\">self</span>,</span><span class=\"param\">\t<span class=\"n\">codes</span><span class=\"p\">:</span> <span class=\"n\">pandas</span><span class=\"o\">.</span><span class=\"n\">core</span><span class=\"o\">.</span><span class=\"n\">frame</span><span class=\"o\">.</span><span class=\"n\">DataFrame</span>,</span><span class=\"param\">\t<span class=\"n\">db</span><span class=\"p\">:</span> <span class=\"n\">pandas</span><span class=\"o\">.</span><span class=\"n\">core</span><span class=\"o\">.</span><span class=\"n\">frame</span><span class=\"o\">.</span><span class=\"n\">DataFrame</span>,</span><span class=\"param\">\t<span class=\"n\">col</span><span class=\"p\">:</span> <span class=\"nb\">str</span></span><span class=\"return-annotation\">) -> <span class=\"n\">pandas</span><span class=\"o\">.</span><span class=\"n\">core</span><span class=\"o\">.</span><span class=\"n\">frame</span><span class=\"o\">.</span><span class=\"n\">DataFrame</span>:</span></span>", "funcdef": "def"}, "acmc.parse.Proto.process": {"fullname": "acmc.parse.Proto.process", "modulename": "acmc.parse", "qualname": "Proto.process", "kind": "function", "doc": "<p>identify issues that do not pass and fix them with define/d process</p>\n", "signature": "<span class=\"signature pdoc-code multiline\">(<span class=\"param\">\t<span class=\"bp\">self</span>,</span><span class=\"param\">\t<span class=\"n\">codes</span><span class=\"p\">:</span> <span class=\"n\">pandas</span><span class=\"o\">.</span><span class=\"n\">core</span><span class=\"o\">.</span><span class=\"n\">frame</span><span class=\"o\">.</span><span class=\"n\">DataFrame</span>,</span><span class=\"param\">\t<span class=\"n\">codes_file</span><span class=\"p\">:</span> <span class=\"n\">pathlib</span><span class=\"o\">.</span><span class=\"n\">Path</span></span><span class=\"return-annotation\">) -> <span class=\"n\">Tuple</span><span class=\"p\">[</span><span class=\"n\">pandas</span><span class=\"o\">.</span><span class=\"n\">core</span><span class=\"o\">.</span><span class=\"n\">frame</span><span class=\"o\">.</span><span class=\"n\">DataFrame</span><span class=\"p\">,</span> <span class=\"nb\">list</span><span class=\"p\">]</span>:</span></span>", "funcdef": "def"}, "acmc.parse.Proto.verify": {"fullname": "acmc.parse.Proto.verify", "modulename": "acmc.parse", "qualname": "Proto.verify", "kind": "function", "doc": "<p>verify codes in codes file</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"bp\">self</span>, </span><span class=\"param\"><span class=\"n\">codes</span><span class=\"p\">:</span> <span class=\"n\">pandas</span><span class=\"o\">.</span><span class=\"n\">core</span><span class=\"o\">.</span><span class=\"n\">frame</span><span class=\"o\">.</span><span class=\"n\">DataFrame</span>, </span><span class=\"param\"><span class=\"n\">codes_file</span><span class=\"p\">:</span> <span class=\"n\">pathlib</span><span class=\"o\">.</span><span class=\"n\">Path</span></span><span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.parse.Read2": {"fullname": "acmc.parse.Read2", "modulename": "acmc.parse", "qualname": "Read2", "kind": "class", "doc": "<p>This Read2 class extends Proto, adding custom validation checks for a dataset of \"Read2\" codes. It ensures that the dataset is loaded, validates the codes based on several rules, and applies corrections or logs errors when necessary.</p>\n", "bases": "Proto"}, "acmc.parse.Read2.checks": {"fullname": "acmc.parse.Read2.checks", "modulename": "acmc.parse", "qualname": "Read2.checks", "kind": "variable", "doc": "<p></p>\n"}, "acmc.parse.Read3": {"fullname": "acmc.parse.Read3", "modulename": "acmc.parse", "qualname": "Read3", "kind": "class", "doc": "<p>Define checks as list of 3 tuple: (Message, Condition, Process)</p>\n\n<ul>\n<li>Message = The name of the condition (what is printed and logged)</li>\n<li>Condition = True if Passed, and False if Failed</li>\n<li>Process = Aims to resolve all issues that stop condition from passing (Do not change index!)</li>\n</ul>\n", "bases": "Proto"}, "acmc.parse.Read3.checks": {"fullname": "acmc.parse.Read3.checks", "modulename": "acmc.parse", "qualname": "Read3.checks", "kind": "variable", "doc": "<p></p>\n"}, "acmc.parse.Icd10": {"fullname": "acmc.parse.Icd10", "modulename": "acmc.parse", "qualname": "Icd10", "kind": "class", "doc": "<p>Define checks as list of 3 tuple: (Message, Condition, Process)</p>\n\n<ul>\n<li>Message = The name of the condition (what is printed and logged)</li>\n<li>Condition = True if Passed, and False if Failed</li>\n<li>Process = Aims to resolve all issues that stop condition from passing (Do not change index!)</li>\n</ul>\n", "bases": "Proto"}, "acmc.parse.Icd10.checks": {"fullname": "acmc.parse.Icd10.checks", "modulename": "acmc.parse", "qualname": "Icd10.checks", "kind": "variable", "doc": "<p></p>\n"}, "acmc.parse.Snomed": {"fullname": "acmc.parse.Snomed", "modulename": "acmc.parse", "qualname": "Snomed", "kind": "class", "doc": "<p>Define checks as list of 3 tuple: (Message, Condition, Process)</p>\n\n<ul>\n<li>Message = The name of the condition (what is printed and logged)</li>\n<li>Condition = True if Passed, and False if Failed</li>\n<li>Process = Aims to resolve all issues that stop condition from passing (Do not change index!)</li>\n</ul>\n", "bases": "Proto"}, "acmc.parse.Snomed.checks": {"fullname": "acmc.parse.Snomed.checks", "modulename": "acmc.parse", "qualname": "Snomed.checks", "kind": "variable", "doc": "<p></p>\n"}, "acmc.parse.Opcs4": {"fullname": "acmc.parse.Opcs4", "modulename": "acmc.parse", "qualname": "Opcs4", "kind": "class", "doc": "<p>Define checks as list of 3 tuple: (Message, Condition, Process)</p>\n\n<ul>\n<li>Message = The name of the condition (what is printed and logged)</li>\n<li>Condition = True if Passed, and False if Failed</li>\n<li>Process = Aims to resolve all issues that stop condition from passing (Do not change index!)</li>\n</ul>\n", "bases": "Proto"}, "acmc.parse.Opcs4.checks": {"fullname": "acmc.parse.Opcs4.checks", "modulename": "acmc.parse", "qualname": "Opcs4.checks", "kind": "variable", "doc": "<p></p>\n"}, "acmc.parse.Atc": {"fullname": "acmc.parse.Atc", "modulename": "acmc.parse", "qualname": "Atc", "kind": "class", "doc": "<p>Define checks as list of 3 tuple: (Message, Condition, Process)</p>\n\n<ul>\n<li>Message = The name of the condition (what is printed and logged)</li>\n<li>Condition = True if Passed, and False if Failed</li>\n<li>Process = Aims to resolve all issues that stop condition from passing (Do not change index!)</li>\n</ul>\n", "bases": "Proto"}, "acmc.parse.Atc.checks": {"fullname": "acmc.parse.Atc.checks", "modulename": "acmc.parse", "qualname": "Atc.checks", "kind": "variable", "doc": "<p></p>\n"}, "acmc.parse.Med": {"fullname": "acmc.parse.Med", "modulename": "acmc.parse", "qualname": "Med", "kind": "class", "doc": "<p>Define checks as list of 3 tuple: (Message, Condition, Process)</p>\n\n<ul>\n<li>Message = The name of the condition (what is printed and logged)</li>\n<li>Condition = True if Passed, and False if Failed</li>\n<li>Process = Aims to resolve all issues that stop condition from passing (Do not change index!)</li>\n</ul>\n", "bases": "Proto"}, "acmc.parse.Med.checks": {"fullname": "acmc.parse.Med.checks", "modulename": "acmc.parse", "qualname": "Med.checks", "kind": "variable", "doc": "<p></p>\n"}, "acmc.parse.Cprd": {"fullname": "acmc.parse.Cprd", "modulename": "acmc.parse", "qualname": "Cprd", "kind": "class", "doc": "<p>Define checks as list of 3 tuple: (Message, Condition, Process)</p>\n\n<ul>\n<li>Message = The name of the condition (what is printed and logged)</li>\n<li>Condition = True if Passed, and False if Failed</li>\n<li>Process = Aims to resolve all issues that stop condition from passing (Do not change index!)</li>\n</ul>\n", "bases": "Proto"}, "acmc.parse.Cprd.checks": {"fullname": "acmc.parse.Cprd.checks", "modulename": "acmc.parse", "qualname": "Cprd.checks", "kind": "variable", "doc": "<p></p>\n"}, "acmc.parse.CodeTypeParser": {"fullname": "acmc.parse.CodeTypeParser", "modulename": "acmc.parse", "qualname": "CodeTypeParser", "kind": "class", "doc": "<p>A class used in InvalidCodesException to report an error if a code parser check fails</p>\n"}, "acmc.parse.CodeTypeParser.__init__": {"fullname": "acmc.parse.CodeTypeParser.__init__", "modulename": "acmc.parse", "qualname": "CodeTypeParser.__init__", "kind": "function", "doc": "<p></p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">trud_processed_dir</span><span class=\"p\">:</span> <span class=\"n\">pathlib</span><span class=\"o\">.</span><span class=\"n\">Path</span> <span class=\"o\">=</span> <span class=\"n\">PosixPath</span><span class=\"p\">(</span><span class=\"s1\">&#39;vocab/trud/processed&#39;</span><span class=\"p\">)</span></span>)</span>"}, "acmc.parse.CodeTypeParser.code_types": {"fullname": "acmc.parse.CodeTypeParser.code_types", "modulename": "acmc.parse", "qualname": "CodeTypeParser.code_types", "kind": "variable", "doc": "<p></p>\n"}, "acmc.phen": {"fullname": "acmc.phen", "modulename": "acmc.phen", "kind": "module", "doc": "<p>phenotype.py module</p>\n\n<p>This module provides functionality for managing phenotypes.</p>\n"}, "acmc.phen.PHEN_DIR": {"fullname": "acmc.phen.PHEN_DIR", "modulename": "acmc.phen", "qualname": "PHEN_DIR", "kind": "variable", "doc": "<p>Default phenotype directory name</p>\n", "default_value": "&#x27;phen&#x27;"}, "acmc.phen.DEFAULT_PHEN_PATH": {"fullname": "acmc.phen.DEFAULT_PHEN_PATH", "modulename": "acmc.phen", "qualname": "DEFAULT_PHEN_PATH", "kind": "variable", "doc": "<p>Default phenotype directory path</p>\n", "default_value": "PosixPath(&#x27;workspace/phen&#x27;)"}, "acmc.phen.CONCEPTS_DIR": {"fullname": "acmc.phen.CONCEPTS_DIR", "modulename": "acmc.phen", "qualname": "CONCEPTS_DIR", "kind": "variable", "doc": "<p>Default concepts directory name</p>\n", "default_value": "&#x27;concepts&#x27;"}, "acmc.phen.MAP_DIR": {"fullname": "acmc.phen.MAP_DIR", "modulename": "acmc.phen", "qualname": "MAP_DIR", "kind": "variable", "doc": "<p>Default map directory name</p>\n", "default_value": "&#x27;map&#x27;"}, "acmc.phen.CONCEPT_SET_DIR": {"fullname": "acmc.phen.CONCEPT_SET_DIR", "modulename": "acmc.phen", "qualname": "CONCEPT_SET_DIR", "kind": "variable", "doc": "<p>Default concept set directory name</p>\n", "default_value": "&#x27;concept-sets&#x27;"}, "acmc.phen.CSV_PATH": {"fullname": "acmc.phen.CSV_PATH", "modulename": "acmc.phen", "qualname": "CSV_PATH", "kind": "variable", "doc": "<p>Default CSV concept set directory path</p>\n", "default_value": "PosixPath(&#x27;concept-sets/csv&#x27;)"}, "acmc.phen.OMOP_PATH": {"fullname": "acmc.phen.OMOP_PATH", "modulename": "acmc.phen", "qualname": "OMOP_PATH", "kind": "variable", "doc": "<p>Default OMOP concept set directory path</p>\n", "default_value": "PosixPath(&#x27;concept-sets/omop&#x27;)"}, "acmc.phen.DEFAULT_PHEN_DIR_LIST": {"fullname": "acmc.phen.DEFAULT_PHEN_DIR_LIST", "modulename": "acmc.phen", "qualname": "DEFAULT_PHEN_DIR_LIST", "kind": "variable", "doc": "<p>List of default phenotype directories</p>\n", "default_value": "[&#x27;concepts&#x27;, &#x27;map&#x27;, &#x27;concept-sets&#x27;]"}, "acmc.phen.CONFIG_FILE": {"fullname": "acmc.phen.CONFIG_FILE", "modulename": "acmc.phen", "qualname": "CONFIG_FILE", "kind": "variable", "doc": "<p>Default configuration filename</p>\n", "default_value": "&#x27;config.yml&#x27;"}, "acmc.phen.VOCAB_VERSION_FILE": {"fullname": "acmc.phen.VOCAB_VERSION_FILE", "modulename": "acmc.phen", "qualname": "VOCAB_VERSION_FILE", "kind": "variable", "doc": "<p>Default vocabulary version filename</p>\n", "default_value": "&#x27;vocab_version.yml&#x27;"}, "acmc.phen.SEMANTIC_VERSION_TYPES": {"fullname": "acmc.phen.SEMANTIC_VERSION_TYPES", "modulename": "acmc.phen", "qualname": "SEMANTIC_VERSION_TYPES", "kind": "variable", "doc": "<p>List of semantic version increment types</p>\n", "default_value": "[&#x27;major&#x27;, &#x27;minor&#x27;, &#x27;patch&#x27;]"}, "acmc.phen.DEFAULT_VERSION_INC": {"fullname": "acmc.phen.DEFAULT_VERSION_INC", "modulename": "acmc.phen", "qualname": "DEFAULT_VERSION_INC", "kind": "variable", "doc": "<p>Default semantic version increment type</p>\n", "default_value": "&#x27;patch&#x27;"}, "acmc.phen.DEFAULT_GIT_BRANCH": {"fullname": "acmc.phen.DEFAULT_GIT_BRANCH", "modulename": "acmc.phen", "qualname": "DEFAULT_GIT_BRANCH", "kind": "variable", "doc": "<p>Default phenotype repo branch name</p>\n", "default_value": "&#x27;main&#x27;"}, "acmc.phen.SPLIT_COL_ACTION": {"fullname": "acmc.phen.SPLIT_COL_ACTION", "modulename": "acmc.phen", "qualname": "SPLIT_COL_ACTION", "kind": "variable", "doc": "<p>Split column preprocessing action type</p>\n", "default_value": "&#x27;split_col&#x27;"}, "acmc.phen.CODES_COL_ACTION": {"fullname": "acmc.phen.CODES_COL_ACTION", "modulename": "acmc.phen", "qualname": "CODES_COL_ACTION", "kind": "variable", "doc": "<p>Codes column preprocessing action type</p>\n", "default_value": "&#x27;codes_col&#x27;"}, "acmc.phen.DIVIDE_COL_ACTION": {"fullname": "acmc.phen.DIVIDE_COL_ACTION", "modulename": "acmc.phen", "qualname": "DIVIDE_COL_ACTION", "kind": "variable", "doc": "<p>Divide column preprocessing action type</p>\n", "default_value": "&#x27;divide_col&#x27;"}, "acmc.phen.COL_ACTIONS": {"fullname": "acmc.phen.COL_ACTIONS", "modulename": "acmc.phen", "qualname": "COL_ACTIONS", "kind": "variable", "doc": "<p>List of column preprocessing action types</p>\n", "default_value": "[&#x27;split_col&#x27;, &#x27;codes_col&#x27;, &#x27;divide_col&#x27;]"}, "acmc.phen.CODE_FILE_TYPES": {"fullname": "acmc.phen.CODE_FILE_TYPES", "modulename": "acmc.phen", "qualname": "CODE_FILE_TYPES", "kind": "variable", "doc": "<p>List of supported source concept coding list file types</p>\n", "default_value": "[&#x27;.xlsx&#x27;, &#x27;.xls&#x27;, &#x27;.csv&#x27;]"}, "acmc.phen.CONFIG_SCHEMA": {"fullname": "acmc.phen.CONFIG_SCHEMA", "modulename": "acmc.phen", "qualname": "CONFIG_SCHEMA", "kind": "variable", "doc": "<p>Phenotype config.yml schema definition</p>\n", "default_value": "{&#x27;phenotype&#x27;: {&#x27;type&#x27;: &#x27;dict&#x27;, &#x27;required&#x27;: True, &#x27;schema&#x27;: {&#x27;version&#x27;: {&#x27;type&#x27;: &#x27;string&#x27;, &#x27;required&#x27;: True, &#x27;regex&#x27;: &#x27;^\\\\d+\\\\.\\\\d+\\\\.\\\\d+$&#x27;}, &#x27;omop&#x27;: {&#x27;type&#x27;: &#x27;dict&#x27;, &#x27;required&#x27;: True, &#x27;schema&#x27;: {&#x27;vocabulary_id&#x27;: {&#x27;type&#x27;: &#x27;string&#x27;, &#x27;required&#x27;: True}, &#x27;vocabulary_name&#x27;: {&#x27;type&#x27;: &#x27;string&#x27;, &#x27;required&#x27;: True}, &#x27;vocabulary_reference&#x27;: {&#x27;type&#x27;: &#x27;string&#x27;, &#x27;required&#x27;: True, &#x27;regex&#x27;: &#x27;^https?://.*&#x27;}}}, &#x27;map&#x27;: {&#x27;type&#x27;: &#x27;list&#x27;, &#x27;schema&#x27;: {&#x27;type&#x27;: &#x27;string&#x27;, &#x27;allowed&#x27;: [&#x27;atc&#x27;, &#x27;read3&#x27;, &#x27;snomed&#x27;, &#x27;opcs4&#x27;, &#x27;read2&#x27;, &#x27;icd10&#x27;]}}, &#x27;concept_sets&#x27;: {&#x27;type&#x27;: &#x27;list&#x27;, &#x27;required&#x27;: True, &#x27;schema&#x27;: {&#x27;type&#x27;: &#x27;dict&#x27;, &#x27;schema&#x27;: {&#x27;name&#x27;: {&#x27;type&#x27;: &#x27;string&#x27;, &#x27;required&#x27;: True}, &#x27;file&#x27;: {&#x27;type&#x27;: &#x27;dict&#x27;, &#x27;required&#x27;: False, &#x27;schema&#x27;: {&#x27;path&#x27;: {&#x27;type&#x27;: &#x27;string&#x27;, &#x27;required&#x27;: True}, &#x27;columns&#x27;: {&#x27;type&#x27;: &#x27;dict&#x27;, &#x27;required&#x27;: True}, &#x27;category&#x27;: {&#x27;type&#x27;: &#x27;string&#x27;}, &#x27;actions&#x27;: {&#x27;type&#x27;: &#x27;dict&#x27;, &#x27;schema&#x27;: {&#x27;divide_col&#x27;: {&#x27;type&#x27;: &#x27;string&#x27;}}}}}, &#x27;metadata&#x27;: {&#x27;type&#x27;: &#x27;dict&#x27;, &#x27;required&#x27;: True}}}}}}}"}, "acmc.phen.PhenValidationException": {"fullname": "acmc.phen.PhenValidationException", "modulename": "acmc.phen", "qualname": "PhenValidationException", "kind": "class", "doc": "<p>Custom exception class raised when validation errors in phenotype configuration file</p>\n", "bases": "builtins.Exception"}, "acmc.phen.PhenValidationException.__init__": {"fullname": "acmc.phen.PhenValidationException.__init__", "modulename": "acmc.phen", "qualname": "PhenValidationException.__init__", "kind": "function", "doc": "<p></p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">message</span>, </span><span class=\"param\"><span class=\"n\">validation_errors</span><span class=\"o\">=</span><span class=\"kc\">None</span></span>)</span>"}, "acmc.phen.PhenValidationException.validation_errors": {"fullname": "acmc.phen.PhenValidationException.validation_errors", "modulename": "acmc.phen", "qualname": "PhenValidationException.validation_errors", "kind": "variable", "doc": "<p></p>\n"}, "acmc.phen.init": {"fullname": "acmc.phen.init", "modulename": "acmc.phen", "qualname": "init", "kind": "function", "doc": "<p>Initial phenotype directory as git repo with standard structure</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">phen_dir</span><span class=\"p\">:</span> <span class=\"nb\">str</span>, </span><span class=\"param\"><span class=\"n\">remote_url</span><span class=\"p\">:</span> <span class=\"nb\">str</span></span><span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.phen.fork": {"fullname": "acmc.phen.fork", "modulename": "acmc.phen", "qualname": "fork", "kind": "function", "doc": "<p>Forks an upstream phenotype in a remote repo at a specific version to a local director, and optionally sets to a new remote origin\"</p>\n\n<h6 id=\"arguments\">Arguments:</h6>\n\n<ul>\n<li><strong>phen_dir (str):</strong>  local directory path where the upstream repo is to be cloned</li>\n<li><strong>upstream_url (str):</strong>  url to the upstream repo</li>\n<li><strong>upstream_version (str):</strong>  version in the upstream repo to clone</li>\n<li><strong>new_origin_url (str, optional):</strong>  url of the remote repo to set as the new origin. Defaults to None.</li>\n</ul>\n\n<h6 id=\"raises\">Raises:</h6>\n\n<ul>\n<li><strong>ValueError:</strong>  if the specified version is not in the upstream repo</li>\n<li><strong>ValueError:</strong>  if the upstream repo is not a valid phenotype repo</li>\n<li><strong>ValueError:</strong>  if there's any other problems with Git</li>\n</ul>\n", "signature": "<span class=\"signature pdoc-code multiline\">(<span class=\"param\">\t<span class=\"n\">phen_dir</span><span class=\"p\">:</span> <span class=\"nb\">str</span>,</span><span class=\"param\">\t<span class=\"n\">upstream_url</span><span class=\"p\">:</span> <span class=\"nb\">str</span>,</span><span class=\"param\">\t<span class=\"n\">upstream_version</span><span class=\"p\">:</span> <span class=\"nb\">str</span>,</span><span class=\"param\">\t<span class=\"n\">new_origin_url</span><span class=\"p\">:</span> <span class=\"nb\">str</span></span><span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.phen.validate": {"fullname": "acmc.phen.validate", "modulename": "acmc.phen", "qualname": "validate", "kind": "function", "doc": "<p>Validates the phenotype directory is a git repo with standard structure</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">phen_dir</span><span class=\"p\">:</span> <span class=\"nb\">str</span></span><span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.phen.translate_codes": {"fullname": "acmc.phen.translate_codes", "modulename": "acmc.phen", "qualname": "translate_codes", "kind": "function", "doc": "<p>Translates each source code type the source coding list into a target type and returns all conversions as a concept set</p>\n", "signature": "<span class=\"signature pdoc-code multiline\">(<span class=\"param\">\t<span class=\"n\">source_df</span><span class=\"p\">:</span> <span class=\"n\">pandas</span><span class=\"o\">.</span><span class=\"n\">core</span><span class=\"o\">.</span><span class=\"n\">frame</span><span class=\"o\">.</span><span class=\"n\">DataFrame</span>,</span><span class=\"param\">\t<span class=\"n\">target_code_type</span><span class=\"p\">:</span> <span class=\"nb\">str</span>,</span><span class=\"param\">\t<span class=\"n\">concept_name</span><span class=\"p\">:</span> <span class=\"nb\">str</span></span><span class=\"return-annotation\">) -> <span class=\"n\">pandas</span><span class=\"o\">.</span><span class=\"n\">core</span><span class=\"o\">.</span><span class=\"n\">frame</span><span class=\"o\">.</span><span class=\"n\">DataFrame</span>:</span></span>", "funcdef": "def"}, "acmc.phen.write_vocab_version": {"fullname": "acmc.phen.write_vocab_version", "modulename": "acmc.phen", "qualname": "write_vocab_version", "kind": "function", "doc": "<p></p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">phen_path</span><span class=\"p\">:</span> <span class=\"n\">pathlib</span><span class=\"o\">.</span><span class=\"n\">Path</span></span><span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.phen.map": {"fullname": "acmc.phen.map", "modulename": "acmc.phen", "qualname": "map", "kind": "function", "doc": "<p></p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">phen_dir</span><span class=\"p\">:</span> <span class=\"nb\">str</span>, </span><span class=\"param\"><span class=\"n\">target_code_type</span><span class=\"p\">:</span> <span class=\"nb\">str</span></span><span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.phen.publish": {"fullname": "acmc.phen.publish", "modulename": "acmc.phen", "qualname": "publish", "kind": "function", "doc": "<p>Publishes updates to the phenotype by commiting all changes to the repo directory</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">phen_dir</span><span class=\"p\">:</span> <span class=\"nb\">str</span>, </span><span class=\"param\"><span class=\"n\">msg</span><span class=\"p\">:</span> <span class=\"nb\">str</span>, </span><span class=\"param\"><span class=\"n\">remote_url</span><span class=\"p\">:</span> <span class=\"nb\">str</span>, </span><span class=\"param\"><span class=\"n\">increment</span><span class=\"p\">:</span> <span class=\"nb\">str</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;patch&#39;</span></span><span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.phen.export": {"fullname": "acmc.phen.export", "modulename": "acmc.phen", "qualname": "export", "kind": "function", "doc": "<p>Exports a phen repo at a specific tagged version into a target directory</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">phen_dir</span><span class=\"p\">:</span> <span class=\"nb\">str</span>, </span><span class=\"param\"><span class=\"n\">version</span><span class=\"p\">:</span> <span class=\"nb\">str</span></span><span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.phen.copy": {"fullname": "acmc.phen.copy", "modulename": "acmc.phen", "qualname": "copy", "kind": "function", "doc": "<p>Copys a phen repo at a specific tagged version into a target directory</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">phen_dir</span><span class=\"p\">:</span> <span class=\"nb\">str</span>, </span><span class=\"param\"><span class=\"n\">target_dir</span><span class=\"p\">:</span> <span class=\"nb\">str</span>, </span><span class=\"param\"><span class=\"n\">version</span><span class=\"p\">:</span> <span class=\"nb\">str</span></span><span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.phen.extract_concepts": {"fullname": "acmc.phen.extract_concepts", "modulename": "acmc.phen", "qualname": "extract_concepts", "kind": "function", "doc": "<p>Extracts concepts as {name: file_path} dictionary and a name set.</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">config_data</span><span class=\"p\">:</span> <span class=\"nb\">dict</span></span><span class=\"return-annotation\">) -> <span class=\"n\">Tuple</span><span class=\"p\">[</span><span class=\"nb\">dict</span><span class=\"p\">,</span> <span class=\"n\">Set</span><span class=\"p\">[</span><span class=\"nb\">str</span><span class=\"p\">]]</span>:</span></span>", "funcdef": "def"}, "acmc.phen.diff_config": {"fullname": "acmc.phen.diff_config", "modulename": "acmc.phen", "qualname": "diff_config", "kind": "function", "doc": "<p></p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">old_config</span><span class=\"p\">:</span> <span class=\"nb\">dict</span>, </span><span class=\"param\"><span class=\"n\">new_config</span><span class=\"p\">:</span> <span class=\"nb\">dict</span></span><span class=\"return-annotation\">) -> <span class=\"nb\">str</span>:</span></span>", "funcdef": "def"}, "acmc.phen.diff_map_files": {"fullname": "acmc.phen.diff_map_files", "modulename": "acmc.phen", "qualname": "diff_map_files", "kind": "function", "doc": "<p></p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">old_map_path</span><span class=\"p\">:</span> <span class=\"n\">pathlib</span><span class=\"o\">.</span><span class=\"n\">Path</span>, </span><span class=\"param\"><span class=\"n\">new_map_path</span><span class=\"p\">:</span> <span class=\"n\">pathlib</span><span class=\"o\">.</span><span class=\"n\">Path</span></span><span class=\"return-annotation\">) -> <span class=\"nb\">str</span>:</span></span>", "funcdef": "def"}, "acmc.phen.diff_phen": {"fullname": "acmc.phen.diff_phen", "modulename": "acmc.phen", "qualname": "diff_phen", "kind": "function", "doc": "<p>Compare the differences between two versions of a phenotype</p>\n", "signature": "<span class=\"signature pdoc-code multiline\">(<span class=\"param\">\t<span class=\"n\">new_phen_path</span><span class=\"p\">:</span> <span class=\"n\">pathlib</span><span class=\"o\">.</span><span class=\"n\">Path</span>,</span><span class=\"param\">\t<span class=\"n\">new_version</span><span class=\"p\">:</span> <span class=\"nb\">str</span>,</span><span class=\"param\">\t<span class=\"n\">old_phen_path</span><span class=\"p\">:</span> <span class=\"n\">pathlib</span><span class=\"o\">.</span><span class=\"n\">Path</span>,</span><span class=\"param\">\t<span class=\"n\">old_version</span><span class=\"p\">:</span> <span class=\"nb\">str</span>,</span><span class=\"param\">\t<span class=\"n\">report_path</span><span class=\"p\">:</span> <span class=\"n\">pathlib</span><span class=\"o\">.</span><span class=\"n\">Path</span></span><span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.phen.diff": {"fullname": "acmc.phen.diff", "modulename": "acmc.phen", "qualname": "diff", "kind": "function", "doc": "<p></p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">phen_dir</span><span class=\"p\">:</span> <span class=\"nb\">str</span>, </span><span class=\"param\"><span class=\"n\">version</span><span class=\"p\">:</span> <span class=\"nb\">str</span>, </span><span class=\"param\"><span class=\"n\">old_phen_dir</span><span class=\"p\">:</span> <span class=\"nb\">str</span>, </span><span class=\"param\"><span class=\"n\">old_version</span><span class=\"p\">:</span> <span class=\"nb\">str</span></span><span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.trud": {"fullname": "acmc.trud", "modulename": "acmc.trud", "kind": "module", "doc": "<p>trud.py module</p>\n\n<p>This module provides functionality to manage installation of the NHS TRUD vocabularies.</p>\n"}, "acmc.trud.FQDN": {"fullname": "acmc.trud.FQDN", "modulename": "acmc.trud", "qualname": "FQDN", "kind": "variable", "doc": "<p>Fully Qualified Domain Name of NHS digital TRUD service API</p>\n", "default_value": "&#x27;isd.digital.nhs.uk&#x27;"}, "acmc.trud.VOCAB_PATH": {"fullname": "acmc.trud.VOCAB_PATH", "modulename": "acmc.trud", "qualname": "VOCAB_PATH", "kind": "variable", "doc": "<p>Default path to the TRUD vocabulary directory relative to the the acmc execution directory</p>\n", "default_value": "PosixPath(&#x27;vocab/trud&#x27;)"}, "acmc.trud.VERSION_FILE": {"fullname": "acmc.trud.VERSION_FILE", "modulename": "acmc.trud", "qualname": "VERSION_FILE", "kind": "variable", "doc": "<p>TRUD version file</p>\n", "default_value": "&#x27;trud_version.yml&#x27;"}, "acmc.trud.VERSION_PATH": {"fullname": "acmc.trud.VERSION_PATH", "modulename": "acmc.trud", "qualname": "VERSION_PATH", "kind": "variable", "doc": "<p>Default path to the TRUD version file</p>\n", "default_value": "PosixPath(&#x27;vocab/trud/trud_version.yml&#x27;)"}, "acmc.trud.DOWNLOADS_PATH": {"fullname": "acmc.trud.DOWNLOADS_PATH", "modulename": "acmc.trud", "qualname": "DOWNLOADS_PATH", "kind": "variable", "doc": "<p>Default path to the TRUD vocabulary downloads directory</p>\n", "default_value": "PosixPath(&#x27;vocab/trud/downloads&#x27;)"}, "acmc.trud.PROCESSED_PATH": {"fullname": "acmc.trud.PROCESSED_PATH", "modulename": "acmc.trud", "qualname": "PROCESSED_PATH", "kind": "variable", "doc": "<p>Default path to the processed TRUD mappings directory</p>\n", "default_value": "PosixPath(&#x27;vocab/trud/processed&#x27;)"}, "acmc.trud.get_releases": {"fullname": "acmc.trud.get_releases", "modulename": "acmc.trud", "qualname": "get_releases", "kind": "function", "doc": "<p>Retrieve release information for an item from the TRUD API.</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">item_id</span><span class=\"p\">:</span> <span class=\"nb\">str</span>, </span><span class=\"param\"><span class=\"n\">API_KEY</span><span class=\"p\">:</span> <span class=\"nb\">str</span>, </span><span class=\"param\"><span class=\"n\">latest</span><span class=\"o\">=</span><span class=\"kc\">False</span></span><span class=\"return-annotation\">) -> <span class=\"nb\">list</span>:</span></span>", "funcdef": "def"}, "acmc.trud.download_release_file": {"fullname": "acmc.trud.download_release_file", "modulename": "acmc.trud", "qualname": "download_release_file", "kind": "function", "doc": "<p>Download specified file type for a given release of an item.</p>\n", "signature": "<span class=\"signature pdoc-code multiline\">(<span class=\"param\">\t<span class=\"n\">item_id</span><span class=\"p\">:</span> <span class=\"nb\">str</span>,</span><span class=\"param\">\t<span class=\"n\">release_ordinal</span><span class=\"p\">:</span> <span class=\"nb\">str</span>,</span><span class=\"param\">\t<span class=\"n\">release</span><span class=\"p\">:</span> <span class=\"nb\">dict</span>,</span><span class=\"param\">\t<span class=\"n\">file_json_prefix</span><span class=\"p\">:</span> <span class=\"nb\">str</span></span><span class=\"return-annotation\">) -> <span class=\"n\">pathlib</span><span class=\"o\">.</span><span class=\"n\">Path</span>:</span></span>", "funcdef": "def"}, "acmc.trud.validate_download_hash": {"fullname": "acmc.trud.validate_download_hash", "modulename": "acmc.trud", "qualname": "validate_download_hash", "kind": "function", "doc": "<p></p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">file_destination</span><span class=\"p\">:</span> <span class=\"nb\">str</span>, </span><span class=\"param\"><span class=\"n\">item_hash</span><span class=\"p\">:</span> <span class=\"nb\">str</span></span><span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.trud.unzip_download": {"fullname": "acmc.trud.unzip_download", "modulename": "acmc.trud", "qualname": "unzip_download", "kind": "function", "doc": "<p></p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"n\">file_destination</span><span class=\"p\">:</span> <span class=\"nb\">str</span></span><span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.trud.extract_icd10": {"fullname": "acmc.trud.extract_icd10", "modulename": "acmc.trud", "qualname": "extract_icd10", "kind": "function", "doc": "<p></p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.trud.extract_opsc4": {"fullname": "acmc.trud.extract_opsc4", "modulename": "acmc.trud", "qualname": "extract_opsc4", "kind": "function", "doc": "<p></p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.trud.extract_nhs_data_migrations": {"fullname": "acmc.trud.extract_nhs_data_migrations", "modulename": "acmc.trud", "qualname": "extract_nhs_data_migrations", "kind": "function", "doc": "<p></p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.trud.extract_nhs_read_browser": {"fullname": "acmc.trud.extract_nhs_read_browser", "modulename": "acmc.trud", "qualname": "extract_nhs_read_browser", "kind": "function", "doc": "<p></p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.trud.create_map_directories": {"fullname": "acmc.trud.create_map_directories", "modulename": "acmc.trud", "qualname": "create_map_directories", "kind": "function", "doc": "<p>Create map directories.</p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.trud.install": {"fullname": "acmc.trud.install", "modulename": "acmc.trud", "qualname": "install", "kind": "function", "doc": "<p></p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"return-annotation\">):</span></span>", "funcdef": "def"}, "acmc.util": {"fullname": "acmc.util", "modulename": "acmc.util", "kind": "module", "doc": "<p></p>\n"}, "acmc.util.QuotedDumper": {"fullname": "acmc.util.QuotedDumper", "modulename": "acmc.util", "qualname": "QuotedDumper", "kind": "class", "doc": "<p>Custom Dumper to retain quotes on strings in yaml library</p>\n", "bases": "yaml.dumper.Dumper"}, "acmc.util.QuotedDumper.increase_indent": {"fullname": "acmc.util.QuotedDumper.increase_indent", "modulename": "acmc.util", "qualname": "QuotedDumper.increase_indent", "kind": "function", "doc": "<p></p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<span class=\"param\"><span class=\"bp\">self</span>, </span><span class=\"param\"><span class=\"n\">flow</span><span class=\"o\">=</span><span class=\"kc\">False</span>, </span><span class=\"param\"><span class=\"n\">indentless</span><span class=\"o\">=</span><span class=\"kc\">False</span></span><span class=\"return-annotation\">):</span></span>", "funcdef": "def"}}, "docInfo": {"acmc": {"qualname": 0, "fullname": 1, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "acmc.logging_config": {"qualname": 0, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 20}, "acmc.logging_config.DEFAULT_LOG_FILE": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 6, "signature": 0, "bases": 0, "doc": 9}, "acmc.logging_config.setup_logger": {"qualname": 2, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 24, "bases": 0, "doc": 16}, "acmc.logging_config.set_log_level": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 17, "bases": 0, "doc": 33}, "acmc.main": {"qualname": 0, "fullname": 2, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 18}, "acmc.main.DEFAULT_WORKSPACE_PATH": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 5, "signature": 0, "bases": 0, "doc": 6}, "acmc.main.main": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 7, "bases": 0, "doc": 3}, "acmc.omop": {"qualname": 0, "fullname": 2, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 16}, "acmc.omop.VOCAB_PATH": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 5, "signature": 0, "bases": 0, "doc": 6}, "acmc.omop.OMOP_CDM_Version": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 5, "signature": 0, "bases": 0, "doc": 7}, "acmc.omop.OMOP_DB_FILENAME": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 7, "signature": 0, "bases": 0, "doc": 7}, "acmc.omop.DB_PATH": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 7, "signature": 0, "bases": 0, "doc": 7}, "acmc.omop.VERSION_FILE": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 7, "signature": 0, "bases": 0, "doc": 6}, "acmc.omop.VERSION_PATH": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 7, "signature": 0, "bases": 0, "doc": 6}, "acmc.omop.EXPORT_FILE": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 8, "signature": 0, "bases": 0, "doc": 7}, "acmc.omop.vocabularies": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 202, "signature": 0, "bases": 0, "doc": 6}, "acmc.omop.omop_vocab_types": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 51, "signature": 0, "bases": 0, "doc": 13}, "acmc.omop.install": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 28, "bases": 0, "doc": 96}, "acmc.omop.write_version_file": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 16, "bases": 0, "doc": 33}, "acmc.omop.clear": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 22, "bases": 0, "doc": 49}, "acmc.omop.delete": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 22, "bases": 0, "doc": 49}, "acmc.omop.table_exists": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 35, "bases": 0, "doc": 55}, "acmc.omop.vocab_exists": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 35, "bases": 0, "doc": 56}, "acmc.omop.concept_set_exist": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 36, "bases": 0, "doc": 59}, "acmc.omop.export": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 71, "bases": 0, "doc": 104}, "acmc.parse": {"qualname": 0, "fullname": 2, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 18}, "acmc.parse.SUPPORTED_CODE_TYPES": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 20, "signature": 0, "bases": 0, "doc": 8}, "acmc.parse.CodesError": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 17}, "acmc.parse.CodesError.__init__": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 51, "bases": 0, "doc": 3}, "acmc.parse.InvalidCodesException": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 2, "doc": 17}, "acmc.parse.InvalidCodesException.__init__": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 9, "bases": 0, "doc": 3}, "acmc.parse.InvalidCodesException.error": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "acmc.parse.Proto": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 59}, "acmc.parse.Proto.__init__": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 44, "bases": 0, "doc": 3}, "acmc.parse.Proto.checks": {"qualname": 2, "fullname": 4, "annotation": 22, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "acmc.parse.Proto.name": {"qualname": 2, "fullname": 4, "annotation": 2, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "acmc.parse.Proto.raise_exception": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 21, "bases": 0, "doc": 36}, "acmc.parse.Proto.in_database": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 93, "bases": 0, "doc": 3}, "acmc.parse.Proto.process": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 85, "bases": 0, "doc": 14}, "acmc.parse.Proto.verify": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 52, "bases": 0, "doc": 7}, "acmc.parse.Read2": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 1, "doc": 40}, "acmc.parse.Read2.checks": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "acmc.parse.Read3": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 1, "doc": 59}, "acmc.parse.Read3.checks": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "acmc.parse.Icd10": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 1, "doc": 59}, "acmc.parse.Icd10.checks": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "acmc.parse.Snomed": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 1, "doc": 59}, "acmc.parse.Snomed.checks": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "acmc.parse.Opcs4": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 1, "doc": 59}, "acmc.parse.Opcs4.checks": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "acmc.parse.Atc": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 1, "doc": 59}, "acmc.parse.Atc.checks": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "acmc.parse.Med": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 1, "doc": 59}, "acmc.parse.Med.checks": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "acmc.parse.Cprd": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 1, "doc": 59}, "acmc.parse.Cprd.checks": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "acmc.parse.CodeTypeParser": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 17}, "acmc.parse.CodeTypeParser.__init__": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 40, "bases": 0, "doc": 3}, "acmc.parse.CodeTypeParser.code_types": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "acmc.phen": {"qualname": 0, "fullname": 2, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 15}, "acmc.phen.PHEN_DIR": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 5, "signature": 0, "bases": 0, "doc": 6}, "acmc.phen.DEFAULT_PHEN_PATH": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 5, "signature": 0, "bases": 0, "doc": 6}, "acmc.phen.CONCEPTS_DIR": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 5, "signature": 0, "bases": 0, "doc": 6}, "acmc.phen.MAP_DIR": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 5, "signature": 0, "bases": 0, "doc": 6}, "acmc.phen.CONCEPT_SET_DIR": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 6, "signature": 0, "bases": 0, "doc": 7}, "acmc.phen.CSV_PATH": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 6, "signature": 0, "bases": 0, "doc": 8}, "acmc.phen.OMOP_PATH": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 6, "signature": 0, "bases": 0, "doc": 8}, "acmc.phen.DEFAULT_PHEN_DIR_LIST": {"qualname": 4, "fullname": 6, "annotation": 0, "default_value": 12, "signature": 0, "bases": 0, "doc": 7}, "acmc.phen.CONFIG_FILE": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 6, "signature": 0, "bases": 0, "doc": 5}, "acmc.phen.VOCAB_VERSION_FILE": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 7, "signature": 0, "bases": 0, "doc": 6}, "acmc.phen.SEMANTIC_VERSION_TYPES": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 11, "signature": 0, "bases": 0, "doc": 8}, "acmc.phen.DEFAULT_VERSION_INC": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 5, "signature": 0, "bases": 0, "doc": 7}, "acmc.phen.DEFAULT_GIT_BRANCH": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 5, "signature": 0, "bases": 0, "doc": 7}, "acmc.phen.SPLIT_COL_ACTION": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 6, "signature": 0, "bases": 0, "doc": 7}, "acmc.phen.CODES_COL_ACTION": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 6, "signature": 0, "bases": 0, "doc": 7}, "acmc.phen.DIVIDE_COL_ACTION": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 6, "signature": 0, "bases": 0, "doc": 7}, "acmc.phen.COL_ACTIONS": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 14, "signature": 0, "bases": 0, "doc": 8}, "acmc.phen.CODE_FILE_TYPES": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 11, "signature": 0, "bases": 0, "doc": 11}, "acmc.phen.CONFIG_SCHEMA": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 352, "signature": 0, "bases": 0, "doc": 7}, "acmc.phen.PhenValidationException": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 2, "doc": 13}, "acmc.phen.PhenValidationException.__init__": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 20, "bases": 0, "doc": 3}, "acmc.phen.PhenValidationException.validation_errors": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "acmc.phen.init": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 28, "bases": 0, "doc": 11}, "acmc.phen.fork": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 55, "bases": 0, "doc": 156}, "acmc.phen.validate": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 17, "bases": 0, "doc": 13}, "acmc.phen.translate_codes": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 76, "bases": 0, "doc": 23}, "acmc.phen.write_vocab_version": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 22, "bases": 0, "doc": 3}, "acmc.phen.map": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 29, "bases": 0, "doc": 3}, "acmc.phen.publish": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 59, "bases": 0, "doc": 15}, "acmc.phen.export": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 27, "bases": 0, "doc": 15}, "acmc.phen.copy": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 38, "bases": 0, "doc": 15}, "acmc.phen.extract_concepts": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 36, "bases": 0, "doc": 14}, "acmc.phen.diff_config": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 31, "bases": 0, "doc": 3}, "acmc.phen.diff_map_files": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 43, "bases": 0, "doc": 3}, "acmc.phen.diff_phen": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 83, "bases": 0, "doc": 11}, "acmc.phen.diff": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 50, "bases": 0, "doc": 3}, "acmc.trud": {"qualname": 0, "fullname": 2, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 20}, "acmc.trud.FQDN": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 8, "signature": 0, "bases": 0, "doc": 12}, "acmc.trud.VOCAB_PATH": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 5, "signature": 0, "bases": 0, "doc": 16}, "acmc.trud.VERSION_FILE": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 7, "signature": 0, "bases": 0, "doc": 5}, "acmc.trud.VERSION_PATH": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 7, "signature": 0, "bases": 0, "doc": 9}, "acmc.trud.DOWNLOADS_PATH": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 5, "signature": 0, "bases": 0, "doc": 10}, "acmc.trud.PROCESSED_PATH": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 5, "signature": 0, "bases": 0, "doc": 10}, "acmc.trud.get_releases": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 41, "bases": 0, "doc": 13}, "acmc.trud.download_release_file": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 62, "bases": 0, "doc": 14}, "acmc.trud.validate_download_hash": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 28, "bases": 0, "doc": 3}, "acmc.trud.unzip_download": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 17, "bases": 0, "doc": 3}, "acmc.trud.extract_icd10": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 7, "bases": 0, "doc": 3}, "acmc.trud.extract_opsc4": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 7, "bases": 0, "doc": 3}, "acmc.trud.extract_nhs_data_migrations": {"qualname": 4, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 7, "bases": 0, "doc": 3}, "acmc.trud.extract_nhs_read_browser": {"qualname": 4, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 7, "bases": 0, "doc": 3}, "acmc.trud.create_map_directories": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 7, "bases": 0, "doc": 6}, "acmc.trud.install": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 7, "bases": 0, "doc": 3}, "acmc.util": {"qualname": 0, "fullname": 2, "annotation": 0, "default_value": 0, "signature": 0, "bases": 0, "doc": 3}, "acmc.util.QuotedDumper": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 0, "bases": 3, "doc": 12}, "acmc.util.QuotedDumper.increase_indent": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 31, "bases": 0, "doc": 3}}, "length": 117, "save": true}, "index": {"qualname": {"root": {"docs": {"acmc.parse.CodesError.__init__": {"tf": 1}, "acmc.parse.InvalidCodesException.__init__": {"tf": 1}, "acmc.parse.Proto.__init__": {"tf": 1}, "acmc.parse.CodeTypeParser.__init__": {"tf": 1}, "acmc.phen.PhenValidationException.__init__": {"tf": 1}}, "df": 5, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {"acmc.logging_config.DEFAULT_LOG_FILE": {"tf": 1}, "acmc.main.DEFAULT_WORKSPACE_PATH": {"tf": 1}, "acmc.phen.DEFAULT_PHEN_PATH": {"tf": 1}, "acmc.phen.DEFAULT_PHEN_DIR_LIST": {"tf": 1}, "acmc.phen.DEFAULT_VERSION_INC": {"tf": 1}, "acmc.phen.DEFAULT_GIT_BRANCH": {"tf": 1}}, "df": 6}}}}}, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"acmc.omop.delete": {"tf": 1}}, "df": 1}}}}}, "b": {"docs": {"acmc.omop.OMOP_DB_FILENAME": {"tf": 1}, "acmc.omop.DB_PATH": {"tf": 1}}, "df": 2}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {"acmc.trud.extract_nhs_data_migrations": {"tf": 1}}, "df": 1, "b": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"acmc.parse.Proto.in_database": {"tf": 1}}, "df": 1}}}}}}}, "i": {"docs": {}, "df": 0, "r": {"docs": {"acmc.phen.PHEN_DIR": {"tf": 1}, "acmc.phen.CONCEPTS_DIR": {"tf": 1}, "acmc.phen.MAP_DIR": {"tf": 1}, "acmc.phen.CONCEPT_SET_DIR": {"tf": 1}, "acmc.phen.DEFAULT_PHEN_DIR_LIST": {"tf": 1}}, "df": 5, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"acmc.trud.create_map_directories": {"tf": 1}}, "df": 1}}}}}}}}}, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {"acmc.phen.DIVIDE_COL_ACTION": {"tf": 1}}, "df": 1}}}}, "f": {"docs": {}, "df": 0, "f": {"docs": {"acmc.phen.diff_config": {"tf": 1}, "acmc.phen.diff_map_files": {"tf": 1}, "acmc.phen.diff_phen": {"tf": 1}, "acmc.phen.diff": {"tf": 1}}, "df": 4}}}, "o": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {"acmc.trud.download_release_file": {"tf": 1}, "acmc.trud.validate_download_hash": {"tf": 1}, "acmc.trud.unzip_download": {"tf": 1}}, "df": 3, "s": {"docs": {"acmc.trud.DOWNLOADS_PATH": {"tf": 1}}, "df": 1}}}}}}}}}, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "g": {"docs": {"acmc.logging_config.DEFAULT_LOG_FILE": {"tf": 1}, "acmc.logging_config.set_log_level": {"tf": 1}}, "df": 2, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"acmc.logging_config.setup_logger": {"tf": 1}}, "df": 1}}}}}, "e": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {"acmc.logging_config.set_log_level": {"tf": 1}}, "df": 1}}}}, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"acmc.phen.DEFAULT_PHEN_DIR_LIST": {"tf": 1}}, "df": 1}}}}, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"acmc.logging_config.DEFAULT_LOG_FILE": {"tf": 1}, "acmc.omop.VERSION_FILE": {"tf": 1}, "acmc.omop.EXPORT_FILE": {"tf": 1}, "acmc.omop.write_version_file": {"tf": 1}, "acmc.phen.CONFIG_FILE": {"tf": 1}, "acmc.phen.VOCAB_VERSION_FILE": {"tf": 1}, "acmc.phen.CODE_FILE_TYPES": {"tf": 1}, "acmc.trud.VERSION_FILE": {"tf": 1}, "acmc.trud.download_release_file": {"tf": 1}}, "df": 9, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"acmc.omop.OMOP_DB_FILENAME": {"tf": 1}}, "df": 1}}}}, "s": {"docs": {"acmc.phen.diff_map_files": {"tf": 1}}, "df": 1}}}}, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "k": {"docs": {"acmc.phen.fork": {"tf": 1}}, "df": 1}}}, "q": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "n": {"docs": {"acmc.trud.FQDN": {"tf": 1}}, "df": 1}}}}, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {"acmc.logging_config.set_log_level": {"tf": 1}, "acmc.omop.concept_set_exist": {"tf": 1}, "acmc.phen.CONCEPT_SET_DIR": {"tf": 1}}, "df": 3, "u": {"docs": {}, "df": 0, "p": {"docs": {"acmc.logging_config.setup_logger": {"tf": 1}}, "df": 1}}}, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {"acmc.phen.SEMANTIC_VERSION_TYPES": {"tf": 1}}, "df": 1}}}}}}}, "u": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"acmc.parse.SUPPORTED_CODE_TYPES": {"tf": 1}}, "df": 1}}}}}}}}, "n": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"acmc.parse.Snomed": {"tf": 1}, "acmc.parse.Snomed.checks": {"tf": 1}}, "df": 2}}}}}, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {"acmc.phen.SPLIT_COL_ACTION": {"tf": 1}}, "df": 1}}}}, "c": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {"acmc.phen.CONFIG_SCHEMA": {"tf": 1}}, "df": 1}}}}}}, "w": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"acmc.main.DEFAULT_WORKSPACE_PATH": {"tf": 1}}, "df": 1}}}}}}}}, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"acmc.omop.write_version_file": {"tf": 1}, "acmc.phen.write_vocab_version": {"tf": 1}}, "df": 2}}}}}, "p": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {"acmc.main.DEFAULT_WORKSPACE_PATH": {"tf": 1}, "acmc.omop.VOCAB_PATH": {"tf": 1}, "acmc.omop.DB_PATH": {"tf": 1}, "acmc.omop.VERSION_PATH": {"tf": 1}, "acmc.phen.DEFAULT_PHEN_PATH": {"tf": 1}, "acmc.phen.CSV_PATH": {"tf": 1}, "acmc.phen.OMOP_PATH": {"tf": 1}, "acmc.trud.VOCAB_PATH": {"tf": 1}, "acmc.trud.VERSION_PATH": {"tf": 1}, "acmc.trud.DOWNLOADS_PATH": {"tf": 1}, "acmc.trud.PROCESSED_PATH": {"tf": 1}}, "df": 11}}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {"acmc.parse.Proto": {"tf": 1}, "acmc.parse.Proto.__init__": {"tf": 1}, "acmc.parse.Proto.checks": {"tf": 1}, "acmc.parse.Proto.name": {"tf": 1}, "acmc.parse.Proto.raise_exception": {"tf": 1}, "acmc.parse.Proto.in_database": {"tf": 1}, "acmc.parse.Proto.process": {"tf": 1}, "acmc.parse.Proto.verify": {"tf": 1}}, "df": 8}}, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"acmc.parse.Proto.process": {"tf": 1}}, "df": 1, "e": {"docs": {}, "df": 0, "d": {"docs": {"acmc.trud.PROCESSED_PATH": {"tf": 1}}, "df": 1}}}}}}}}, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {"acmc.phen.PHEN_DIR": {"tf": 1}, "acmc.phen.DEFAULT_PHEN_PATH": {"tf": 1}, "acmc.phen.DEFAULT_PHEN_DIR_LIST": {"tf": 1}, "acmc.phen.diff_phen": {"tf": 1}}, "df": 4, "v": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"acmc.phen.PhenValidationException": {"tf": 1}, "acmc.phen.PhenValidationException.__init__": {"tf": 1}, "acmc.phen.PhenValidationException.validation_errors": {"tf": 1}}, "df": 3}}}}}}}}}}}}}}}}}}}}}}, "u": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "h": {"docs": {"acmc.phen.publish": {"tf": 1}}, "df": 1}}}}}}}, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {"acmc.main.main": {"tf": 1}}, "df": 1}}, "p": {"docs": {"acmc.phen.MAP_DIR": {"tf": 1}, "acmc.phen.map": {"tf": 1}, "acmc.phen.diff_map_files": {"tf": 1}, "acmc.trud.create_map_directories": {"tf": 1}}, "df": 4}}, "e": {"docs": {}, "df": 0, "d": {"docs": {"acmc.parse.Med": {"tf": 1}, "acmc.parse.Med.checks": {"tf": 1}}, "df": 2}}, "i": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"acmc.trud.extract_nhs_data_migrations": {"tf": 1}}, "df": 1}}}}}}}}}}, "v": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "b": {"docs": {"acmc.omop.VOCAB_PATH": {"tf": 1}, "acmc.omop.omop_vocab_types": {"tf": 1}, "acmc.omop.vocab_exists": {"tf": 1}, "acmc.phen.VOCAB_VERSION_FILE": {"tf": 1}, "acmc.phen.write_vocab_version": {"tf": 1}, "acmc.trud.VOCAB_PATH": {"tf": 1}}, "df": 6, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"acmc.omop.vocabularies": {"tf": 1}}, "df": 1}}}}}}}}}}}, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"acmc.omop.OMOP_CDM_Version": {"tf": 1}, "acmc.omop.VERSION_FILE": {"tf": 1}, "acmc.omop.VERSION_PATH": {"tf": 1}, "acmc.omop.write_version_file": {"tf": 1}, "acmc.phen.VOCAB_VERSION_FILE": {"tf": 1}, "acmc.phen.SEMANTIC_VERSION_TYPES": {"tf": 1}, "acmc.phen.DEFAULT_VERSION_INC": {"tf": 1}, "acmc.phen.write_vocab_version": {"tf": 1}, "acmc.trud.VERSION_FILE": {"tf": 1}, "acmc.trud.VERSION_PATH": {"tf": 1}}, "df": 10}}}}, "i": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "y": {"docs": {"acmc.parse.Proto.verify": {"tf": 1}}, "df": 1}}}}}, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"acmc.phen.PhenValidationException.validation_errors": {"tf": 1}}, "df": 1}}}, "e": {"docs": {"acmc.phen.validate": {"tf": 1}, "acmc.trud.validate_download_hash": {"tf": 1}}, "df": 2}}}}}}}}, "o": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "p": {"docs": {"acmc.omop.OMOP_CDM_Version": {"tf": 1}, "acmc.omop.OMOP_DB_FILENAME": {"tf": 1}, "acmc.omop.omop_vocab_types": {"tf": 1}, "acmc.phen.OMOP_PATH": {"tf": 1}}, "df": 4}}}, "p": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "s": {"4": {"docs": {"acmc.parse.Opcs4": {"tf": 1}, "acmc.parse.Opcs4.checks": {"tf": 1}}, "df": 2}, "docs": {}, "df": 0}}, "s": {"docs": {}, "df": 0, "c": {"4": {"docs": {"acmc.trud.extract_opsc4": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}}}}, "c": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "m": {"docs": {"acmc.omop.OMOP_CDM_Version": {"tf": 1}}, "df": 1}}, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {"acmc.omop.clear": {"tf": 1}}, "df": 1}}}}, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {"acmc.omop.concept_set_exist": {"tf": 1}, "acmc.phen.CONCEPT_SET_DIR": {"tf": 1}}, "df": 2, "s": {"docs": {"acmc.phen.CONCEPTS_DIR": {"tf": 1}, "acmc.phen.extract_concepts": {"tf": 1}}, "df": 2}}}}}, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "g": {"docs": {"acmc.phen.CONFIG_FILE": {"tf": 1}, "acmc.phen.CONFIG_SCHEMA": {"tf": 1}, "acmc.phen.diff_config": {"tf": 1}}, "df": 3}}}}, "d": {"docs": {}, "df": 0, "e": {"docs": {"acmc.parse.SUPPORTED_CODE_TYPES": {"tf": 1}, "acmc.parse.CodeTypeParser.code_types": {"tf": 1}, "acmc.phen.CODE_FILE_TYPES": {"tf": 1}}, "df": 3, "s": {"docs": {"acmc.phen.CODES_COL_ACTION": {"tf": 1}, "acmc.phen.translate_codes": {"tf": 1}}, "df": 2, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"acmc.parse.CodesError": {"tf": 1}, "acmc.parse.CodesError.__init__": {"tf": 1}}, "df": 2}}}}}}, "t": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"acmc.parse.CodeTypeParser": {"tf": 1}, "acmc.parse.CodeTypeParser.__init__": {"tf": 1}, "acmc.parse.CodeTypeParser.code_types": {"tf": 1}}, "df": 3}}}}}}}}}}}}, "l": {"docs": {"acmc.phen.SPLIT_COL_ACTION": {"tf": 1}, "acmc.phen.CODES_COL_ACTION": {"tf": 1}, "acmc.phen.DIVIDE_COL_ACTION": {"tf": 1}, "acmc.phen.COL_ACTIONS": {"tf": 1}}, "df": 4}, "p": {"docs": {}, "df": 0, "y": {"docs": {"acmc.phen.copy": {"tf": 1}}, "df": 1}}}, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "s": {"docs": {"acmc.parse.Proto.checks": {"tf": 1}, "acmc.parse.Read2.checks": {"tf": 1}, "acmc.parse.Read3.checks": {"tf": 1}, "acmc.parse.Icd10.checks": {"tf": 1}, "acmc.parse.Snomed.checks": {"tf": 1}, "acmc.parse.Opcs4.checks": {"tf": 1}, "acmc.parse.Atc.checks": {"tf": 1}, "acmc.parse.Med.checks": {"tf": 1}, "acmc.parse.Cprd.checks": {"tf": 1}}, "df": 9}}}}}, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "d": {"docs": {"acmc.parse.Cprd": {"tf": 1}, "acmc.parse.Cprd.checks": {"tf": 1}}, "df": 2}}}, "s": {"docs": {}, "df": 0, "v": {"docs": {"acmc.phen.CSV_PATH": {"tf": 1}}, "df": 1}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"acmc.trud.create_map_directories": {"tf": 1}}, "df": 1}}}}}}, "e": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {"acmc.omop.EXPORT_FILE": {"tf": 1}, "acmc.omop.export": {"tf": 1}, "acmc.phen.export": {"tf": 1}}, "df": 3}}}}, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"acmc.omop.concept_set_exist": {"tf": 1}}, "df": 1, "s": {"docs": {"acmc.omop.table_exists": {"tf": 1}, "acmc.omop.vocab_exists": {"tf": 1}}, "df": 2}}}}, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"acmc.parse.Proto.raise_exception": {"tf": 1}}, "df": 1}}}}}}}, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"acmc.phen.extract_concepts": {"tf": 1}, "acmc.trud.extract_icd10": {"tf": 1}, "acmc.trud.extract_opsc4": {"tf": 1}, "acmc.trud.extract_nhs_data_migrations": {"tf": 1}, "acmc.trud.extract_nhs_read_browser": {"tf": 1}}, "df": 5}}}}}}, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"acmc.parse.InvalidCodesException.error": {"tf": 1}}, "df": 1, "s": {"docs": {"acmc.phen.PhenValidationException.validation_errors": {"tf": 1}}, "df": 1}}}}}}, "t": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"acmc.omop.omop_vocab_types": {"tf": 1}, "acmc.parse.SUPPORTED_CODE_TYPES": {"tf": 1}, "acmc.parse.CodeTypeParser.code_types": {"tf": 1}, "acmc.phen.SEMANTIC_VERSION_TYPES": {"tf": 1}, "acmc.phen.CODE_FILE_TYPES": {"tf": 1}}, "df": 5}}}}, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"acmc.omop.table_exists": {"tf": 1}}, "df": 1}}}}, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"acmc.phen.translate_codes": {"tf": 1}}, "df": 1}}}}}}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {"acmc.parse.Proto.in_database": {"tf": 1}}, "df": 1, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {"acmc.omop.install": {"tf": 1}, "acmc.trud.install": {"tf": 1}}, "df": 2}}}}}, "i": {"docs": {}, "df": 0, "t": {"docs": {"acmc.parse.CodesError.__init__": {"tf": 1}, "acmc.parse.InvalidCodesException.__init__": {"tf": 1}, "acmc.parse.Proto.__init__": {"tf": 1}, "acmc.parse.CodeTypeParser.__init__": {"tf": 1}, "acmc.phen.PhenValidationException.__init__": {"tf": 1}, "acmc.phen.init": {"tf": 1}}, "df": 6}}, "v": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"acmc.parse.InvalidCodesException": {"tf": 1}, "acmc.parse.InvalidCodesException.__init__": {"tf": 1}, "acmc.parse.InvalidCodesException.error": {"tf": 1}}, "df": 3}}}}}}}}}}}}}}}}}}}, "c": {"docs": {"acmc.phen.DEFAULT_VERSION_INC": {"tf": 1}}, "df": 1, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"acmc.util.QuotedDumper.increase_indent": {"tf": 1}}, "df": 1}}}}}}, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"acmc.util.QuotedDumper.increase_indent": {"tf": 1}}, "df": 1}}}}}, "c": {"docs": {}, "df": 0, "d": {"1": {"0": {"docs": {"acmc.parse.Icd10": {"tf": 1}, "acmc.parse.Icd10.checks": {"tf": 1}, "acmc.trud.extract_icd10": {"tf": 1}}, "df": 3}, "docs": {}, "df": 0}, "docs": {}, "df": 0}}}, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"acmc.parse.Proto.name": {"tf": 1}}, "df": 1}}}, "h": {"docs": {}, "df": 0, "s": {"docs": {"acmc.trud.extract_nhs_data_migrations": {"tf": 1}, "acmc.trud.extract_nhs_read_browser": {"tf": 1}}, "df": 2}}}, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"acmc.parse.Proto.raise_exception": {"tf": 1}}, "df": 1}}}}, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"2": {"docs": {"acmc.parse.Read2": {"tf": 1}, "acmc.parse.Read2.checks": {"tf": 1}}, "df": 2}, "3": {"docs": {"acmc.parse.Read3": {"tf": 1}, "acmc.parse.Read3.checks": {"tf": 1}}, "df": 2}, "docs": {"acmc.trud.extract_nhs_read_browser": {"tf": 1}}, "df": 1}}, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"acmc.trud.download_release_file": {"tf": 1}}, "df": 1, "s": {"docs": {"acmc.trud.get_releases": {"tf": 1}}, "df": 1}}}}}}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "c": {"docs": {"acmc.parse.Atc": {"tf": 1}, "acmc.parse.Atc.checks": {"tf": 1}}, "df": 2}}, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"acmc.phen.SPLIT_COL_ACTION": {"tf": 1}, "acmc.phen.CODES_COL_ACTION": {"tf": 1}, "acmc.phen.DIVIDE_COL_ACTION": {"tf": 1}}, "df": 3, "s": {"docs": {"acmc.phen.COL_ACTIONS": {"tf": 1}}, "df": 1}}}}}}}, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {"acmc.phen.DEFAULT_GIT_BRANCH": {"tf": 1}}, "df": 1}}, "e": {"docs": {}, "df": 0, "t": {"docs": {"acmc.trud.get_releases": {"tf": 1}}, "df": 1}}}, "b": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "h": {"docs": {"acmc.phen.DEFAULT_GIT_BRANCH": {"tf": 1}}, "df": 1}}}}, "o": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"acmc.trud.extract_nhs_read_browser": {"tf": 1}}, "df": 1}}}}}}}, "h": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "h": {"docs": {"acmc.trud.validate_download_hash": {"tf": 1}}, "df": 1}}}}, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "z": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "p": {"docs": {"acmc.trud.unzip_download": {"tf": 1}}, "df": 1}}}}}, "q": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"acmc.util.QuotedDumper": {"tf": 1}, "acmc.util.QuotedDumper.increase_indent": {"tf": 1}}, "df": 2}}}}}}}}}}}}}}, "fullname": {"root": {"docs": {"acmc.parse.CodesError.__init__": {"tf": 1}, "acmc.parse.InvalidCodesException.__init__": {"tf": 1}, "acmc.parse.Proto.__init__": {"tf": 1}, "acmc.parse.CodeTypeParser.__init__": {"tf": 1}, "acmc.phen.PhenValidationException.__init__": {"tf": 1}}, "df": 5, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "c": {"docs": {"acmc": {"tf": 1}, "acmc.logging_config": {"tf": 1}, "acmc.logging_config.DEFAULT_LOG_FILE": {"tf": 1}, "acmc.logging_config.setup_logger": {"tf": 1}, "acmc.logging_config.set_log_level": {"tf": 1}, "acmc.main": {"tf": 1}, "acmc.main.DEFAULT_WORKSPACE_PATH": {"tf": 1}, "acmc.main.main": {"tf": 1}, "acmc.omop": {"tf": 1}, "acmc.omop.VOCAB_PATH": {"tf": 1}, "acmc.omop.OMOP_CDM_Version": {"tf": 1}, "acmc.omop.OMOP_DB_FILENAME": {"tf": 1}, "acmc.omop.DB_PATH": {"tf": 1}, "acmc.omop.VERSION_FILE": {"tf": 1}, "acmc.omop.VERSION_PATH": {"tf": 1}, "acmc.omop.EXPORT_FILE": {"tf": 1}, "acmc.omop.vocabularies": {"tf": 1}, "acmc.omop.omop_vocab_types": {"tf": 1}, "acmc.omop.install": {"tf": 1}, "acmc.omop.write_version_file": {"tf": 1}, "acmc.omop.clear": {"tf": 1}, "acmc.omop.delete": {"tf": 1}, "acmc.omop.table_exists": {"tf": 1}, "acmc.omop.vocab_exists": {"tf": 1}, "acmc.omop.concept_set_exist": {"tf": 1}, "acmc.omop.export": {"tf": 1}, "acmc.parse": {"tf": 1}, "acmc.parse.SUPPORTED_CODE_TYPES": {"tf": 1}, "acmc.parse.CodesError": {"tf": 1}, "acmc.parse.CodesError.__init__": {"tf": 1}, "acmc.parse.InvalidCodesException": {"tf": 1}, "acmc.parse.InvalidCodesException.__init__": {"tf": 1}, "acmc.parse.InvalidCodesException.error": {"tf": 1}, "acmc.parse.Proto": {"tf": 1}, "acmc.parse.Proto.__init__": {"tf": 1}, "acmc.parse.Proto.checks": {"tf": 1}, "acmc.parse.Proto.name": {"tf": 1}, "acmc.parse.Proto.raise_exception": {"tf": 1}, "acmc.parse.Proto.in_database": {"tf": 1}, "acmc.parse.Proto.process": {"tf": 1}, "acmc.parse.Proto.verify": {"tf": 1}, "acmc.parse.Read2": {"tf": 1}, "acmc.parse.Read2.checks": {"tf": 1}, "acmc.parse.Read3": {"tf": 1}, "acmc.parse.Read3.checks": {"tf": 1}, "acmc.parse.Icd10": {"tf": 1}, "acmc.parse.Icd10.checks": {"tf": 1}, "acmc.parse.Snomed": {"tf": 1}, "acmc.parse.Snomed.checks": {"tf": 1}, "acmc.parse.Opcs4": {"tf": 1}, "acmc.parse.Opcs4.checks": {"tf": 1}, "acmc.parse.Atc": {"tf": 1}, "acmc.parse.Atc.checks": {"tf": 1}, "acmc.parse.Med": {"tf": 1}, "acmc.parse.Med.checks": {"tf": 1}, "acmc.parse.Cprd": {"tf": 1}, "acmc.parse.Cprd.checks": {"tf": 1}, "acmc.parse.CodeTypeParser": {"tf": 1}, "acmc.parse.CodeTypeParser.__init__": {"tf": 1}, "acmc.parse.CodeTypeParser.code_types": {"tf": 1}, "acmc.phen": {"tf": 1}, "acmc.phen.PHEN_DIR": {"tf": 1}, "acmc.phen.DEFAULT_PHEN_PATH": {"tf": 1}, "acmc.phen.CONCEPTS_DIR": {"tf": 1}, "acmc.phen.MAP_DIR": {"tf": 1}, "acmc.phen.CONCEPT_SET_DIR": {"tf": 1}, "acmc.phen.CSV_PATH": {"tf": 1}, "acmc.phen.OMOP_PATH": {"tf": 1}, "acmc.phen.DEFAULT_PHEN_DIR_LIST": {"tf": 1}, "acmc.phen.CONFIG_FILE": {"tf": 1}, "acmc.phen.VOCAB_VERSION_FILE": {"tf": 1}, "acmc.phen.SEMANTIC_VERSION_TYPES": {"tf": 1}, "acmc.phen.DEFAULT_VERSION_INC": {"tf": 1}, "acmc.phen.DEFAULT_GIT_BRANCH": {"tf": 1}, "acmc.phen.SPLIT_COL_ACTION": {"tf": 1}, "acmc.phen.CODES_COL_ACTION": {"tf": 1}, "acmc.phen.DIVIDE_COL_ACTION": {"tf": 1}, "acmc.phen.COL_ACTIONS": {"tf": 1}, "acmc.phen.CODE_FILE_TYPES": {"tf": 1}, "acmc.phen.CONFIG_SCHEMA": {"tf": 1}, "acmc.phen.PhenValidationException": {"tf": 1}, "acmc.phen.PhenValidationException.__init__": {"tf": 1}, "acmc.phen.PhenValidationException.validation_errors": {"tf": 1}, "acmc.phen.init": {"tf": 1}, "acmc.phen.fork": {"tf": 1}, "acmc.phen.validate": {"tf": 1}, "acmc.phen.translate_codes": {"tf": 1}, "acmc.phen.write_vocab_version": {"tf": 1}, "acmc.phen.map": {"tf": 1}, "acmc.phen.publish": {"tf": 1}, "acmc.phen.export": {"tf": 1}, "acmc.phen.copy": {"tf": 1}, "acmc.phen.extract_concepts": {"tf": 1}, "acmc.phen.diff_config": {"tf": 1}, "acmc.phen.diff_map_files": {"tf": 1}, "acmc.phen.diff_phen": {"tf": 1}, "acmc.phen.diff": {"tf": 1}, "acmc.trud": {"tf": 1}, "acmc.trud.FQDN": {"tf": 1}, "acmc.trud.VOCAB_PATH": {"tf": 1}, "acmc.trud.VERSION_FILE": {"tf": 1}, "acmc.trud.VERSION_PATH": {"tf": 1}, "acmc.trud.DOWNLOADS_PATH": {"tf": 1}, "acmc.trud.PROCESSED_PATH": {"tf": 1}, "acmc.trud.get_releases": {"tf": 1}, "acmc.trud.download_release_file": {"tf": 1}, "acmc.trud.validate_download_hash": {"tf": 1}, "acmc.trud.unzip_download": {"tf": 1}, "acmc.trud.extract_icd10": {"tf": 1}, "acmc.trud.extract_opsc4": {"tf": 1}, "acmc.trud.extract_nhs_data_migrations": {"tf": 1}, "acmc.trud.extract_nhs_read_browser": {"tf": 1}, "acmc.trud.create_map_directories": {"tf": 1}, "acmc.trud.install": {"tf": 1}, "acmc.util": {"tf": 1}, "acmc.util.QuotedDumper": {"tf": 1}, "acmc.util.QuotedDumper.increase_indent": {"tf": 1}}, "df": 117}}, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"acmc.phen.SPLIT_COL_ACTION": {"tf": 1}, "acmc.phen.CODES_COL_ACTION": {"tf": 1}, "acmc.phen.DIVIDE_COL_ACTION": {"tf": 1}}, "df": 3, "s": {"docs": {"acmc.phen.COL_ACTIONS": {"tf": 1}}, "df": 1}}}}}}, "t": {"docs": {}, "df": 0, "c": {"docs": {"acmc.parse.Atc": {"tf": 1}, "acmc.parse.Atc.checks": {"tf": 1}}, "df": 2}}}, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "g": {"docs": {"acmc.logging_config.DEFAULT_LOG_FILE": {"tf": 1}, "acmc.logging_config.set_log_level": {"tf": 1}}, "df": 2, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"acmc.logging_config": {"tf": 1}, "acmc.logging_config.DEFAULT_LOG_FILE": {"tf": 1}, "acmc.logging_config.setup_logger": {"tf": 1}, "acmc.logging_config.set_log_level": {"tf": 1}}, "df": 4}}}, "e": {"docs": {}, "df": 0, "r": {"docs": {"acmc.logging_config.setup_logger": {"tf": 1}}, "df": 1}}}}}, "e": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {"acmc.logging_config.set_log_level": {"tf": 1}}, "df": 1}}}}, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"acmc.phen.DEFAULT_PHEN_DIR_LIST": {"tf": 1}}, "df": 1}}}}, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "g": {"docs": {"acmc.logging_config": {"tf": 1}, "acmc.logging_config.DEFAULT_LOG_FILE": {"tf": 1}, "acmc.logging_config.setup_logger": {"tf": 1}, "acmc.logging_config.set_log_level": {"tf": 1}, "acmc.phen.CONFIG_FILE": {"tf": 1}, "acmc.phen.CONFIG_SCHEMA": {"tf": 1}, "acmc.phen.diff_config": {"tf": 1}}, "df": 7}}}, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {"acmc.omop.concept_set_exist": {"tf": 1}, "acmc.phen.CONCEPT_SET_DIR": {"tf": 1}}, "df": 2, "s": {"docs": {"acmc.phen.CONCEPTS_DIR": {"tf": 1}, "acmc.phen.extract_concepts": {"tf": 1}}, "df": 2}}}}}}, "d": {"docs": {}, "df": 0, "e": {"docs": {"acmc.parse.SUPPORTED_CODE_TYPES": {"tf": 1}, "acmc.parse.CodeTypeParser.code_types": {"tf": 1}, "acmc.phen.CODE_FILE_TYPES": {"tf": 1}}, "df": 3, "s": {"docs": {"acmc.phen.CODES_COL_ACTION": {"tf": 1}, "acmc.phen.translate_codes": {"tf": 1}}, "df": 2, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"acmc.parse.CodesError": {"tf": 1}, "acmc.parse.CodesError.__init__": {"tf": 1}}, "df": 2}}}}}}, "t": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"acmc.parse.CodeTypeParser": {"tf": 1}, "acmc.parse.CodeTypeParser.__init__": {"tf": 1}, "acmc.parse.CodeTypeParser.code_types": {"tf": 1}}, "df": 3}}}}}}}}}}}}, "l": {"docs": {"acmc.phen.SPLIT_COL_ACTION": {"tf": 1}, "acmc.phen.CODES_COL_ACTION": {"tf": 1}, "acmc.phen.DIVIDE_COL_ACTION": {"tf": 1}, "acmc.phen.COL_ACTIONS": {"tf": 1}}, "df": 4}, "p": {"docs": {}, "df": 0, "y": {"docs": {"acmc.phen.copy": {"tf": 1}}, "df": 1}}}, "d": {"docs": {}, "df": 0, "m": {"docs": {"acmc.omop.OMOP_CDM_Version": {"tf": 1}}, "df": 1}}, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {"acmc.omop.clear": {"tf": 1}}, "df": 1}}}}, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "s": {"docs": {"acmc.parse.Proto.checks": {"tf": 1}, "acmc.parse.Read2.checks": {"tf": 1}, "acmc.parse.Read3.checks": {"tf": 1}, "acmc.parse.Icd10.checks": {"tf": 1}, "acmc.parse.Snomed.checks": {"tf": 1}, "acmc.parse.Opcs4.checks": {"tf": 1}, "acmc.parse.Atc.checks": {"tf": 1}, "acmc.parse.Med.checks": {"tf": 1}, "acmc.parse.Cprd.checks": {"tf": 1}}, "df": 9}}}}}, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "d": {"docs": {"acmc.parse.Cprd": {"tf": 1}, "acmc.parse.Cprd.checks": {"tf": 1}}, "df": 2}}}, "s": {"docs": {}, "df": 0, "v": {"docs": {"acmc.phen.CSV_PATH": {"tf": 1}}, "df": 1}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"acmc.trud.create_map_directories": {"tf": 1}}, "df": 1}}}}}}, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {"acmc.logging_config.DEFAULT_LOG_FILE": {"tf": 1}, "acmc.main.DEFAULT_WORKSPACE_PATH": {"tf": 1}, "acmc.phen.DEFAULT_PHEN_PATH": {"tf": 1}, "acmc.phen.DEFAULT_PHEN_DIR_LIST": {"tf": 1}, "acmc.phen.DEFAULT_VERSION_INC": {"tf": 1}, "acmc.phen.DEFAULT_GIT_BRANCH": {"tf": 1}}, "df": 6}}}}}, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"acmc.omop.delete": {"tf": 1}}, "df": 1}}}}}, "b": {"docs": {"acmc.omop.OMOP_DB_FILENAME": {"tf": 1}, "acmc.omop.DB_PATH": {"tf": 1}}, "df": 2}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {"acmc.trud.extract_nhs_data_migrations": {"tf": 1}}, "df": 1, "b": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"acmc.parse.Proto.in_database": {"tf": 1}}, "df": 1}}}}}}}, "i": {"docs": {}, "df": 0, "r": {"docs": {"acmc.phen.PHEN_DIR": {"tf": 1}, "acmc.phen.CONCEPTS_DIR": {"tf": 1}, "acmc.phen.MAP_DIR": {"tf": 1}, "acmc.phen.CONCEPT_SET_DIR": {"tf": 1}, "acmc.phen.DEFAULT_PHEN_DIR_LIST": {"tf": 1}}, "df": 5, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"acmc.trud.create_map_directories": {"tf": 1}}, "df": 1}}}}}}}}}, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {"acmc.phen.DIVIDE_COL_ACTION": {"tf": 1}}, "df": 1}}}}, "f": {"docs": {}, "df": 0, "f": {"docs": {"acmc.phen.diff_config": {"tf": 1}, "acmc.phen.diff_map_files": {"tf": 1}, "acmc.phen.diff_phen": {"tf": 1}, "acmc.phen.diff": {"tf": 1}}, "df": 4}}}, "o": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {"acmc.trud.download_release_file": {"tf": 1}, "acmc.trud.validate_download_hash": {"tf": 1}, "acmc.trud.unzip_download": {"tf": 1}}, "df": 3, "s": {"docs": {"acmc.trud.DOWNLOADS_PATH": {"tf": 1}}, "df": 1}}}}}}}}}, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"acmc.logging_config.DEFAULT_LOG_FILE": {"tf": 1}, "acmc.omop.VERSION_FILE": {"tf": 1}, "acmc.omop.EXPORT_FILE": {"tf": 1}, "acmc.omop.write_version_file": {"tf": 1}, "acmc.phen.CONFIG_FILE": {"tf": 1}, "acmc.phen.VOCAB_VERSION_FILE": {"tf": 1}, "acmc.phen.CODE_FILE_TYPES": {"tf": 1}, "acmc.trud.VERSION_FILE": {"tf": 1}, "acmc.trud.download_release_file": {"tf": 1}}, "df": 9, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"acmc.omop.OMOP_DB_FILENAME": {"tf": 1}}, "df": 1}}}}, "s": {"docs": {"acmc.phen.diff_map_files": {"tf": 1}}, "df": 1}}}}, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "k": {"docs": {"acmc.phen.fork": {"tf": 1}}, "df": 1}}}, "q": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "n": {"docs": {"acmc.trud.FQDN": {"tf": 1}}, "df": 1}}}}, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {"acmc.logging_config.set_log_level": {"tf": 1}, "acmc.omop.concept_set_exist": {"tf": 1}, "acmc.phen.CONCEPT_SET_DIR": {"tf": 1}}, "df": 3, "u": {"docs": {}, "df": 0, "p": {"docs": {"acmc.logging_config.setup_logger": {"tf": 1}}, "df": 1}}}, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {"acmc.phen.SEMANTIC_VERSION_TYPES": {"tf": 1}}, "df": 1}}}}}}}, "u": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"acmc.parse.SUPPORTED_CODE_TYPES": {"tf": 1}}, "df": 1}}}}}}}}, "n": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"acmc.parse.Snomed": {"tf": 1}, "acmc.parse.Snomed.checks": {"tf": 1}}, "df": 2}}}}}, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {"acmc.phen.SPLIT_COL_ACTION": {"tf": 1}}, "df": 1}}}}, "c": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {"acmc.phen.CONFIG_SCHEMA": {"tf": 1}}, "df": 1}}}}}}, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {"acmc.main": {"tf": 1}, "acmc.main.DEFAULT_WORKSPACE_PATH": {"tf": 1}, "acmc.main.main": {"tf": 1.4142135623730951}}, "df": 3}}, "p": {"docs": {"acmc.phen.MAP_DIR": {"tf": 1}, "acmc.phen.map": {"tf": 1}, "acmc.phen.diff_map_files": {"tf": 1}, "acmc.trud.create_map_directories": {"tf": 1}}, "df": 4}}, "e": {"docs": {}, "df": 0, "d": {"docs": {"acmc.parse.Med": {"tf": 1}, "acmc.parse.Med.checks": {"tf": 1}}, "df": 2}}, "i": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"acmc.trud.extract_nhs_data_migrations": {"tf": 1}}, "df": 1}}}}}}}}}}, "w": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"acmc.main.DEFAULT_WORKSPACE_PATH": {"tf": 1}}, "df": 1}}}}}}}}, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"acmc.omop.write_version_file": {"tf": 1}, "acmc.phen.write_vocab_version": {"tf": 1}}, "df": 2}}}}}, "p": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {"acmc.main.DEFAULT_WORKSPACE_PATH": {"tf": 1}, "acmc.omop.VOCAB_PATH": {"tf": 1}, "acmc.omop.DB_PATH": {"tf": 1}, "acmc.omop.VERSION_PATH": {"tf": 1}, "acmc.phen.DEFAULT_PHEN_PATH": {"tf": 1}, "acmc.phen.CSV_PATH": {"tf": 1}, "acmc.phen.OMOP_PATH": {"tf": 1}, "acmc.trud.VOCAB_PATH": {"tf": 1}, "acmc.trud.VERSION_PATH": {"tf": 1}, "acmc.trud.DOWNLOADS_PATH": {"tf": 1}, "acmc.trud.PROCESSED_PATH": {"tf": 1}}, "df": 11}}, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"acmc.parse": {"tf": 1}, "acmc.parse.SUPPORTED_CODE_TYPES": {"tf": 1}, "acmc.parse.CodesError": {"tf": 1}, "acmc.parse.CodesError.__init__": {"tf": 1}, "acmc.parse.InvalidCodesException": {"tf": 1}, "acmc.parse.InvalidCodesException.__init__": {"tf": 1}, "acmc.parse.InvalidCodesException.error": {"tf": 1}, "acmc.parse.Proto": {"tf": 1}, "acmc.parse.Proto.__init__": {"tf": 1}, "acmc.parse.Proto.checks": {"tf": 1}, "acmc.parse.Proto.name": {"tf": 1}, "acmc.parse.Proto.raise_exception": {"tf": 1}, "acmc.parse.Proto.in_database": {"tf": 1}, "acmc.parse.Proto.process": {"tf": 1}, "acmc.parse.Proto.verify": {"tf": 1}, "acmc.parse.Read2": {"tf": 1}, "acmc.parse.Read2.checks": {"tf": 1}, "acmc.parse.Read3": {"tf": 1}, "acmc.parse.Read3.checks": {"tf": 1}, "acmc.parse.Icd10": {"tf": 1}, "acmc.parse.Icd10.checks": {"tf": 1}, "acmc.parse.Snomed": {"tf": 1}, "acmc.parse.Snomed.checks": {"tf": 1}, "acmc.parse.Opcs4": {"tf": 1}, "acmc.parse.Opcs4.checks": {"tf": 1}, "acmc.parse.Atc": {"tf": 1}, "acmc.parse.Atc.checks": {"tf": 1}, "acmc.parse.Med": {"tf": 1}, "acmc.parse.Med.checks": {"tf": 1}, "acmc.parse.Cprd": {"tf": 1}, "acmc.parse.Cprd.checks": {"tf": 1}, "acmc.parse.CodeTypeParser": {"tf": 1}, "acmc.parse.CodeTypeParser.__init__": {"tf": 1}, "acmc.parse.CodeTypeParser.code_types": {"tf": 1}}, "df": 34}}}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {"acmc.parse.Proto": {"tf": 1}, "acmc.parse.Proto.__init__": {"tf": 1}, "acmc.parse.Proto.checks": {"tf": 1}, "acmc.parse.Proto.name": {"tf": 1}, "acmc.parse.Proto.raise_exception": {"tf": 1}, "acmc.parse.Proto.in_database": {"tf": 1}, "acmc.parse.Proto.process": {"tf": 1}, "acmc.parse.Proto.verify": {"tf": 1}}, "df": 8}}, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"acmc.parse.Proto.process": {"tf": 1}}, "df": 1, "e": {"docs": {}, "df": 0, "d": {"docs": {"acmc.trud.PROCESSED_PATH": {"tf": 1}}, "df": 1}}}}}}}}, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {"acmc.phen": {"tf": 1}, "acmc.phen.PHEN_DIR": {"tf": 1.4142135623730951}, "acmc.phen.DEFAULT_PHEN_PATH": {"tf": 1.4142135623730951}, "acmc.phen.CONCEPTS_DIR": {"tf": 1}, "acmc.phen.MAP_DIR": {"tf": 1}, "acmc.phen.CONCEPT_SET_DIR": {"tf": 1}, "acmc.phen.CSV_PATH": {"tf": 1}, "acmc.phen.OMOP_PATH": {"tf": 1}, "acmc.phen.DEFAULT_PHEN_DIR_LIST": {"tf": 1.4142135623730951}, "acmc.phen.CONFIG_FILE": {"tf": 1}, "acmc.phen.VOCAB_VERSION_FILE": {"tf": 1}, "acmc.phen.SEMANTIC_VERSION_TYPES": {"tf": 1}, "acmc.phen.DEFAULT_VERSION_INC": {"tf": 1}, "acmc.phen.DEFAULT_GIT_BRANCH": {"tf": 1}, "acmc.phen.SPLIT_COL_ACTION": {"tf": 1}, "acmc.phen.CODES_COL_ACTION": {"tf": 1}, "acmc.phen.DIVIDE_COL_ACTION": {"tf": 1}, "acmc.phen.COL_ACTIONS": {"tf": 1}, "acmc.phen.CODE_FILE_TYPES": {"tf": 1}, "acmc.phen.CONFIG_SCHEMA": {"tf": 1}, "acmc.phen.PhenValidationException": {"tf": 1}, "acmc.phen.PhenValidationException.__init__": {"tf": 1}, "acmc.phen.PhenValidationException.validation_errors": {"tf": 1}, "acmc.phen.init": {"tf": 1}, "acmc.phen.fork": {"tf": 1}, "acmc.phen.validate": {"tf": 1}, "acmc.phen.translate_codes": {"tf": 1}, "acmc.phen.write_vocab_version": {"tf": 1}, "acmc.phen.map": {"tf": 1}, "acmc.phen.publish": {"tf": 1}, "acmc.phen.export": {"tf": 1}, "acmc.phen.copy": {"tf": 1}, "acmc.phen.extract_concepts": {"tf": 1}, "acmc.phen.diff_config": {"tf": 1}, "acmc.phen.diff_map_files": {"tf": 1}, "acmc.phen.diff_phen": {"tf": 1.4142135623730951}, "acmc.phen.diff": {"tf": 1}}, "df": 37, "v": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"acmc.phen.PhenValidationException": {"tf": 1}, "acmc.phen.PhenValidationException.__init__": {"tf": 1}, "acmc.phen.PhenValidationException.validation_errors": {"tf": 1}}, "df": 3}}}}}}}}}}}}}}}}}}}}}}, "u": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "h": {"docs": {"acmc.phen.publish": {"tf": 1}}, "df": 1}}}}}}}, "o": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "p": {"docs": {"acmc.omop": {"tf": 1}, "acmc.omop.VOCAB_PATH": {"tf": 1}, "acmc.omop.OMOP_CDM_Version": {"tf": 1.4142135623730951}, "acmc.omop.OMOP_DB_FILENAME": {"tf": 1.4142135623730951}, "acmc.omop.DB_PATH": {"tf": 1}, "acmc.omop.VERSION_FILE": {"tf": 1}, "acmc.omop.VERSION_PATH": {"tf": 1}, "acmc.omop.EXPORT_FILE": {"tf": 1}, "acmc.omop.vocabularies": {"tf": 1}, "acmc.omop.omop_vocab_types": {"tf": 1.4142135623730951}, "acmc.omop.install": {"tf": 1}, "acmc.omop.write_version_file": {"tf": 1}, "acmc.omop.clear": {"tf": 1}, "acmc.omop.delete": {"tf": 1}, "acmc.omop.table_exists": {"tf": 1}, "acmc.omop.vocab_exists": {"tf": 1}, "acmc.omop.concept_set_exist": {"tf": 1}, "acmc.omop.export": {"tf": 1}, "acmc.phen.OMOP_PATH": {"tf": 1}}, "df": 19}}}, "p": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "s": {"4": {"docs": {"acmc.parse.Opcs4": {"tf": 1}, "acmc.parse.Opcs4.checks": {"tf": 1}}, "df": 2}, "docs": {}, "df": 0}}, "s": {"docs": {}, "df": 0, "c": {"4": {"docs": {"acmc.trud.extract_opsc4": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}}}}, "v": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "b": {"docs": {"acmc.omop.VOCAB_PATH": {"tf": 1}, "acmc.omop.omop_vocab_types": {"tf": 1}, "acmc.omop.vocab_exists": {"tf": 1}, "acmc.phen.VOCAB_VERSION_FILE": {"tf": 1}, "acmc.phen.write_vocab_version": {"tf": 1}, "acmc.trud.VOCAB_PATH": {"tf": 1}}, "df": 6, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"acmc.omop.vocabularies": {"tf": 1}}, "df": 1}}}}}}}}}}}, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"acmc.omop.OMOP_CDM_Version": {"tf": 1}, "acmc.omop.VERSION_FILE": {"tf": 1}, "acmc.omop.VERSION_PATH": {"tf": 1}, "acmc.omop.write_version_file": {"tf": 1}, "acmc.phen.VOCAB_VERSION_FILE": {"tf": 1}, "acmc.phen.SEMANTIC_VERSION_TYPES": {"tf": 1}, "acmc.phen.DEFAULT_VERSION_INC": {"tf": 1}, "acmc.phen.write_vocab_version": {"tf": 1}, "acmc.trud.VERSION_FILE": {"tf": 1}, "acmc.trud.VERSION_PATH": {"tf": 1}}, "df": 10}}}}, "i": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "y": {"docs": {"acmc.parse.Proto.verify": {"tf": 1}}, "df": 1}}}}}, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"acmc.phen.PhenValidationException.validation_errors": {"tf": 1}}, "df": 1}}}, "e": {"docs": {"acmc.phen.validate": {"tf": 1}, "acmc.trud.validate_download_hash": {"tf": 1}}, "df": 2}}}}}}}}, "e": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {"acmc.omop.EXPORT_FILE": {"tf": 1}, "acmc.omop.export": {"tf": 1}, "acmc.phen.export": {"tf": 1}}, "df": 3}}}}, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"acmc.omop.concept_set_exist": {"tf": 1}}, "df": 1, "s": {"docs": {"acmc.omop.table_exists": {"tf": 1}, "acmc.omop.vocab_exists": {"tf": 1}}, "df": 2}}}}, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"acmc.parse.Proto.raise_exception": {"tf": 1}}, "df": 1}}}}}}}, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"acmc.phen.extract_concepts": {"tf": 1}, "acmc.trud.extract_icd10": {"tf": 1}, "acmc.trud.extract_opsc4": {"tf": 1}, "acmc.trud.extract_nhs_data_migrations": {"tf": 1}, "acmc.trud.extract_nhs_read_browser": {"tf": 1}}, "df": 5}}}}}}, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"acmc.parse.InvalidCodesException.error": {"tf": 1}}, "df": 1, "s": {"docs": {"acmc.phen.PhenValidationException.validation_errors": {"tf": 1}}, "df": 1}}}}}}, "t": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"acmc.omop.omop_vocab_types": {"tf": 1}, "acmc.parse.SUPPORTED_CODE_TYPES": {"tf": 1}, "acmc.parse.CodeTypeParser.code_types": {"tf": 1}, "acmc.phen.SEMANTIC_VERSION_TYPES": {"tf": 1}, "acmc.phen.CODE_FILE_TYPES": {"tf": 1}}, "df": 5}}}}, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"acmc.omop.table_exists": {"tf": 1}}, "df": 1}}}}, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"acmc.phen.translate_codes": {"tf": 1}}, "df": 1}}}}}}}, "u": {"docs": {}, "df": 0, "d": {"docs": {"acmc.trud": {"tf": 1}, "acmc.trud.FQDN": {"tf": 1}, "acmc.trud.VOCAB_PATH": {"tf": 1}, "acmc.trud.VERSION_FILE": {"tf": 1}, "acmc.trud.VERSION_PATH": {"tf": 1}, "acmc.trud.DOWNLOADS_PATH": {"tf": 1}, "acmc.trud.PROCESSED_PATH": {"tf": 1}, "acmc.trud.get_releases": {"tf": 1}, "acmc.trud.download_release_file": {"tf": 1}, "acmc.trud.validate_download_hash": {"tf": 1}, "acmc.trud.unzip_download": {"tf": 1}, "acmc.trud.extract_icd10": {"tf": 1}, "acmc.trud.extract_opsc4": {"tf": 1}, "acmc.trud.extract_nhs_data_migrations": {"tf": 1}, "acmc.trud.extract_nhs_read_browser": {"tf": 1}, "acmc.trud.create_map_directories": {"tf": 1}, "acmc.trud.install": {"tf": 1}}, "df": 17}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {"acmc.parse.Proto.in_database": {"tf": 1}}, "df": 1, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {"acmc.omop.install": {"tf": 1}, "acmc.trud.install": {"tf": 1}}, "df": 2}}}}}, "i": {"docs": {}, "df": 0, "t": {"docs": {"acmc.parse.CodesError.__init__": {"tf": 1}, "acmc.parse.InvalidCodesException.__init__": {"tf": 1}, "acmc.parse.Proto.__init__": {"tf": 1}, "acmc.parse.CodeTypeParser.__init__": {"tf": 1}, "acmc.phen.PhenValidationException.__init__": {"tf": 1}, "acmc.phen.init": {"tf": 1}}, "df": 6}}, "v": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"acmc.parse.InvalidCodesException": {"tf": 1}, "acmc.parse.InvalidCodesException.__init__": {"tf": 1}, "acmc.parse.InvalidCodesException.error": {"tf": 1}}, "df": 3}}}}}}}}}}}}}}}}}}}, "c": {"docs": {"acmc.phen.DEFAULT_VERSION_INC": {"tf": 1}}, "df": 1, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"acmc.util.QuotedDumper.increase_indent": {"tf": 1}}, "df": 1}}}}}}, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"acmc.util.QuotedDumper.increase_indent": {"tf": 1}}, "df": 1}}}}}, "c": {"docs": {}, "df": 0, "d": {"1": {"0": {"docs": {"acmc.parse.Icd10": {"tf": 1}, "acmc.parse.Icd10.checks": {"tf": 1}, "acmc.trud.extract_icd10": {"tf": 1}}, "df": 3}, "docs": {}, "df": 0}, "docs": {}, "df": 0}}}, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"acmc.parse.Proto.name": {"tf": 1}}, "df": 1}}}, "h": {"docs": {}, "df": 0, "s": {"docs": {"acmc.trud.extract_nhs_data_migrations": {"tf": 1}, "acmc.trud.extract_nhs_read_browser": {"tf": 1}}, "df": 2}}}, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"acmc.parse.Proto.raise_exception": {"tf": 1}}, "df": 1}}}}, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"2": {"docs": {"acmc.parse.Read2": {"tf": 1}, "acmc.parse.Read2.checks": {"tf": 1}}, "df": 2}, "3": {"docs": {"acmc.parse.Read3": {"tf": 1}, "acmc.parse.Read3.checks": {"tf": 1}}, "df": 2}, "docs": {"acmc.trud.extract_nhs_read_browser": {"tf": 1}}, "df": 1}}, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"acmc.trud.download_release_file": {"tf": 1}}, "df": 1, "s": {"docs": {"acmc.trud.get_releases": {"tf": 1}}, "df": 1}}}}}}}}, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {"acmc.phen.DEFAULT_GIT_BRANCH": {"tf": 1}}, "df": 1}}, "e": {"docs": {}, "df": 0, "t": {"docs": {"acmc.trud.get_releases": {"tf": 1}}, "df": 1}}}, "b": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "h": {"docs": {"acmc.phen.DEFAULT_GIT_BRANCH": {"tf": 1}}, "df": 1}}}}, "o": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"acmc.trud.extract_nhs_read_browser": {"tf": 1}}, "df": 1}}}}}}}, "h": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "h": {"docs": {"acmc.trud.validate_download_hash": {"tf": 1}}, "df": 1}}}}, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "z": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "p": {"docs": {"acmc.trud.unzip_download": {"tf": 1}}, "df": 1}}}}, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {"acmc.util": {"tf": 1}, "acmc.util.QuotedDumper": {"tf": 1}, "acmc.util.QuotedDumper.increase_indent": {"tf": 1}}, "df": 3}}}}, "q": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"acmc.util.QuotedDumper": {"tf": 1}, "acmc.util.QuotedDumper.increase_indent": {"tf": 1}}, "df": 2}}}}}}}}}}}}}}, "annotation": {"root": {"docs": {"acmc.parse.Proto.checks": {"tf": 1}, "acmc.parse.Proto.name": {"tf": 1}}, "df": 2, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "[": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "[": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {"acmc.parse.Proto.checks": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}, "t": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"acmc.parse.Proto.checks": {"tf": 1.4142135623730951}}, "df": 1}}}}}}, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "[": {"docs": {}, "df": 0, "[": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {"acmc.parse.Proto.checks": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}}}}}}}}}, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"acmc.parse.Proto.checks": {"tf": 2}}, "df": 1}}}}, "f": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"acmc.parse.Proto.checks": {"tf": 1.7320508075688772}}, "df": 1}}}}}, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"acmc.parse.Proto.checks": {"tf": 1.7320508075688772}}, "df": 1}}}}}}}}}, "p": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {"acmc.parse.Proto.checks": {"tf": 1.4142135623730951}}, "df": 1}}}}, "t": {"docs": {}, "df": 0, "h": {"docs": {"acmc.parse.Proto.checks": {"tf": 1}}, "df": 1, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "b": {"docs": {"acmc.parse.Proto.checks": {"tf": 1}}, "df": 1}}}}}}}, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"acmc.parse.Proto.checks": {"tf": 1.4142135623730951}}, "df": 1}}}}}, "t": {"docs": {}, "df": 0, "r": {"docs": {"acmc.parse.Proto.name": {"tf": 1}}, "df": 1}}}}}, "default_value": {"root": {"1": {"4": {"4": {"docs": {"acmc.omop.vocabularies": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "5": {"4": {"docs": {"acmc.omop.vocabularies": {"tf": 1}}, "df": 1}, "5": {"docs": {"acmc.omop.vocabularies": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "7": {"docs": {"acmc.omop.vocabularies": {"tf": 1}}, "df": 1}, "docs": {"acmc.omop.vocabularies": {"tf": 1}}, "df": 1}, "2": {"1": {"docs": {"acmc.omop.vocabularies": {"tf": 1}}, "df": 1}, "docs": {"acmc.omop.vocabularies": {"tf": 1}}, "df": 1}, "5": {"4": {"docs": {"acmc.omop.OMOP_CDM_Version": {"tf": 1}, "acmc.omop.OMOP_DB_FILENAME": {"tf": 1}, "acmc.omop.DB_PATH": {"tf": 1}, "acmc.omop.EXPORT_FILE": {"tf": 1}, "acmc.omop.vocabularies": {"tf": 1}}, "df": 5}, "5": {"docs": {"acmc.omop.vocabularies": {"tf": 1}}, "df": 1}, "7": {"docs": {"acmc.omop.vocabularies": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "7": {"0": {"docs": {"acmc.omop.vocabularies": {"tf": 1}}, "df": 1}, "5": {"docs": {"acmc.omop.vocabularies": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "docs": {"acmc.logging_config.DEFAULT_LOG_FILE": {"tf": 1.4142135623730951}, "acmc.main.DEFAULT_WORKSPACE_PATH": {"tf": 1}, "acmc.omop.VOCAB_PATH": {"tf": 1}, "acmc.omop.OMOP_CDM_Version": {"tf": 1.4142135623730951}, "acmc.omop.OMOP_DB_FILENAME": {"tf": 1.4142135623730951}, "acmc.omop.DB_PATH": {"tf": 1}, "acmc.omop.VERSION_FILE": {"tf": 1.4142135623730951}, "acmc.omop.VERSION_PATH": {"tf": 1}, "acmc.omop.EXPORT_FILE": {"tf": 1.4142135623730951}, "acmc.omop.vocabularies": {"tf": 7.211102550927978}, "acmc.omop.omop_vocab_types": {"tf": 3}, "acmc.parse.SUPPORTED_CODE_TYPES": {"tf": 1.4142135623730951}, "acmc.phen.PHEN_DIR": {"tf": 1.4142135623730951}, "acmc.phen.DEFAULT_PHEN_PATH": {"tf": 1}, "acmc.phen.CONCEPTS_DIR": {"tf": 1.4142135623730951}, "acmc.phen.MAP_DIR": {"tf": 1.4142135623730951}, "acmc.phen.CONCEPT_SET_DIR": {"tf": 1.4142135623730951}, "acmc.phen.CSV_PATH": {"tf": 1}, "acmc.phen.OMOP_PATH": {"tf": 1}, "acmc.phen.DEFAULT_PHEN_DIR_LIST": {"tf": 1.4142135623730951}, "acmc.phen.CONFIG_FILE": {"tf": 1.4142135623730951}, "acmc.phen.VOCAB_VERSION_FILE": {"tf": 1.4142135623730951}, "acmc.phen.SEMANTIC_VERSION_TYPES": {"tf": 1.4142135623730951}, "acmc.phen.DEFAULT_VERSION_INC": {"tf": 1.4142135623730951}, "acmc.phen.DEFAULT_GIT_BRANCH": {"tf": 1.4142135623730951}, "acmc.phen.SPLIT_COL_ACTION": {"tf": 1.4142135623730951}, "acmc.phen.CODES_COL_ACTION": {"tf": 1.4142135623730951}, "acmc.phen.DIVIDE_COL_ACTION": {"tf": 1.4142135623730951}, "acmc.phen.COL_ACTIONS": {"tf": 1.4142135623730951}, "acmc.phen.CODE_FILE_TYPES": {"tf": 1.4142135623730951}, "acmc.phen.CONFIG_SCHEMA": {"tf": 9.327379053088816}, "acmc.trud.FQDN": {"tf": 1.4142135623730951}, "acmc.trud.VOCAB_PATH": {"tf": 1}, "acmc.trud.VERSION_FILE": {"tf": 1.4142135623730951}, "acmc.trud.VERSION_PATH": {"tf": 1}, "acmc.trud.DOWNLOADS_PATH": {"tf": 1}, "acmc.trud.PROCESSED_PATH": {"tf": 1}}, "df": 37, "x": {"2": {"7": {"docs": {"acmc.logging_config.DEFAULT_LOG_FILE": {"tf": 1.4142135623730951}, "acmc.main.DEFAULT_WORKSPACE_PATH": {"tf": 1.4142135623730951}, "acmc.omop.VOCAB_PATH": {"tf": 1.4142135623730951}, "acmc.omop.OMOP_CDM_Version": {"tf": 1.4142135623730951}, "acmc.omop.OMOP_DB_FILENAME": {"tf": 1.4142135623730951}, "acmc.omop.DB_PATH": {"tf": 1.4142135623730951}, "acmc.omop.VERSION_FILE": {"tf": 1.4142135623730951}, "acmc.omop.VERSION_PATH": {"tf": 1.4142135623730951}, "acmc.omop.EXPORT_FILE": {"tf": 1.4142135623730951}, "acmc.omop.vocabularies": {"tf": 9.273618495495704}, "acmc.omop.omop_vocab_types": {"tf": 5.0990195135927845}, "acmc.parse.SUPPORTED_CODE_TYPES": {"tf": 3.4641016151377544}, "acmc.phen.PHEN_DIR": {"tf": 1.4142135623730951}, "acmc.phen.DEFAULT_PHEN_PATH": {"tf": 1.4142135623730951}, "acmc.phen.CONCEPTS_DIR": {"tf": 1.4142135623730951}, "acmc.phen.MAP_DIR": {"tf": 1.4142135623730951}, "acmc.phen.CONCEPT_SET_DIR": {"tf": 1.4142135623730951}, "acmc.phen.CSV_PATH": {"tf": 1.4142135623730951}, "acmc.phen.OMOP_PATH": {"tf": 1.4142135623730951}, "acmc.phen.DEFAULT_PHEN_DIR_LIST": {"tf": 2.449489742783178}, "acmc.phen.CONFIG_FILE": {"tf": 1.4142135623730951}, "acmc.phen.VOCAB_VERSION_FILE": {"tf": 1.4142135623730951}, "acmc.phen.SEMANTIC_VERSION_TYPES": {"tf": 2.449489742783178}, "acmc.phen.DEFAULT_VERSION_INC": {"tf": 1.4142135623730951}, "acmc.phen.DEFAULT_GIT_BRANCH": {"tf": 1.4142135623730951}, "acmc.phen.SPLIT_COL_ACTION": {"tf": 1.4142135623730951}, "acmc.phen.CODES_COL_ACTION": {"tf": 1.4142135623730951}, "acmc.phen.DIVIDE_COL_ACTION": {"tf": 1.4142135623730951}, "acmc.phen.COL_ACTIONS": {"tf": 2.449489742783178}, "acmc.phen.CODE_FILE_TYPES": {"tf": 2.449489742783178}, "acmc.phen.CONFIG_SCHEMA": {"tf": 12.806248474865697}, "acmc.trud.FQDN": {"tf": 1.4142135623730951}, "acmc.trud.VOCAB_PATH": {"tf": 1.4142135623730951}, "acmc.trud.VERSION_FILE": {"tf": 1.4142135623730951}, "acmc.trud.VERSION_PATH": {"tf": 1.4142135623730951}, "acmc.trud.DOWNLOADS_PATH": {"tf": 1.4142135623730951}, "acmc.trud.PROCESSED_PATH": {"tf": 1.4142135623730951}}, "df": 37}, "docs": {}, "df": 0}, "docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "s": {"docs": {"acmc.phen.CODE_FILE_TYPES": {"tf": 1}}, "df": 1, "x": {"docs": {"acmc.phen.CODE_FILE_TYPES": {"tf": 1}}, "df": 1}}}}, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "c": {"docs": {"acmc.logging_config.DEFAULT_LOG_FILE": {"tf": 1}}, "df": 1}}, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"acmc.phen.CONFIG_SCHEMA": {"tf": 1}}, "df": 1}}}}}}, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {"acmc.omop.vocabularies": {"tf": 1}}, "df": 1}}}}, "c": {"docs": {"acmc.omop.vocabularies": {"tf": 1}, "acmc.omop.omop_vocab_types": {"tf": 1.4142135623730951}, "acmc.parse.SUPPORTED_CODE_TYPES": {"tf": 1}, "acmc.phen.CONFIG_SCHEMA": {"tf": 1}}, "df": 4}}, "l": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"acmc.phen.CONFIG_SCHEMA": {"tf": 1}}, "df": 1}}}}}}}, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "g": {"docs": {"acmc.logging_config.DEFAULT_LOG_FILE": {"tf": 1}}, "df": 1}}, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"acmc.phen.CONFIG_SCHEMA": {"tf": 1.4142135623730951}}, "df": 1}}}}, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {"acmc.main.DEFAULT_WORKSPACE_PATH": {"tf": 1}, "acmc.omop.VOCAB_PATH": {"tf": 1}, "acmc.omop.DB_PATH": {"tf": 1}, "acmc.omop.VERSION_PATH": {"tf": 1}, "acmc.phen.DEFAULT_PHEN_PATH": {"tf": 1}, "acmc.phen.CSV_PATH": {"tf": 1}, "acmc.phen.OMOP_PATH": {"tf": 1}, "acmc.trud.VOCAB_PATH": {"tf": 1}, "acmc.trud.VERSION_PATH": {"tf": 1}, "acmc.trud.DOWNLOADS_PATH": {"tf": 1}, "acmc.trud.PROCESSED_PATH": {"tf": 1}}, "df": 11}}}}}}}}, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"acmc.omop.vocabularies": {"tf": 1}}, "df": 1}}}}, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {"acmc.phen.PHEN_DIR": {"tf": 1}}, "df": 1, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {"acmc.phen.CONFIG_SCHEMA": {"tf": 1}}, "df": 1}}}}}}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "h": {"docs": {"acmc.phen.SEMANTIC_VERSION_TYPES": {"tf": 1}, "acmc.phen.DEFAULT_VERSION_INC": {"tf": 1}}, "df": 2}}, "h": {"docs": {"acmc.phen.CONFIG_SCHEMA": {"tf": 1}}, "df": 1}}}}, "w": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"acmc.main.DEFAULT_WORKSPACE_PATH": {"tf": 1}}, "df": 1, "/": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {"acmc.phen.DEFAULT_PHEN_PATH": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}, "v": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "b": {"docs": {"acmc.phen.VOCAB_VERSION_FILE": {"tf": 1}}, "df": 1, "/": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "p": {"docs": {"acmc.omop.VOCAB_PATH": {"tf": 1}}, "df": 1, "/": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "p": {"docs": {"acmc.omop.DB_PATH": {"tf": 1}, "acmc.omop.VERSION_PATH": {"tf": 1}}, "df": 2}}}}}}}}}, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "d": {"docs": {"acmc.trud.VOCAB_PATH": {"tf": 1}}, "df": 1, "/": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "d": {"docs": {"acmc.trud.VERSION_PATH": {"tf": 1}}, "df": 1}}}}, "d": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "s": {"docs": {"acmc.trud.DOWNLOADS_PATH": {"tf": 1}}, "df": 1}}}}}}}}}, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"acmc.trud.PROCESSED_PATH": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}}, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"acmc.omop.vocabularies": {"tf": 1}}, "df": 1}}}, "y": {"docs": {"acmc.phen.CONFIG_SCHEMA": {"tf": 1.7320508075688772}}, "df": 1}}}}}}}}}, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"acmc.omop.VERSION_FILE": {"tf": 1}, "acmc.omop.VERSION_PATH": {"tf": 1}, "acmc.omop.vocabularies": {"tf": 1.4142135623730951}, "acmc.phen.VOCAB_VERSION_FILE": {"tf": 1}, "acmc.phen.CONFIG_SCHEMA": {"tf": 1}, "acmc.trud.VERSION_FILE": {"tf": 1}, "acmc.trud.VERSION_PATH": {"tf": 1}}, "df": 7}}}}}}}, "o": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "p": {"docs": {"acmc.omop.OMOP_DB_FILENAME": {"tf": 1}, "acmc.omop.VERSION_FILE": {"tf": 1}, "acmc.omop.EXPORT_FILE": {"tf": 1}, "acmc.phen.CONFIG_SCHEMA": {"tf": 1}}, "df": 4}}}, "h": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {"acmc.omop.vocabularies": {"tf": 1.4142135623730951}}, "df": 1}}}}, "r": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"acmc.omop.vocabularies": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}}}}}, "p": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "s": {"4": {"docs": {"acmc.omop.vocabularies": {"tf": 1}, "acmc.omop.omop_vocab_types": {"tf": 1.4142135623730951}, "acmc.parse.SUPPORTED_CODE_TYPES": {"tf": 1}, "acmc.phen.CONFIG_SCHEMA": {"tf": 1}}, "df": 4}, "docs": {}, "df": 0}}}, "f": {"docs": {"acmc.omop.vocabularies": {"tf": 1}}, "df": 1}}, "s": {"docs": {}, "df": 0, "q": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"acmc.omop.OMOP_DB_FILENAME": {"tf": 1}, "acmc.omop.DB_PATH": {"tf": 1}, "acmc.omop.EXPORT_FILE": {"tf": 1}}, "df": 3}}}}}, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"acmc.omop.vocabularies": {"tf": 1}}, "df": 1}}}}}, "n": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"acmc.omop.vocabularies": {"tf": 1}, "acmc.omop.omop_vocab_types": {"tf": 1.4142135623730951}, "acmc.parse.SUPPORTED_CODE_TYPES": {"tf": 1}, "acmc.phen.CONFIG_SCHEMA": {"tf": 1}}, "df": 4}}}}}, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {"acmc.omop.vocabularies": {"tf": 1}}, "df": 1}}}}}}}, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {"acmc.phen.SPLIT_COL_ACTION": {"tf": 1}, "acmc.phen.COL_ACTIONS": {"tf": 1}}, "df": 2}}}}, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"acmc.omop.vocabularies": {"tf": 1}}, "df": 1}}}}}, "t": {"docs": {}, "df": 0, "s": {"docs": {"acmc.phen.CONCEPT_SET_DIR": {"tf": 1}, "acmc.phen.DEFAULT_PHEN_DIR_LIST": {"tf": 1}, "acmc.phen.CONFIG_SCHEMA": {"tf": 1}}, "df": 3, "/": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "v": {"docs": {"acmc.phen.CSV_PATH": {"tf": 1}}, "df": 1}}}, "o": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "p": {"docs": {"acmc.phen.OMOP_PATH": {"tf": 1}}, "df": 1}}}}}}}}, "c": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {"acmc.phen.CONFIG_SCHEMA": {"tf": 2.6457513110645907}}, "df": 1}}}}}, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"acmc.phen.CONFIG_SCHEMA": {"tf": 3}}, "df": 1}}}}}}, "y": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "l": {"docs": {"acmc.omop.VERSION_FILE": {"tf": 1}, "acmc.omop.VERSION_PATH": {"tf": 1}, "acmc.phen.CONFIG_FILE": {"tf": 1}, "acmc.phen.VOCAB_VERSION_FILE": {"tf": 1}, "acmc.trud.VERSION_FILE": {"tf": 1}, "acmc.trud.VERSION_PATH": {"tf": 1}}, "df": 6}}}, "e": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {"acmc.omop.EXPORT_FILE": {"tf": 1}}, "df": 1}}}}}, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {"acmc.omop.vocabularies": {"tf": 1}}, "df": 1}}}}}}, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "l": {"docs": {"acmc.omop.vocabularies": {"tf": 1}}, "df": 1}}, "k": {"docs": {"acmc.omop.vocabularies": {"tf": 1}, "acmc.trud.FQDN": {"tf": 1}}, "df": 2}}, "h": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "s": {"docs": {"acmc.phen.CONFIG_SCHEMA": {"tf": 1}}, "df": 1, ":": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {"acmc.omop.vocabularies": {"tf": 1}}, "df": 1}}}}}}}}}}}}}, "e": {"docs": {}, "df": 0, "s": {"docs": {"acmc.omop.vocabularies": {"tf": 1}}, "df": 1}}}, "c": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "m": {"docs": {"acmc.omop.vocabularies": {"tf": 1}}, "df": 1}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "y": {"docs": {"acmc.omop.vocabularies": {"tf": 1}, "acmc.phen.CONFIG_SCHEMA": {"tf": 1}}, "df": 2}}}}}}}, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "d": {"docs": {"acmc.omop.omop_vocab_types": {"tf": 1}}, "df": 1}}}, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {"acmc.phen.CONCEPT_SET_DIR": {"tf": 1}, "acmc.phen.CSV_PATH": {"tf": 1}, "acmc.phen.OMOP_PATH": {"tf": 1}, "acmc.phen.DEFAULT_PHEN_DIR_LIST": {"tf": 1}, "acmc.phen.CONFIG_SCHEMA": {"tf": 1}}, "df": 5, "s": {"docs": {"acmc.phen.CONCEPTS_DIR": {"tf": 1}, "acmc.phen.DEFAULT_PHEN_DIR_LIST": {"tf": 1}}, "df": 2}}}}}, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "g": {"docs": {"acmc.phen.CONFIG_FILE": {"tf": 1}}, "df": 1}}}}, "l": {"docs": {"acmc.phen.SPLIT_COL_ACTION": {"tf": 1}, "acmc.phen.CODES_COL_ACTION": {"tf": 1}, "acmc.phen.DIVIDE_COL_ACTION": {"tf": 1}, "acmc.phen.COL_ACTIONS": {"tf": 1.7320508075688772}, "acmc.phen.CONFIG_SCHEMA": {"tf": 1}}, "df": 5, "u": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"acmc.phen.CONFIG_SCHEMA": {"tf": 1}}, "df": 1}}}}}, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"acmc.phen.CODES_COL_ACTION": {"tf": 1}, "acmc.phen.COL_ACTIONS": {"tf": 1}}, "df": 2}}}}, "s": {"docs": {}, "df": 0, "v": {"docs": {"acmc.phen.CODE_FILE_TYPES": {"tf": 1}}, "df": 1}}}, "i": {"docs": {}, "df": 0, "d": {"docs": {"acmc.omop.vocabularies": {"tf": 3.3166247903554}, "acmc.phen.CONFIG_SCHEMA": {"tf": 1}}, "df": 2}, "c": {"docs": {}, "df": 0, "d": {"1": {"0": {"docs": {"acmc.omop.omop_vocab_types": {"tf": 1}, "acmc.parse.SUPPORTED_CODE_TYPES": {"tf": 1}, "acmc.phen.CONFIG_SCHEMA": {"tf": 1}}, "df": 3, "c": {"docs": {}, "df": 0, "m": {"docs": {"acmc.omop.vocabularies": {"tf": 1}, "acmc.omop.omop_vocab_types": {"tf": 1}}, "df": 2}}}, "docs": {}, "df": 0}, "9": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "m": {"docs": {"acmc.omop.vocabularies": {"tf": 1}}, "df": 1}}}, "docs": {}, "df": 0}}, "s": {"docs": {}, "df": 0, "d": {"docs": {"acmc.trud.FQDN": {"tf": 1}}, "df": 1}}}, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"acmc.omop.vocabularies": {"tf": 3.3166247903554}, "acmc.phen.CONFIG_SCHEMA": {"tf": 1.4142135623730951}}, "df": 2}}}, "h": {"docs": {}, "df": 0, "s": {"docs": {"acmc.omop.vocabularies": {"tf": 1.4142135623730951}, "acmc.trud.FQDN": {"tf": 1}}, "df": 2}}, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {"acmc.omop.omop_vocab_types": {"tf": 1.7320508075688772}}, "df": 1}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"2": {"docs": {"acmc.omop.omop_vocab_types": {"tf": 1}, "acmc.parse.SUPPORTED_CODE_TYPES": {"tf": 1}, "acmc.phen.CONFIG_SCHEMA": {"tf": 1}}, "df": 3}, "3": {"docs": {"acmc.omop.omop_vocab_types": {"tf": 1}, "acmc.parse.SUPPORTED_CODE_TYPES": {"tf": 1}, "acmc.phen.CONFIG_SCHEMA": {"tf": 1}}, "df": 3}, "docs": {"acmc.omop.omop_vocab_types": {"tf": 1}}, "df": 1, "v": {"2": {"docs": {"acmc.omop.vocabularies": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}}}, "q": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"acmc.phen.CONFIG_SCHEMA": {"tf": 3.4641016151377544}}, "df": 1}}}}}}, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "x": {"docs": {"acmc.phen.CONFIG_SCHEMA": {"tf": 1.4142135623730951}}, "df": 1}}}, "f": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"acmc.phen.CONFIG_SCHEMA": {"tf": 1}}, "df": 1}}}}}}}}}, "d": {"docs": {"acmc.phen.CONFIG_SCHEMA": {"tf": 1.7320508075688772}}, "df": 1, "m": {"docs": {}, "df": 0, "+": {"docs": {}, "df": 0, "d": {"docs": {"acmc.omop.vocabularies": {"tf": 1}}, "df": 1}}}, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {"acmc.phen.DIVIDE_COL_ACTION": {"tf": 1}, "acmc.phen.COL_ACTIONS": {"tf": 1}, "acmc.phen.CONFIG_SCHEMA": {"tf": 1}}, "df": 3}}}}, "c": {"docs": {}, "df": 0, "t": {"docs": {"acmc.phen.CONFIG_SCHEMA": {"tf": 2.6457513110645907}}, "df": 1}}, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"acmc.trud.FQDN": {"tf": 1}}, "df": 1}}}}}}}, "b": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "k": {"docs": {"acmc.omop.vocabularies": {"tf": 1}}, "df": 1}}}}}}}, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"acmc.omop.vocabularies": {"tf": 1}}, "df": 1}}}}}, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {"acmc.phen.CONFIG_SCHEMA": {"tf": 4.242640687119285}}, "df": 1}}}, "r": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {"acmc.phen.CONFIG_SCHEMA": {"tf": 3.3166247903554}}, "df": 1}, "d": {"docs": {"acmc.trud.VERSION_FILE": {"tf": 1}}, "df": 1}}}}, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"acmc.omop.omop_vocab_types": {"tf": 1}}, "df": 1}, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {"acmc.phen.CONFIG_SCHEMA": {"tf": 1}}, "df": 1}}}}}}}, "a": {"docs": {}, "df": 0, "p": {"docs": {"acmc.phen.MAP_DIR": {"tf": 1}, "acmc.phen.DEFAULT_PHEN_DIR_LIST": {"tf": 1}, "acmc.phen.CONFIG_SCHEMA": {"tf": 1}}, "df": 3}, "j": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"acmc.phen.SEMANTIC_VERSION_TYPES": {"tf": 1}}, "df": 1}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {"acmc.phen.DEFAULT_GIT_BRANCH": {"tf": 1}}, "df": 1}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"acmc.phen.SEMANTIC_VERSION_TYPES": {"tf": 1}}, "df": 1}}}}}, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"acmc.phen.CONFIG_SCHEMA": {"tf": 1}}, "df": 1}}}, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"acmc.phen.CONFIG_SCHEMA": {"tf": 1}}, "df": 1}}}}}}}, "signature": {"root": {"2": {"0": {"docs": {"acmc.logging_config.setup_logger": {"tf": 1}}, "df": 1}, "docs": {}, "df": 0}, "3": {"9": {"docs": {"acmc.parse.CodeTypeParser.__init__": {"tf": 1.4142135623730951}, "acmc.phen.publish": {"tf": 1.4142135623730951}}, "df": 2}, "docs": {}, "df": 0}, "docs": {"acmc.logging_config.setup_logger": {"tf": 4.47213595499958}, "acmc.logging_config.set_log_level": {"tf": 3.7416573867739413}, "acmc.main.main": {"tf": 2.6457513110645907}, "acmc.omop.install": {"tf": 4.69041575982343}, "acmc.omop.write_version_file": {"tf": 3.7416573867739413}, "acmc.omop.clear": {"tf": 4.242640687119285}, "acmc.omop.delete": {"tf": 4.242640687119285}, "acmc.omop.table_exists": {"tf": 5.291502622129181}, "acmc.omop.vocab_exists": {"tf": 5.291502622129181}, "acmc.omop.concept_set_exist": {"tf": 5.291502622129181}, "acmc.omop.export": {"tf": 7.483314773547883}, "acmc.parse.CodesError.__init__": {"tf": 6.324555320336759}, "acmc.parse.InvalidCodesException.__init__": {"tf": 2.8284271247461903}, "acmc.parse.Proto.__init__": {"tf": 5.916079783099616}, "acmc.parse.Proto.raise_exception": {"tf": 4.242640687119285}, "acmc.parse.Proto.in_database": {"tf": 8.717797887081348}, "acmc.parse.Proto.process": {"tf": 8.306623862918075}, "acmc.parse.Proto.verify": {"tf": 6.48074069840786}, "acmc.parse.CodeTypeParser.__init__": {"tf": 5.5677643628300215}, "acmc.phen.PhenValidationException.__init__": {"tf": 4}, "acmc.phen.init": {"tf": 4.69041575982343}, "acmc.phen.fork": {"tf": 6.48074069840786}, "acmc.phen.validate": {"tf": 3.7416573867739413}, "acmc.phen.translate_codes": {"tf": 7.681145747868608}, "acmc.phen.write_vocab_version": {"tf": 4.242640687119285}, "acmc.phen.map": {"tf": 4.69041575982343}, "acmc.phen.publish": {"tf": 6.782329983125268}, "acmc.phen.export": {"tf": 4.69041575982343}, "acmc.phen.copy": {"tf": 5.477225575051661}, "acmc.phen.extract_concepts": {"tf": 5.385164807134504}, "acmc.phen.diff_config": {"tf": 4.898979485566356}, "acmc.phen.diff_map_files": {"tf": 5.656854249492381}, "acmc.phen.diff_phen": {"tf": 7.937253933193772}, "acmc.phen.diff": {"tf": 6.164414002968976}, "acmc.trud.get_releases": {"tf": 5.656854249492381}, "acmc.trud.download_release_file": {"tf": 6.928203230275509}, "acmc.trud.validate_download_hash": {"tf": 4.69041575982343}, "acmc.trud.unzip_download": {"tf": 3.7416573867739413}, "acmc.trud.extract_icd10": {"tf": 2.6457513110645907}, "acmc.trud.extract_opsc4": {"tf": 2.6457513110645907}, "acmc.trud.extract_nhs_data_migrations": {"tf": 2.6457513110645907}, "acmc.trud.extract_nhs_read_browser": {"tf": 2.6457513110645907}, "acmc.trud.create_map_directories": {"tf": 2.6457513110645907}, "acmc.trud.install": {"tf": 2.6457513110645907}, "acmc.util.QuotedDumper.increase_indent": {"tf": 5.0990195135927845}}, "df": 45, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "g": {"docs": {"acmc.logging_config.setup_logger": {"tf": 1}, "acmc.logging_config.set_log_level": {"tf": 1}}, "df": 2}}, "e": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {"acmc.logging_config.setup_logger": {"tf": 1}, "acmc.logging_config.set_log_level": {"tf": 1}}, "df": 2}}}}, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"acmc.parse.Proto.process": {"tf": 1}, "acmc.trud.get_releases": {"tf": 1}}, "df": 2}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"acmc.trud.get_releases": {"tf": 1}}, "df": 1}}}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"acmc.logging_config.setup_logger": {"tf": 1}, "acmc.logging_config.set_log_level": {"tf": 1}}, "df": 2}, "c": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"acmc.phen.publish": {"tf": 1}}, "df": 1}}}}}}}, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"acmc.util.QuotedDumper.increase_indent": {"tf": 1}}, "df": 1}}}}}}}}}, "d": {"docs": {"acmc.omop.vocab_exists": {"tf": 1}, "acmc.trud.get_releases": {"tf": 1}, "acmc.trud.download_release_file": {"tf": 1}}, "df": 3}, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "m": {"docs": {"acmc.trud.get_releases": {"tf": 1}, "acmc.trud.download_release_file": {"tf": 1}, "acmc.trud.validate_download_hash": {"tf": 1}}, "df": 3}}}}, "o": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "p": {"docs": {"acmc.omop.install": {"tf": 1}, "acmc.omop.export": {"tf": 1}}, "df": 2}}}, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"acmc.parse.Proto.__init__": {"tf": 1}}, "df": 1}}}}}}}, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {"acmc.phen.fork": {"tf": 1}}, "df": 1}}}}, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"acmc.trud.download_release_file": {"tf": 1}}, "df": 1}}}}}}, "l": {"docs": {}, "df": 0, "d": {"docs": {"acmc.phen.diff_config": {"tf": 1}, "acmc.phen.diff_map_files": {"tf": 1}, "acmc.phen.diff_phen": {"tf": 1.4142135623730951}, "acmc.phen.diff": {"tf": 1.4142135623730951}}, "df": 4}}}, "z": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "p": {"docs": {"acmc.omop.install": {"tf": 1}}, "df": 1}}}, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"acmc.omop.install": {"tf": 1}, "acmc.parse.CodesError.__init__": {"tf": 1}, "acmc.parse.Proto.process": {"tf": 1}, "acmc.parse.Proto.verify": {"tf": 1}, "acmc.trud.download_release_file": {"tf": 1}, "acmc.trud.validate_download_hash": {"tf": 1}, "acmc.trud.unzip_download": {"tf": 1}}, "df": 7}}}, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"acmc.parse.Proto.in_database": {"tf": 1.7320508075688772}, "acmc.parse.Proto.process": {"tf": 1.4142135623730951}, "acmc.parse.Proto.verify": {"tf": 1}, "acmc.phen.translate_codes": {"tf": 1.4142135623730951}}, "df": 4}}}}, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"acmc.trud.get_releases": {"tf": 1}, "acmc.util.QuotedDumper.increase_indent": {"tf": 1.4142135623730951}}, "df": 2}}}}, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "w": {"docs": {"acmc.util.QuotedDumper.increase_indent": {"tf": 1}}, "df": 1}}}}, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {"acmc.omop.install": {"tf": 1.4142135623730951}, "acmc.omop.write_version_file": {"tf": 1}, "acmc.omop.table_exists": {"tf": 1}, "acmc.omop.vocab_exists": {"tf": 1}, "acmc.omop.concept_set_exist": {"tf": 1}, "acmc.omop.export": {"tf": 1}, "acmc.parse.Proto.__init__": {"tf": 1}, "acmc.parse.Proto.in_database": {"tf": 1}, "acmc.phen.init": {"tf": 1.4142135623730951}, "acmc.phen.fork": {"tf": 2}, "acmc.phen.validate": {"tf": 1}, "acmc.phen.translate_codes": {"tf": 1.4142135623730951}, "acmc.phen.map": {"tf": 1.4142135623730951}, "acmc.phen.publish": {"tf": 2}, "acmc.phen.export": {"tf": 1.4142135623730951}, "acmc.phen.copy": {"tf": 1.7320508075688772}, "acmc.phen.extract_concepts": {"tf": 1}, "acmc.phen.diff_config": {"tf": 1}, "acmc.phen.diff_map_files": {"tf": 1}, "acmc.phen.diff_phen": {"tf": 1.4142135623730951}, "acmc.phen.diff": {"tf": 2}, "acmc.trud.get_releases": {"tf": 1.4142135623730951}, "acmc.trud.download_release_file": {"tf": 1.7320508075688772}, "acmc.trud.validate_download_hash": {"tf": 1.4142135623730951}, "acmc.trud.unzip_download": {"tf": 1}}, "df": 25}}, "q": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"3": {"docs": {"acmc.omop.table_exists": {"tf": 1}, "acmc.omop.vocab_exists": {"tf": 1}, "acmc.omop.concept_set_exist": {"tf": 1}}, "df": 3}, "docs": {}, "df": 0}}}}}, "e": {"docs": {}, "df": 0, "t": {"docs": {"acmc.omop.concept_set_exist": {"tf": 1}, "acmc.phen.extract_concepts": {"tf": 1}}, "df": 2}, "l": {"docs": {}, "df": 0, "f": {"docs": {"acmc.parse.Proto.raise_exception": {"tf": 1}, "acmc.parse.Proto.in_database": {"tf": 1}, "acmc.parse.Proto.process": {"tf": 1}, "acmc.parse.Proto.verify": {"tf": 1}, "acmc.util.QuotedDumper.increase_indent": {"tf": 1}}, "df": 5}}}, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"acmc.phen.translate_codes": {"tf": 1}}, "df": 1}}}}}}, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"acmc.omop.install": {"tf": 1}, "acmc.omop.write_version_file": {"tf": 1}, "acmc.omop.export": {"tf": 1}, "acmc.phen.fork": {"tf": 1}, "acmc.phen.export": {"tf": 1}, "acmc.phen.copy": {"tf": 1}, "acmc.phen.diff_phen": {"tf": 1.4142135623730951}, "acmc.phen.diff": {"tf": 1.4142135623730951}}, "df": 8}}}}}}, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "b": {"docs": {"acmc.omop.vocab_exists": {"tf": 1}}, "df": 1, "/": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "/": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"acmc.parse.CodeTypeParser.__init__": {"tf": 1}}, "df": 1}}}}}}}}}}}}}}}}}}}, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"acmc.phen.PhenValidationException.__init__": {"tf": 1}}, "df": 1}}}}}}}}}}, "d": {"docs": {}, "df": 0, "b": {"docs": {"acmc.omop.clear": {"tf": 1}, "acmc.omop.delete": {"tf": 1}, "acmc.parse.Proto.in_database": {"tf": 1}}, "df": 3}, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"acmc.omop.export": {"tf": 1}, "acmc.phen.extract_concepts": {"tf": 1.4142135623730951}, "acmc.phen.diff_config": {"tf": 1.4142135623730951}, "acmc.trud.download_release_file": {"tf": 1}}, "df": 4}}, "r": {"docs": {"acmc.parse.CodeTypeParser.__init__": {"tf": 1}, "acmc.phen.init": {"tf": 1}, "acmc.phen.fork": {"tf": 1}, "acmc.phen.validate": {"tf": 1}, "acmc.phen.map": {"tf": 1}, "acmc.phen.publish": {"tf": 1}, "acmc.phen.export": {"tf": 1}, "acmc.phen.copy": {"tf": 1.4142135623730951}, "acmc.phen.diff": {"tf": 1.4142135623730951}}, "df": 9}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {"acmc.phen.extract_concepts": {"tf": 1}}, "df": 1, "f": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"acmc.parse.Proto.in_database": {"tf": 1.7320508075688772}, "acmc.parse.Proto.process": {"tf": 1.4142135623730951}, "acmc.parse.Proto.verify": {"tf": 1}, "acmc.phen.translate_codes": {"tf": 1.4142135623730951}}, "df": 4}}}}}}}}, "f": {"docs": {"acmc.phen.translate_codes": {"tf": 1}}, "df": 1}, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"acmc.trud.validate_download_hash": {"tf": 1}, "acmc.trud.unzip_download": {"tf": 1}}, "df": 2}}}}}}}}}}}, "p": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {"acmc.omop.clear": {"tf": 1.4142135623730951}, "acmc.omop.delete": {"tf": 1.4142135623730951}, "acmc.omop.export": {"tf": 2.23606797749979}, "acmc.parse.Proto.__init__": {"tf": 1.4142135623730951}, "acmc.parse.Proto.process": {"tf": 1}, "acmc.parse.Proto.verify": {"tf": 1}, "acmc.parse.CodeTypeParser.__init__": {"tf": 1}, "acmc.phen.write_vocab_version": {"tf": 1.4142135623730951}, "acmc.phen.diff_map_files": {"tf": 2}, "acmc.phen.diff_phen": {"tf": 2.449489742783178}, "acmc.trud.download_release_file": {"tf": 1}}, "df": 11, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "b": {"docs": {"acmc.omop.clear": {"tf": 1}, "acmc.omop.delete": {"tf": 1}, "acmc.omop.export": {"tf": 1.7320508075688772}, "acmc.parse.Proto.__init__": {"tf": 1}, "acmc.parse.Proto.process": {"tf": 1}, "acmc.parse.Proto.verify": {"tf": 1}, "acmc.parse.CodeTypeParser.__init__": {"tf": 1}, "acmc.phen.write_vocab_version": {"tf": 1}, "acmc.phen.diff_map_files": {"tf": 1.4142135623730951}, "acmc.phen.diff_phen": {"tf": 1.7320508075688772}, "acmc.trud.download_release_file": {"tf": 1}}, "df": 11}}}}, "c": {"docs": {}, "df": 0, "h": {"docs": {"acmc.phen.publish": {"tf": 1}}, "df": 1}}}, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {"acmc.parse.Proto.in_database": {"tf": 1.7320508075688772}, "acmc.parse.Proto.process": {"tf": 1.4142135623730951}, "acmc.parse.Proto.verify": {"tf": 1}, "acmc.phen.translate_codes": {"tf": 1.4142135623730951}}, "df": 4}}}}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"acmc.parse.CodeTypeParser.__init__": {"tf": 1}}, "df": 1}}}}}}}, "e": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "x": {"docs": {"acmc.trud.download_release_file": {"tf": 1}}, "df": 1}}}}}, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {"acmc.parse.CodeTypeParser.__init__": {"tf": 1}}, "df": 1}}}}}}}}, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {"acmc.phen.init": {"tf": 1}, "acmc.phen.fork": {"tf": 1}, "acmc.phen.validate": {"tf": 1}, "acmc.phen.write_vocab_version": {"tf": 1}, "acmc.phen.map": {"tf": 1}, "acmc.phen.publish": {"tf": 1}, "acmc.phen.export": {"tf": 1}, "acmc.phen.copy": {"tf": 1}, "acmc.phen.diff_phen": {"tf": 1.4142135623730951}, "acmc.phen.diff": {"tf": 1.4142135623730951}}, "df": 10}}}}, "c": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"acmc.omop.table_exists": {"tf": 1.4142135623730951}, "acmc.omop.vocab_exists": {"tf": 1.4142135623730951}, "acmc.omop.concept_set_exist": {"tf": 1.4142135623730951}}, "df": 3}}}}}, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {"acmc.omop.concept_set_exist": {"tf": 1}, "acmc.phen.translate_codes": {"tf": 1}}, "df": 2}}}}, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "g": {"docs": {"acmc.phen.extract_concepts": {"tf": 1}, "acmc.phen.diff_config": {"tf": 1.4142135623730951}}, "df": 2}}}}, "d": {"docs": {}, "df": 0, "e": {"docs": {"acmc.parse.CodesError.__init__": {"tf": 1}, "acmc.phen.translate_codes": {"tf": 1}, "acmc.phen.map": {"tf": 1}}, "df": 3, "s": {"docs": {"acmc.parse.CodesError.__init__": {"tf": 1.4142135623730951}, "acmc.parse.Proto.__init__": {"tf": 1}, "acmc.parse.Proto.in_database": {"tf": 1}, "acmc.parse.Proto.process": {"tf": 1.4142135623730951}, "acmc.parse.Proto.verify": {"tf": 1.4142135623730951}}, "df": 5}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {"acmc.parse.Proto.in_database": {"tf": 1.7320508075688772}, "acmc.parse.Proto.process": {"tf": 1.4142135623730951}, "acmc.parse.Proto.verify": {"tf": 1}, "acmc.phen.translate_codes": {"tf": 1.4142135623730951}}, "df": 4}}, "l": {"docs": {"acmc.parse.Proto.in_database": {"tf": 1}}, "df": 1}}}, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"acmc.omop.table_exists": {"tf": 1}}, "df": 1}}}, "r": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {"acmc.phen.translate_codes": {"tf": 1}, "acmc.phen.map": {"tf": 1}, "acmc.phen.copy": {"tf": 1}}, "df": 3}}}}}, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {"acmc.parse.CodesError.__init__": {"tf": 1}, "acmc.phen.translate_codes": {"tf": 1}, "acmc.phen.map": {"tf": 1}}, "df": 3}}}, "r": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "d": {"docs": {"acmc.parse.Proto.__init__": {"tf": 1}, "acmc.parse.CodeTypeParser.__init__": {"tf": 1}}, "df": 2}}}, "u": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"acmc.parse.Proto.process": {"tf": 1}, "acmc.phen.extract_concepts": {"tf": 1}}, "df": 2}}}}}, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"acmc.omop.table_exists": {"tf": 1}, "acmc.omop.concept_set_exist": {"tf": 1}, "acmc.parse.Proto.__init__": {"tf": 1}, "acmc.phen.translate_codes": {"tf": 1}}, "df": 4}}}, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {"acmc.parse.CodesError.__init__": {"tf": 2}, "acmc.parse.Proto.__init__": {"tf": 1}, "acmc.phen.PhenValidationException.__init__": {"tf": 1}}, "df": 3}}}, "e": {"docs": {}, "df": 0, "w": {"docs": {"acmc.phen.fork": {"tf": 1}, "acmc.phen.diff_config": {"tf": 1}, "acmc.phen.diff_map_files": {"tf": 1}, "acmc.phen.diff_phen": {"tf": 1.4142135623730951}}, "df": 4}}}, "b": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {"acmc.omop.table_exists": {"tf": 1}, "acmc.omop.vocab_exists": {"tf": 1}, "acmc.omop.concept_set_exist": {"tf": 1}}, "df": 3}}}}, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "p": {"docs": {"acmc.omop.export": {"tf": 1}, "acmc.phen.diff_map_files": {"tf": 1.4142135623730951}}, "df": 2}, "s": {"docs": {}, "df": 0, "k": {"docs": {"acmc.parse.CodesError.__init__": {"tf": 1}}, "df": 1}}}, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {"acmc.omop.export": {"tf": 1}}, "df": 1}}}}}}, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {"acmc.parse.CodesError.__init__": {"tf": 1}, "acmc.phen.PhenValidationException.__init__": {"tf": 1}}, "df": 2}}}}}}, "s": {"docs": {}, "df": 0, "g": {"docs": {"acmc.phen.publish": {"tf": 1}}, "df": 1}}}, "e": {"docs": {}, "df": 0, "x": {"docs": {"acmc.parse.Proto.raise_exception": {"tf": 1}}, "df": 1, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {"acmc.omop.export": {"tf": 1}}, "df": 1}}}}, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"acmc.parse.Proto.raise_exception": {"tf": 1}}, "df": 1}}}}}}}}, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"acmc.parse.InvalidCodesException.__init__": {"tf": 1}}, "df": 1, "s": {"docs": {"acmc.phen.PhenValidationException.__init__": {"tf": 1}}, "df": 1}}}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"acmc.phen.init": {"tf": 1}, "acmc.phen.publish": {"tf": 1}}, "df": 2}}}}, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {"acmc.phen.diff_phen": {"tf": 1}}, "df": 1}}}}, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"acmc.trud.download_release_file": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "l": {"docs": {"acmc.phen.init": {"tf": 1}, "acmc.phen.fork": {"tf": 1.4142135623730951}, "acmc.phen.publish": {"tf": 1}}, "df": 3}}, "p": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {"acmc.phen.fork": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}}, "a": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "i": {"docs": {"acmc.trud.get_releases": {"tf": 1}}, "df": 1}}}, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "y": {"docs": {"acmc.trud.get_releases": {"tf": 1}}, "df": 1}}}, "j": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"acmc.trud.download_release_file": {"tf": 1}}, "df": 1}}}}, "h": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "h": {"docs": {"acmc.trud.validate_download_hash": {"tf": 1}}, "df": 1}}}}}}, "bases": {"root": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"acmc.parse.InvalidCodesException": {"tf": 1}, "acmc.phen.PhenValidationException": {"tf": 1}}, "df": 2}}}}}}}}, "e": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"acmc.parse.InvalidCodesException": {"tf": 1}, "acmc.phen.PhenValidationException": {"tf": 1}}, "df": 2}}}}}}}}}, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {"acmc.parse.Read2": {"tf": 1}, "acmc.parse.Read3": {"tf": 1}, "acmc.parse.Icd10": {"tf": 1}, "acmc.parse.Snomed": {"tf": 1}, "acmc.parse.Opcs4": {"tf": 1}, "acmc.parse.Atc": {"tf": 1}, "acmc.parse.Med": {"tf": 1}, "acmc.parse.Cprd": {"tf": 1}}, "df": 8}}}}}, "y": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "l": {"docs": {"acmc.util.QuotedDumper": {"tf": 1}}, "df": 1}}}}, "d": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"acmc.util.QuotedDumper": {"tf": 1.4142135623730951}}, "df": 1}}}}}}}}, "doc": {"root": {"3": {"docs": {"acmc.parse.Proto": {"tf": 1}, "acmc.parse.Read3": {"tf": 1}, "acmc.parse.Icd10": {"tf": 1}, "acmc.parse.Snomed": {"tf": 1}, "acmc.parse.Opcs4": {"tf": 1}, "acmc.parse.Atc": {"tf": 1}, "acmc.parse.Med": {"tf": 1}, "acmc.parse.Cprd": {"tf": 1}}, "df": 8}, "docs": {"acmc": {"tf": 1.7320508075688772}, "acmc.logging_config": {"tf": 2.23606797749979}, "acmc.logging_config.DEFAULT_LOG_FILE": {"tf": 1.7320508075688772}, "acmc.logging_config.setup_logger": {"tf": 1.7320508075688772}, "acmc.logging_config.set_log_level": {"tf": 3.7416573867739413}, "acmc.main": {"tf": 2}, "acmc.main.DEFAULT_WORKSPACE_PATH": {"tf": 1.4142135623730951}, "acmc.main.main": {"tf": 1.7320508075688772}, "acmc.omop": {"tf": 2.23606797749979}, "acmc.omop.VOCAB_PATH": {"tf": 1.4142135623730951}, "acmc.omop.OMOP_CDM_Version": {"tf": 1.4142135623730951}, "acmc.omop.OMOP_DB_FILENAME": {"tf": 1.4142135623730951}, "acmc.omop.DB_PATH": {"tf": 1.4142135623730951}, "acmc.omop.VERSION_FILE": {"tf": 1.4142135623730951}, "acmc.omop.VERSION_PATH": {"tf": 1.4142135623730951}, "acmc.omop.EXPORT_FILE": {"tf": 1.4142135623730951}, "acmc.omop.vocabularies": {"tf": 1.4142135623730951}, "acmc.omop.omop_vocab_types": {"tf": 1.4142135623730951}, "acmc.omop.install": {"tf": 6.082762530298219}, "acmc.omop.write_version_file": {"tf": 3.605551275463989}, "acmc.omop.clear": {"tf": 4.795831523312719}, "acmc.omop.delete": {"tf": 4.795831523312719}, "acmc.omop.table_exists": {"tf": 5.0990195135927845}, "acmc.omop.vocab_exists": {"tf": 5.0990195135927845}, "acmc.omop.concept_set_exist": {"tf": 5.0990195135927845}, "acmc.omop.export": {"tf": 6}, "acmc.parse": {"tf": 2}, "acmc.parse.SUPPORTED_CODE_TYPES": {"tf": 1.4142135623730951}, "acmc.parse.CodesError": {"tf": 1.4142135623730951}, "acmc.parse.CodesError.__init__": {"tf": 1.7320508075688772}, "acmc.parse.InvalidCodesException": {"tf": 1.4142135623730951}, "acmc.parse.InvalidCodesException.__init__": {"tf": 1.7320508075688772}, "acmc.parse.InvalidCodesException.error": {"tf": 1.7320508075688772}, "acmc.parse.Proto": {"tf": 3.872983346207417}, "acmc.parse.Proto.__init__": {"tf": 1.7320508075688772}, "acmc.parse.Proto.checks": {"tf": 1.7320508075688772}, "acmc.parse.Proto.name": {"tf": 1.7320508075688772}, "acmc.parse.Proto.raise_exception": {"tf": 1.4142135623730951}, "acmc.parse.Proto.in_database": {"tf": 1.7320508075688772}, "acmc.parse.Proto.process": {"tf": 1.4142135623730951}, "acmc.parse.Proto.verify": {"tf": 1.4142135623730951}, "acmc.parse.Read2": {"tf": 1.7320508075688772}, "acmc.parse.Read2.checks": {"tf": 1.7320508075688772}, "acmc.parse.Read3": {"tf": 3.872983346207417}, "acmc.parse.Read3.checks": {"tf": 1.7320508075688772}, "acmc.parse.Icd10": {"tf": 3.872983346207417}, "acmc.parse.Icd10.checks": {"tf": 1.7320508075688772}, "acmc.parse.Snomed": {"tf": 3.872983346207417}, "acmc.parse.Snomed.checks": {"tf": 1.7320508075688772}, "acmc.parse.Opcs4": {"tf": 3.872983346207417}, "acmc.parse.Opcs4.checks": {"tf": 1.7320508075688772}, "acmc.parse.Atc": {"tf": 3.872983346207417}, "acmc.parse.Atc.checks": {"tf": 1.7320508075688772}, "acmc.parse.Med": {"tf": 3.872983346207417}, "acmc.parse.Med.checks": {"tf": 1.7320508075688772}, "acmc.parse.Cprd": {"tf": 3.872983346207417}, "acmc.parse.Cprd.checks": {"tf": 1.7320508075688772}, "acmc.parse.CodeTypeParser": {"tf": 1.4142135623730951}, "acmc.parse.CodeTypeParser.__init__": {"tf": 1.7320508075688772}, "acmc.parse.CodeTypeParser.code_types": {"tf": 1.7320508075688772}, "acmc.phen": {"tf": 2.23606797749979}, "acmc.phen.PHEN_DIR": {"tf": 1.4142135623730951}, "acmc.phen.DEFAULT_PHEN_PATH": {"tf": 1.4142135623730951}, "acmc.phen.CONCEPTS_DIR": {"tf": 1.4142135623730951}, "acmc.phen.MAP_DIR": {"tf": 1.4142135623730951}, "acmc.phen.CONCEPT_SET_DIR": {"tf": 1.4142135623730951}, "acmc.phen.CSV_PATH": {"tf": 1.4142135623730951}, "acmc.phen.OMOP_PATH": {"tf": 1.4142135623730951}, "acmc.phen.DEFAULT_PHEN_DIR_LIST": {"tf": 1.4142135623730951}, "acmc.phen.CONFIG_FILE": {"tf": 1.4142135623730951}, "acmc.phen.VOCAB_VERSION_FILE": {"tf": 1.4142135623730951}, "acmc.phen.SEMANTIC_VERSION_TYPES": {"tf": 1.4142135623730951}, "acmc.phen.DEFAULT_VERSION_INC": {"tf": 1.4142135623730951}, "acmc.phen.DEFAULT_GIT_BRANCH": {"tf": 1.4142135623730951}, "acmc.phen.SPLIT_COL_ACTION": {"tf": 1.4142135623730951}, "acmc.phen.CODES_COL_ACTION": {"tf": 1.4142135623730951}, "acmc.phen.DIVIDE_COL_ACTION": {"tf": 1.4142135623730951}, "acmc.phen.COL_ACTIONS": {"tf": 1.4142135623730951}, "acmc.phen.CODE_FILE_TYPES": {"tf": 1.4142135623730951}, "acmc.phen.CONFIG_SCHEMA": {"tf": 1.4142135623730951}, "acmc.phen.PhenValidationException": {"tf": 1.4142135623730951}, "acmc.phen.PhenValidationException.__init__": {"tf": 1.7320508075688772}, "acmc.phen.PhenValidationException.validation_errors": {"tf": 1.7320508075688772}, "acmc.phen.init": {"tf": 1.4142135623730951}, "acmc.phen.fork": {"tf": 6.928203230275509}, "acmc.phen.validate": {"tf": 1.4142135623730951}, "acmc.phen.translate_codes": {"tf": 1.4142135623730951}, "acmc.phen.write_vocab_version": {"tf": 1.7320508075688772}, "acmc.phen.map": {"tf": 1.7320508075688772}, "acmc.phen.publish": {"tf": 1.4142135623730951}, "acmc.phen.export": {"tf": 1.4142135623730951}, "acmc.phen.copy": {"tf": 1.4142135623730951}, "acmc.phen.extract_concepts": {"tf": 1.7320508075688772}, "acmc.phen.diff_config": {"tf": 1.7320508075688772}, "acmc.phen.diff_map_files": {"tf": 1.7320508075688772}, "acmc.phen.diff_phen": {"tf": 1.4142135623730951}, "acmc.phen.diff": {"tf": 1.7320508075688772}, "acmc.trud": {"tf": 2.23606797749979}, "acmc.trud.FQDN": {"tf": 1.4142135623730951}, "acmc.trud.VOCAB_PATH": {"tf": 1.4142135623730951}, "acmc.trud.VERSION_FILE": {"tf": 1.4142135623730951}, "acmc.trud.VERSION_PATH": {"tf": 1.4142135623730951}, "acmc.trud.DOWNLOADS_PATH": {"tf": 1.4142135623730951}, "acmc.trud.PROCESSED_PATH": {"tf": 1.4142135623730951}, "acmc.trud.get_releases": {"tf": 1.7320508075688772}, "acmc.trud.download_release_file": {"tf": 1.7320508075688772}, "acmc.trud.validate_download_hash": {"tf": 1.7320508075688772}, "acmc.trud.unzip_download": {"tf": 1.7320508075688772}, "acmc.trud.extract_icd10": {"tf": 1.7320508075688772}, "acmc.trud.extract_opsc4": {"tf": 1.7320508075688772}, "acmc.trud.extract_nhs_data_migrations": {"tf": 1.7320508075688772}, "acmc.trud.extract_nhs_read_browser": {"tf": 1.7320508075688772}, "acmc.trud.create_map_directories": {"tf": 1.7320508075688772}, "acmc.trud.install": {"tf": 1.7320508075688772}, "acmc.util": {"tf": 1.7320508075688772}, "acmc.util.QuotedDumper": {"tf": 1.4142135623730951}, "acmc.util.QuotedDumper.increase_indent": {"tf": 1.7320508075688772}}, "df": 117, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "g": {"docs": {"acmc.logging_config.DEFAULT_LOG_FILE": {"tf": 1}, "acmc.logging_config.set_log_level": {"tf": 1.7320508075688772}}, "df": 2, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"acmc.logging_config": {"tf": 1.4142135623730951}, "acmc.logging_config.set_log_level": {"tf": 1}}, "df": 2}}}, "e": {"docs": {}, "df": 0, "r": {"docs": {"acmc.logging_config.setup_logger": {"tf": 1}, "acmc.logging_config.set_log_level": {"tf": 1}}, "df": 2}, "d": {"docs": {"acmc.parse.Proto": {"tf": 1}, "acmc.parse.Read3": {"tf": 1}, "acmc.parse.Icd10": {"tf": 1}, "acmc.parse.Snomed": {"tf": 1}, "acmc.parse.Opcs4": {"tf": 1}, "acmc.parse.Atc": {"tf": 1}, "acmc.parse.Med": {"tf": 1}, "acmc.parse.Cprd": {"tf": 1}}, "df": 8}}}, "s": {"docs": {"acmc.parse.Read2": {"tf": 1}}, "df": 1}}, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"acmc.parse.Read2": {"tf": 1}}, "df": 1}}}}, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"acmc.phen.fork": {"tf": 1.4142135623730951}}, "df": 1}}}}, "e": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "l": {"docs": {"acmc.logging_config.set_log_level": {"tf": 1.7320508075688772}}, "df": 1}}}}, "i": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "u": {"docs": {"acmc.logging_config.set_log_level": {"tf": 1}}, "df": 1}, "y": {"docs": {"acmc.util.QuotedDumper": {"tf": 1}}, "df": 1}}}}}, "n": {"docs": {}, "df": 0, "e": {"docs": {"acmc.main": {"tf": 1}}, "df": 1}}, "s": {"docs": {}, "df": 0, "t": {"docs": {"acmc.parse.SUPPORTED_CODE_TYPES": {"tf": 1}, "acmc.parse.Proto": {"tf": 1}, "acmc.parse.Read3": {"tf": 1}, "acmc.parse.Icd10": {"tf": 1}, "acmc.parse.Snomed": {"tf": 1}, "acmc.parse.Opcs4": {"tf": 1}, "acmc.parse.Atc": {"tf": 1}, "acmc.parse.Med": {"tf": 1}, "acmc.parse.Cprd": {"tf": 1}, "acmc.phen.DEFAULT_PHEN_DIR_LIST": {"tf": 1}, "acmc.phen.SEMANTIC_VERSION_TYPES": {"tf": 1}, "acmc.phen.COL_ACTIONS": {"tf": 1}, "acmc.phen.CODE_FILE_TYPES": {"tf": 1.4142135623730951}, "acmc.phen.translate_codes": {"tf": 1}}, "df": 14}}}, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {"acmc.parse.Proto.raise_exception": {"tf": 1.7320508075688772}}, "df": 1}}}}}}, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "g": {"docs": {"acmc.logging_config": {"tf": 1}, "acmc.phen.CONFIG_SCHEMA": {"tf": 1}}, "df": 2, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"acmc.phen.CONFIG_FILE": {"tf": 1}, "acmc.phen.PhenValidationException": {"tf": 1}}, "df": 2}}}}}}}}}}, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {"acmc.omop.concept_set_exist": {"tf": 2}, "acmc.omop.export": {"tf": 1.4142135623730951}, "acmc.phen.CONCEPT_SET_DIR": {"tf": 1}, "acmc.phen.CSV_PATH": {"tf": 1}, "acmc.phen.OMOP_PATH": {"tf": 1}, "acmc.phen.CODE_FILE_TYPES": {"tf": 1}, "acmc.phen.translate_codes": {"tf": 1}}, "df": 7, "s": {"docs": {"acmc.phen.CONCEPTS_DIR": {"tf": 1}, "acmc.phen.extract_concepts": {"tf": 1}}, "df": 2}}}}}, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {"acmc.parse.Proto.raise_exception": {"tf": 1}}, "df": 1, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"acmc.omop.export": {"tf": 1}}, "df": 1}}}}}}}, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"acmc.parse.Proto": {"tf": 2}, "acmc.parse.Read3": {"tf": 2}, "acmc.parse.Icd10": {"tf": 2}, "acmc.parse.Snomed": {"tf": 2}, "acmc.parse.Opcs4": {"tf": 2}, "acmc.parse.Atc": {"tf": 2}, "acmc.parse.Med": {"tf": 2}, "acmc.parse.Cprd": {"tf": 2}}, "df": 8}}}}}}, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"acmc.phen.translate_codes": {"tf": 1}}, "df": 1}}}}}}}}}, "m": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {"acmc.main": {"tf": 1}}, "df": 1}}}, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"acmc.phen.publish": {"tf": 1}}, "df": 1}}}}}}, "p": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"acmc.phen.diff_phen": {"tf": 1}}, "df": 1}}}}}, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"acmc.omop.omop_vocab_types": {"tf": 1}, "acmc.parse.SUPPORTED_CODE_TYPES": {"tf": 1}, "acmc.phen.CODE_FILE_TYPES": {"tf": 1}, "acmc.phen.translate_codes": {"tf": 1}}, "df": 4}}}, "e": {"docs": {"acmc.parse": {"tf": 1}, "acmc.parse.CodesError": {"tf": 1}, "acmc.parse.CodeTypeParser": {"tf": 1}, "acmc.phen.translate_codes": {"tf": 1}}, "df": 4, "s": {"docs": {"acmc.parse.InvalidCodesException": {"tf": 1}, "acmc.parse.Proto.verify": {"tf": 1.4142135623730951}, "acmc.parse.Read2": {"tf": 1.4142135623730951}, "acmc.phen.CODES_COL_ACTION": {"tf": 1}}, "df": 4}}}, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"acmc.parse.Read2": {"tf": 1}}, "df": 1}}}}}}}}}, "l": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "n": {"docs": {"acmc.phen.SPLIT_COL_ACTION": {"tf": 1}, "acmc.phen.CODES_COL_ACTION": {"tf": 1}, "acmc.phen.DIVIDE_COL_ACTION": {"tf": 1}, "acmc.phen.COL_ACTIONS": {"tf": 1}}, "df": 4}}}}, "p": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "s": {"docs": {"acmc.phen.copy": {"tf": 1}}, "df": 1}}}}, "d": {"docs": {}, "df": 0, "m": {"docs": {"acmc.omop.OMOP_CDM_Version": {"tf": 1}}, "df": 1}}, "s": {"docs": {}, "df": 0, "v": {"docs": {"acmc.omop.install": {"tf": 1.4142135623730951}, "acmc.omop.export": {"tf": 1.7320508075688772}, "acmc.phen.CSV_PATH": {"tf": 1}}, "df": 3}}, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {"acmc.omop.clear": {"tf": 1}}, "df": 1}}}}, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"acmc.parse.CodesError": {"tf": 1}, "acmc.parse.InvalidCodesException": {"tf": 1}, "acmc.parse.Read2": {"tf": 1}, "acmc.parse.CodeTypeParser": {"tf": 1}, "acmc.phen.PhenValidationException": {"tf": 1}}, "df": 5, "e": {"docs": {}, "df": 0, "s": {"docs": {"acmc.parse": {"tf": 1}}, "df": 1}}}}}, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {"acmc.phen.fork": {"tf": 1}}, "df": 1, "d": {"docs": {"acmc.phen.fork": {"tf": 1}}, "df": 1}}}}}, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {"acmc.omop.table_exists": {"tf": 1.4142135623730951}, "acmc.omop.vocab_exists": {"tf": 1.4142135623730951}, "acmc.omop.concept_set_exist": {"tf": 1.4142135623730951}, "acmc.parse.CodesError": {"tf": 1}, "acmc.parse.CodeTypeParser": {"tf": 1}}, "df": 5, "s": {"docs": {"acmc.parse.Proto": {"tf": 1}, "acmc.parse.Read2": {"tf": 1}, "acmc.parse.Read3": {"tf": 1}, "acmc.parse.Icd10": {"tf": 1}, "acmc.parse.Snomed": {"tf": 1}, "acmc.parse.Opcs4": {"tf": 1}, "acmc.parse.Atc": {"tf": 1}, "acmc.parse.Med": {"tf": 1}, "acmc.parse.Cprd": {"tf": 1}}, "df": 9}}}}, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {"acmc.parse.Proto": {"tf": 1}, "acmc.parse.Read3": {"tf": 1}, "acmc.parse.Icd10": {"tf": 1}, "acmc.parse.Snomed": {"tf": 1}, "acmc.parse.Opcs4": {"tf": 1}, "acmc.parse.Atc": {"tf": 1}, "acmc.parse.Med": {"tf": 1}, "acmc.parse.Cprd": {"tf": 1}}, "df": 8, "s": {"docs": {"acmc.phen.publish": {"tf": 1}}, "df": 1}}}}}}, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"acmc.omop.table_exists": {"tf": 1.7320508075688772}, "acmc.omop.vocab_exists": {"tf": 1.7320508075688772}, "acmc.omop.concept_set_exist": {"tf": 1.7320508075688772}}, "df": 3}}}}, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "m": {"docs": {"acmc.parse.InvalidCodesException": {"tf": 1}, "acmc.parse.Read2": {"tf": 1}, "acmc.phen.PhenValidationException": {"tf": 1}, "acmc.util.QuotedDumper": {"tf": 1}}, "df": 4}}}}}, "a": {"docs": {}, "df": 0, "n": {"docs": {"acmc.parse.Proto.raise_exception": {"tf": 1}}, "df": 1, "n": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {"acmc.parse.InvalidCodesException": {"tf": 1}}, "df": 1}}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"acmc.trud.create_map_directories": {"tf": 1}}, "df": 1}}}}}}, "p": {"docs": {}, "df": 0, "y": {"docs": {"acmc.logging_config": {"tf": 1}, "acmc.main": {"tf": 1}, "acmc.omop": {"tf": 1}, "acmc.parse": {"tf": 1}, "acmc.phen": {"tf": 1}, "acmc.trud": {"tf": 1}}, "df": 6, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"acmc.logging_config.set_log_level": {"tf": 1}, "acmc.parse.Proto.raise_exception": {"tf": 1}}, "df": 2}}}}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"acmc.main": {"tf": 1}, "acmc.omop": {"tf": 1}, "acmc.parse": {"tf": 1}, "acmc.phen": {"tf": 1}, "acmc.trud": {"tf": 1}}, "df": 5}}}}}, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"acmc.parse.Proto": {"tf": 1.4142135623730951}, "acmc.parse.Proto.process": {"tf": 1}, "acmc.parse.Read3": {"tf": 1.4142135623730951}, "acmc.parse.Icd10": {"tf": 1.4142135623730951}, "acmc.parse.Snomed": {"tf": 1.4142135623730951}, "acmc.parse.Opcs4": {"tf": 1.4142135623730951}, "acmc.parse.Atc": {"tf": 1.4142135623730951}, "acmc.parse.Med": {"tf": 1.4142135623730951}, "acmc.parse.Cprd": {"tf": 1.4142135623730951}}, "df": 9, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"acmc.parse.InvalidCodesException": {"tf": 1}}, "df": 1}}}, "e": {"docs": {}, "df": 0, "d": {"docs": {"acmc.trud.PROCESSED_PATH": {"tf": 1}}, "df": 1}}}}}}, "t": {"docs": {}, "df": 0, "o": {"docs": {"acmc.parse.Read2": {"tf": 1}}, "df": 1}}, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "s": {"docs": {"acmc.phen.fork": {"tf": 1}}, "df": 1}}}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"acmc.parse.Proto": {"tf": 1}, "acmc.parse.Read3": {"tf": 1}, "acmc.parse.Icd10": {"tf": 1}, "acmc.parse.Snomed": {"tf": 1}, "acmc.parse.Opcs4": {"tf": 1}, "acmc.parse.Atc": {"tf": 1}, "acmc.parse.Med": {"tf": 1}, "acmc.parse.Cprd": {"tf": 1}}, "df": 8}}}}}, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"acmc.phen.SPLIT_COL_ACTION": {"tf": 1}, "acmc.phen.CODES_COL_ACTION": {"tf": 1}, "acmc.phen.DIVIDE_COL_ACTION": {"tf": 1}, "acmc.phen.COL_ACTIONS": {"tf": 1}}, "df": 4}}}}}}}}}}}}, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {"acmc.phen.fork": {"tf": 1}, "acmc.phen.export": {"tf": 1}, "acmc.phen.copy": {"tf": 1}}, "df": 3, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {"acmc.main.DEFAULT_WORKSPACE_PATH": {"tf": 1}, "acmc.omop.export": {"tf": 1.4142135623730951}, "acmc.phen": {"tf": 1}, "acmc.phen.PHEN_DIR": {"tf": 1}, "acmc.phen.DEFAULT_PHEN_PATH": {"tf": 1}, "acmc.phen.DEFAULT_PHEN_DIR_LIST": {"tf": 1}, "acmc.phen.DEFAULT_GIT_BRANCH": {"tf": 1}, "acmc.phen.CONFIG_SCHEMA": {"tf": 1}, "acmc.phen.PhenValidationException": {"tf": 1}, "acmc.phen.init": {"tf": 1}, "acmc.phen.fork": {"tf": 1.4142135623730951}, "acmc.phen.validate": {"tf": 1}, "acmc.phen.publish": {"tf": 1}, "acmc.phen.diff_phen": {"tf": 1}}, "df": 14, "s": {"docs": {"acmc.phen": {"tf": 1}}, "df": 1}}}}}}}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {"acmc.main.DEFAULT_WORKSPACE_PATH": {"tf": 1}, "acmc.omop.VOCAB_PATH": {"tf": 1}, "acmc.omop.DB_PATH": {"tf": 1}, "acmc.omop.VERSION_PATH": {"tf": 1}, "acmc.omop.clear": {"tf": 1.7320508075688772}, "acmc.omop.delete": {"tf": 1.7320508075688772}, "acmc.omop.export": {"tf": 2.8284271247461903}, "acmc.phen.DEFAULT_PHEN_PATH": {"tf": 1}, "acmc.phen.CSV_PATH": {"tf": 1}, "acmc.phen.OMOP_PATH": {"tf": 1}, "acmc.phen.fork": {"tf": 1}, "acmc.phen.extract_concepts": {"tf": 1}, "acmc.trud.VOCAB_PATH": {"tf": 1}, "acmc.trud.VERSION_PATH": {"tf": 1}, "acmc.trud.DOWNLOADS_PATH": {"tf": 1}, "acmc.trud.PROCESSED_PATH": {"tf": 1}}, "df": 16}}, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"acmc.parse": {"tf": 1}}, "df": 1, "r": {"docs": {"acmc.parse.CodesError": {"tf": 1}, "acmc.parse.CodeTypeParser": {"tf": 1}}, "df": 2}}}}, "s": {"docs": {}, "df": 0, "s": {"docs": {"acmc.parse.Proto.process": {"tf": 1}}, "df": 1, "e": {"docs": {}, "df": 0, "d": {"docs": {"acmc.parse.Proto": {"tf": 1}, "acmc.parse.Read3": {"tf": 1}, "acmc.parse.Icd10": {"tf": 1}, "acmc.parse.Snomed": {"tf": 1}, "acmc.parse.Opcs4": {"tf": 1}, "acmc.parse.Atc": {"tf": 1}, "acmc.parse.Med": {"tf": 1}, "acmc.parse.Cprd": {"tf": 1}}, "df": 8}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"acmc.parse.Proto": {"tf": 1}, "acmc.parse.Read3": {"tf": 1}, "acmc.parse.Icd10": {"tf": 1}, "acmc.parse.Snomed": {"tf": 1}, "acmc.parse.Opcs4": {"tf": 1}, "acmc.parse.Atc": {"tf": 1}, "acmc.parse.Med": {"tf": 1}, "acmc.parse.Cprd": {"tf": 1}}, "df": 8}}}}}}, "u": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"acmc.phen.publish": {"tf": 1}}, "df": 1}}}}}}}}}, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {"acmc.logging_config": {"tf": 1}, "acmc.main": {"tf": 1}, "acmc.omop": {"tf": 1}, "acmc.parse": {"tf": 1}, "acmc.parse.Read2": {"tf": 1}, "acmc.phen": {"tf": 1}, "acmc.trud": {"tf": 1}}, "df": 7}}, "e": {"docs": {"acmc.logging_config.DEFAULT_LOG_FILE": {"tf": 1}, "acmc.logging_config.set_log_level": {"tf": 1.7320508075688772}, "acmc.main": {"tf": 1.4142135623730951}, "acmc.omop.install": {"tf": 2}, "acmc.omop.write_version_file": {"tf": 1.4142135623730951}, "acmc.omop.clear": {"tf": 2}, "acmc.omop.delete": {"tf": 2}, "acmc.omop.table_exists": {"tf": 1.4142135623730951}, "acmc.omop.vocab_exists": {"tf": 1.4142135623730951}, "acmc.omop.concept_set_exist": {"tf": 1.4142135623730951}, "acmc.omop.export": {"tf": 2}, "acmc.parse.Proto": {"tf": 1.4142135623730951}, "acmc.parse.Read2": {"tf": 1.4142135623730951}, "acmc.parse.Read3": {"tf": 1.4142135623730951}, "acmc.parse.Icd10": {"tf": 1.4142135623730951}, "acmc.parse.Snomed": {"tf": 1.4142135623730951}, "acmc.parse.Opcs4": {"tf": 1.4142135623730951}, "acmc.parse.Atc": {"tf": 1.4142135623730951}, "acmc.parse.Med": {"tf": 1.4142135623730951}, "acmc.parse.Cprd": {"tf": 1.4142135623730951}, "acmc.phen.fork": {"tf": 2.8284271247461903}, "acmc.phen.validate": {"tf": 1}, "acmc.phen.translate_codes": {"tf": 1}, "acmc.phen.publish": {"tf": 1.4142135623730951}, "acmc.phen.diff_phen": {"tf": 1}, "acmc.trud": {"tf": 1}, "acmc.trud.VOCAB_PATH": {"tf": 1.7320508075688772}, "acmc.trud.VERSION_PATH": {"tf": 1}, "acmc.trud.DOWNLOADS_PATH": {"tf": 1}, "acmc.trud.PROCESSED_PATH": {"tf": 1}, "acmc.trud.get_releases": {"tf": 1}}, "df": 31, "m": {"docs": {"acmc.parse.Proto.process": {"tf": 1}}, "df": 1}, "r": {"docs": {}, "df": 0, "e": {"docs": {"acmc.phen.fork": {"tf": 1}}, "df": 1}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {"acmc.parse.InvalidCodesException": {"tf": 1}, "acmc.parse.Proto": {"tf": 1}, "acmc.parse.Proto.process": {"tf": 1}, "acmc.parse.Read2": {"tf": 1}, "acmc.parse.Read3": {"tf": 1}, "acmc.parse.Icd10": {"tf": 1}, "acmc.parse.Snomed": {"tf": 1}, "acmc.parse.Opcs4": {"tf": 1}, "acmc.parse.Atc": {"tf": 1}, "acmc.parse.Med": {"tf": 1}, "acmc.parse.Cprd": {"tf": 1}}, "df": 11}}}, "o": {"docs": {"acmc.logging_config": {"tf": 1}, "acmc.logging_config.setup_logger": {"tf": 1}, "acmc.omop": {"tf": 1}, "acmc.omop.omop_vocab_types": {"tf": 1}, "acmc.omop.write_version_file": {"tf": 1}, "acmc.omop.clear": {"tf": 1}, "acmc.omop.delete": {"tf": 1}, "acmc.omop.table_exists": {"tf": 1.4142135623730951}, "acmc.omop.vocab_exists": {"tf": 1.4142135623730951}, "acmc.omop.concept_set_exist": {"tf": 1.4142135623730951}, "acmc.omop.export": {"tf": 2.23606797749979}, "acmc.parse": {"tf": 1}, "acmc.parse.CodesError": {"tf": 1}, "acmc.parse.Proto": {"tf": 1}, "acmc.parse.Read3": {"tf": 1}, "acmc.parse.Icd10": {"tf": 1}, "acmc.parse.Snomed": {"tf": 1}, "acmc.parse.Opcs4": {"tf": 1}, "acmc.parse.Atc": {"tf": 1}, "acmc.parse.Med": {"tf": 1}, "acmc.parse.Cprd": {"tf": 1}, "acmc.parse.CodeTypeParser": {"tf": 1}, "acmc.phen.fork": {"tf": 2.6457513110645907}, "acmc.phen.publish": {"tf": 1.4142135623730951}, "acmc.trud": {"tf": 1}, "acmc.trud.VOCAB_PATH": {"tf": 1.4142135623730951}, "acmc.trud.VERSION_PATH": {"tf": 1}, "acmc.trud.DOWNLOADS_PATH": {"tf": 1}, "acmc.trud.PROCESSED_PATH": {"tf": 1}, "acmc.util.QuotedDumper": {"tf": 1}}, "df": 30}, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {"acmc.omop.omop_vocab_types": {"tf": 1}, "acmc.phen.DEFAULT_VERSION_INC": {"tf": 1}, "acmc.phen.SPLIT_COL_ACTION": {"tf": 1}, "acmc.phen.CODES_COL_ACTION": {"tf": 1}, "acmc.phen.DIVIDE_COL_ACTION": {"tf": 1}, "acmc.phen.translate_codes": {"tf": 1.4142135623730951}, "acmc.trud.download_release_file": {"tf": 1}}, "df": 7, "s": {"docs": {"acmc.omop.omop_vocab_types": {"tf": 1.4142135623730951}, "acmc.parse.SUPPORTED_CODE_TYPES": {"tf": 1}, "acmc.phen.SEMANTIC_VERSION_TYPES": {"tf": 1}, "acmc.phen.COL_ACTIONS": {"tf": 1}, "acmc.phen.CODE_FILE_TYPES": {"tf": 1}}, "df": 5}}}}, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"acmc.omop.table_exists": {"tf": 2}}, "df": 1}}}, "r": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {"acmc.phen.translate_codes": {"tf": 1}, "acmc.phen.export": {"tf": 1}, "acmc.phen.copy": {"tf": 1}}, "df": 3}}}}, "g": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"acmc.phen.export": {"tf": 1}, "acmc.phen.copy": {"tf": 1}}, "df": 2}}}}}, "r": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {"acmc.omop.table_exists": {"tf": 1}, "acmc.omop.vocab_exists": {"tf": 1}, "acmc.omop.concept_set_exist": {"tf": 1}, "acmc.parse.Proto": {"tf": 1}, "acmc.parse.Read3": {"tf": 1}, "acmc.parse.Icd10": {"tf": 1}, "acmc.parse.Snomed": {"tf": 1}, "acmc.parse.Opcs4": {"tf": 1}, "acmc.parse.Atc": {"tf": 1}, "acmc.parse.Med": {"tf": 1}, "acmc.parse.Cprd": {"tf": 1}}, "df": 11}, "d": {"docs": {"acmc.trud": {"tf": 1.4142135623730951}, "acmc.trud.FQDN": {"tf": 1}, "acmc.trud.VOCAB_PATH": {"tf": 1}, "acmc.trud.VERSION_FILE": {"tf": 1}, "acmc.trud.VERSION_PATH": {"tf": 1}, "acmc.trud.DOWNLOADS_PATH": {"tf": 1}, "acmc.trud.PROCESSED_PATH": {"tf": 1}, "acmc.trud.get_releases": {"tf": 1}}, "df": 8}}, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"acmc.parse": {"tf": 1}}, "df": 1}}}, "e": {"docs": {}, "df": 0, "s": {"docs": {"acmc.phen.translate_codes": {"tf": 1}}, "df": 1}}}}}}}}}, "u": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"acmc.parse.Proto": {"tf": 1}, "acmc.parse.Read3": {"tf": 1}, "acmc.parse.Icd10": {"tf": 1}, "acmc.parse.Snomed": {"tf": 1}, "acmc.parse.Opcs4": {"tf": 1}, "acmc.parse.Atc": {"tf": 1}, "acmc.parse.Med": {"tf": 1}, "acmc.parse.Cprd": {"tf": 1}}, "df": 8}}}}, "w": {"docs": {}, "df": 0, "o": {"docs": {"acmc.phen.diff_phen": {"tf": 1}}, "df": 1}}}, "m": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"acmc.logging_config": {"tf": 1.4142135623730951}, "acmc.main": {"tf": 1.4142135623730951}, "acmc.omop": {"tf": 1.4142135623730951}, "acmc.parse": {"tf": 1.4142135623730951}, "acmc.phen": {"tf": 1.4142135623730951}, "acmc.trud": {"tf": 1.4142135623730951}}, "df": 6}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {"acmc.parse.Proto.raise_exception": {"tf": 1}}, "df": 1}}}, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {"acmc.main": {"tf": 1}}, "df": 1}}, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {"acmc.omop": {"tf": 1}, "acmc.trud": {"tf": 1}}, "df": 2}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"acmc.phen": {"tf": 1}}, "df": 1}}}}}}, "p": {"docs": {"acmc.omop.export": {"tf": 1.4142135623730951}, "acmc.phen.MAP_DIR": {"tf": 1}, "acmc.trud.create_map_directories": {"tf": 1}}, "df": 3, "p": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "s": {"docs": {"acmc.omop.omop_vocab_types": {"tf": 1}, "acmc.trud.PROCESSED_PATH": {"tf": 1}}, "df": 2}}}}}}}, "e": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"acmc.omop.omop_vocab_types": {"tf": 1}, "acmc.parse": {"tf": 1}, "acmc.parse.SUPPORTED_CODE_TYPES": {"tf": 1}}, "df": 3}}}}}, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {"acmc.omop.export": {"tf": 1.7320508075688772}}, "df": 1}}}}}}, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "e": {"docs": {"acmc.parse.Proto": {"tf": 1.4142135623730951}, "acmc.parse.Read3": {"tf": 1.4142135623730951}, "acmc.parse.Icd10": {"tf": 1.4142135623730951}, "acmc.parse.Snomed": {"tf": 1.4142135623730951}, "acmc.parse.Opcs4": {"tf": 1.4142135623730951}, "acmc.parse.Atc": {"tf": 1.4142135623730951}, "acmc.parse.Med": {"tf": 1.4142135623730951}, "acmc.parse.Cprd": {"tf": 1.4142135623730951}}, "df": 8}}}}}}}, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {"acmc.parse.Proto": {"tf": 1}, "acmc.parse.Read3": {"tf": 1}, "acmc.parse.Icd10": {"tf": 1}, "acmc.parse.Snomed": {"tf": 1}, "acmc.parse.Opcs4": {"tf": 1}, "acmc.parse.Atc": {"tf": 1}, "acmc.parse.Med": {"tf": 1}, "acmc.parse.Cprd": {"tf": 1}}, "df": 8, "s": {"docs": {"acmc.logging_config": {"tf": 1}}, "df": 1}, "/": {"docs": {}, "df": 0, "d": {"docs": {"acmc.parse.Proto.process": {"tf": 1}}, "df": 1}}}, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"acmc.omop.vocabularies": {"tf": 1}, "acmc.phen.CONFIG_SCHEMA": {"tf": 1}}, "df": 2}}}}}}}, "a": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "t": {"docs": {"acmc.logging_config.DEFAULT_LOG_FILE": {"tf": 1}, "acmc.main.DEFAULT_WORKSPACE_PATH": {"tf": 1}, "acmc.omop.VOCAB_PATH": {"tf": 1}, "acmc.omop.OMOP_DB_FILENAME": {"tf": 1}, "acmc.omop.DB_PATH": {"tf": 1}, "acmc.omop.VERSION_FILE": {"tf": 1}, "acmc.omop.VERSION_PATH": {"tf": 1}, "acmc.omop.EXPORT_FILE": {"tf": 1}, "acmc.phen.PHEN_DIR": {"tf": 1}, "acmc.phen.DEFAULT_PHEN_PATH": {"tf": 1}, "acmc.phen.CONCEPTS_DIR": {"tf": 1}, "acmc.phen.MAP_DIR": {"tf": 1}, "acmc.phen.CONCEPT_SET_DIR": {"tf": 1}, "acmc.phen.CSV_PATH": {"tf": 1}, "acmc.phen.OMOP_PATH": {"tf": 1}, "acmc.phen.DEFAULT_PHEN_DIR_LIST": {"tf": 1}, "acmc.phen.CONFIG_FILE": {"tf": 1}, "acmc.phen.VOCAB_VERSION_FILE": {"tf": 1}, "acmc.phen.DEFAULT_VERSION_INC": {"tf": 1}, "acmc.phen.DEFAULT_GIT_BRANCH": {"tf": 1}, "acmc.trud.VOCAB_PATH": {"tf": 1}, "acmc.trud.VERSION_PATH": {"tf": 1}, "acmc.trud.DOWNLOADS_PATH": {"tf": 1}, "acmc.trud.PROCESSED_PATH": {"tf": 1}}, "df": 24, "s": {"docs": {"acmc.phen.fork": {"tf": 1}}, "df": 1}}}}}}, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"acmc.omop.delete": {"tf": 1}}, "df": 1}}}}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"acmc.omop.OMOP_DB_FILENAME": {"tf": 1}, "acmc.omop.DB_PATH": {"tf": 1}, "acmc.omop.EXPORT_FILE": {"tf": 1}, "acmc.omop.install": {"tf": 1}, "acmc.omop.clear": {"tf": 1.7320508075688772}, "acmc.omop.delete": {"tf": 1.7320508075688772}, "acmc.omop.table_exists": {"tf": 1}, "acmc.omop.vocab_exists": {"tf": 1}, "acmc.omop.concept_set_exist": {"tf": 1}, "acmc.omop.export": {"tf": 1.7320508075688772}}, "df": 10}}}}, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {"acmc.parse.Read2": {"tf": 1.4142135623730951}}, "df": 1}}}}}}, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"acmc.omop.install": {"tf": 1.4142135623730951}, "acmc.omop.write_version_file": {"tf": 1}}, "df": 2}}}}}}}}}, "r": {"docs": {"acmc.phen.fork": {"tf": 1}}, "df": 1, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"acmc.phen.fork": {"tf": 1}}, "df": 1, "y": {"docs": {"acmc.omop.export": {"tf": 1.4142135623730951}, "acmc.phen.PHEN_DIR": {"tf": 1}, "acmc.phen.DEFAULT_PHEN_PATH": {"tf": 1}, "acmc.phen.CONCEPTS_DIR": {"tf": 1}, "acmc.phen.MAP_DIR": {"tf": 1}, "acmc.phen.CONCEPT_SET_DIR": {"tf": 1}, "acmc.phen.CSV_PATH": {"tf": 1}, "acmc.phen.OMOP_PATH": {"tf": 1}, "acmc.phen.init": {"tf": 1}, "acmc.phen.fork": {"tf": 1}, "acmc.phen.validate": {"tf": 1}, "acmc.phen.publish": {"tf": 1}, "acmc.phen.export": {"tf": 1}, "acmc.phen.copy": {"tf": 1}, "acmc.trud.VOCAB_PATH": {"tf": 1.4142135623730951}, "acmc.trud.DOWNLOADS_PATH": {"tf": 1}, "acmc.trud.PROCESSED_PATH": {"tf": 1}}, "df": 17}, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"acmc.phen.DEFAULT_PHEN_DIR_LIST": {"tf": 1}, "acmc.trud.create_map_directories": {"tf": 1}}, "df": 2}}}}}}}}}, "c": {"docs": {}, "df": 0, "t": {"docs": {"acmc.omop.export": {"tf": 1}}, "df": 1, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "y": {"docs": {"acmc.phen.extract_concepts": {"tf": 1}}, "df": 1}}}}}}}}, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {"acmc.phen.DIVIDE_COL_ACTION": {"tf": 1}}, "df": 1}}}}, "f": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"acmc.phen.diff_phen": {"tf": 1}}, "df": 1}}}}}}}}}, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"acmc.trud.FQDN": {"tf": 1}}, "df": 1}}}}}}, "o": {"docs": {"acmc.parse.Proto": {"tf": 1}, "acmc.parse.Proto.process": {"tf": 1}, "acmc.parse.Read3": {"tf": 1}, "acmc.parse.Icd10": {"tf": 1}, "acmc.parse.Snomed": {"tf": 1}, "acmc.parse.Opcs4": {"tf": 1}, "acmc.parse.Atc": {"tf": 1}, "acmc.parse.Med": {"tf": 1}, "acmc.parse.Cprd": {"tf": 1}}, "df": 9, "e": {"docs": {}, "df": 0, "s": {"docs": {"acmc.omop.install": {"tf": 1}, "acmc.omop.clear": {"tf": 1}, "acmc.omop.delete": {"tf": 1}, "acmc.parse.Proto.raise_exception": {"tf": 1}}, "df": 4}}, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {"acmc.trud.FQDN": {"tf": 1}}, "df": 1}}}}, "w": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "d": {"docs": {"acmc.trud.download_release_file": {"tf": 1}}, "df": 1, "s": {"docs": {"acmc.trud.DOWNLOADS_PATH": {"tf": 1}}, "df": 1}}}}}}}}, "b": {"docs": {"acmc.omop.clear": {"tf": 1}, "acmc.omop.delete": {"tf": 1}}, "df": 2}, "u": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"acmc.util.QuotedDumper": {"tf": 1}}, "df": 1}}}}}}, "f": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"acmc.parse.Proto.raise_exception": {"tf": 1}}, "df": 1, "s": {"docs": {"acmc.logging_config": {"tf": 1}}, "df": 1}, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {"acmc.main": {"tf": 1}, "acmc.omop": {"tf": 1}, "acmc.parse": {"tf": 1}, "acmc.phen": {"tf": 1}, "acmc.trud": {"tf": 1}}, "df": 5}}}}}}}}}}}, "l": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "y": {"docs": {"acmc.trud.FQDN": {"tf": 1}}, "df": 1}}}}, "o": {"docs": {}, "df": 0, "r": {"docs": {"acmc.logging_config": {"tf": 1}, "acmc.logging_config.set_log_level": {"tf": 1}, "acmc.main": {"tf": 1}, "acmc.omop.export": {"tf": 1.4142135623730951}, "acmc.parse.Read2": {"tf": 1}, "acmc.phen": {"tf": 1}, "acmc.trud.get_releases": {"tf": 1}, "acmc.trud.download_release_file": {"tf": 1}}, "df": 8, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {"acmc.omop.export": {"tf": 1.4142135623730951}}, "df": 1}}}, "k": {"docs": {}, "df": 0, "s": {"docs": {"acmc.phen.fork": {"tf": 1}}, "df": 1}}}, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {"acmc.parse.InvalidCodesException": {"tf": 1}}, "df": 1}}}}, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"acmc.logging_config.setup_logger": {"tf": 1}, "acmc.omop.VERSION_FILE": {"tf": 1}, "acmc.omop.install": {"tf": 2.449489742783178}, "acmc.omop.write_version_file": {"tf": 1}, "acmc.parse.Proto.verify": {"tf": 1}, "acmc.phen.CODE_FILE_TYPES": {"tf": 1}, "acmc.phen.PhenValidationException": {"tf": 1}, "acmc.phen.extract_concepts": {"tf": 1}, "acmc.trud.VERSION_FILE": {"tf": 1}, "acmc.trud.VERSION_PATH": {"tf": 1}, "acmc.trud.download_release_file": {"tf": 1}}, "df": 11, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"acmc.logging_config.DEFAULT_LOG_FILE": {"tf": 1}, "acmc.omop.OMOP_DB_FILENAME": {"tf": 1}, "acmc.omop.EXPORT_FILE": {"tf": 1}, "acmc.phen.CONFIG_FILE": {"tf": 1}, "acmc.phen.VOCAB_VERSION_FILE": {"tf": 1}}, "df": 5}}}, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"acmc.omop.clear": {"tf": 1}, "acmc.omop.delete": {"tf": 1}}, "df": 2}}}}}}}}}}}}}, "s": {"docs": {"acmc.omop.install": {"tf": 1.4142135623730951}, "acmc.omop.export": {"tf": 1}}, "df": 2}}}, "x": {"docs": {"acmc.parse.Proto.process": {"tf": 1}}, "df": 1}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "m": {"docs": {"acmc.logging_config.set_log_level": {"tf": 1}, "acmc.omop.omop_vocab_types": {"tf": 1}, "acmc.parse.Proto": {"tf": 1}, "acmc.parse.Read3": {"tf": 1}, "acmc.parse.Icd10": {"tf": 1}, "acmc.parse.Snomed": {"tf": 1}, "acmc.parse.Opcs4": {"tf": 1}, "acmc.parse.Atc": {"tf": 1}, "acmc.parse.Med": {"tf": 1}, "acmc.parse.Cprd": {"tf": 1}, "acmc.trud.get_releases": {"tf": 1}}, "df": 11}}}, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "s": {"docs": {"acmc.parse.CodesError": {"tf": 1}, "acmc.parse.CodeTypeParser": {"tf": 1}}, "df": 2}, "e": {"docs": {}, "df": 0, "d": {"docs": {"acmc.parse.Proto": {"tf": 1}, "acmc.parse.Read3": {"tf": 1}, "acmc.parse.Icd10": {"tf": 1}, "acmc.parse.Snomed": {"tf": 1}, "acmc.parse.Opcs4": {"tf": 1}, "acmc.parse.Atc": {"tf": 1}, "acmc.parse.Med": {"tf": 1}, "acmc.parse.Cprd": {"tf": 1}}, "df": 8}}}}, "l": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"acmc.parse.Proto": {"tf": 1}, "acmc.parse.Read3": {"tf": 1}, "acmc.parse.Icd10": {"tf": 1}, "acmc.parse.Snomed": {"tf": 1}, "acmc.parse.Opcs4": {"tf": 1}, "acmc.parse.Atc": {"tf": 1}, "acmc.parse.Med": {"tf": 1}, "acmc.parse.Cprd": {"tf": 1}}, "df": 8}}}}}, "s": {"docs": {"acmc.parse.Proto.raise_exception": {"tf": 1}, "acmc.phen.fork": {"tf": 1}}, "df": 2, "e": {"docs": {}, "df": 0, "t": {"docs": {"acmc.omop.concept_set_exist": {"tf": 2}, "acmc.parse": {"tf": 1}, "acmc.phen.CONCEPT_SET_DIR": {"tf": 1}, "acmc.phen.CSV_PATH": {"tf": 1}, "acmc.phen.OMOP_PATH": {"tf": 1}, "acmc.phen.fork": {"tf": 1}, "acmc.phen.translate_codes": {"tf": 1}, "acmc.phen.extract_concepts": {"tf": 1}}, "df": 8, "u": {"docs": {}, "df": 0, "p": {"docs": {"acmc.logging_config": {"tf": 1}}, "df": 1}}, "s": {"docs": {"acmc.logging_config.setup_logger": {"tf": 1}, "acmc.logging_config.set_log_level": {"tf": 1}, "acmc.omop.export": {"tf": 1.4142135623730951}, "acmc.phen.fork": {"tf": 1}}, "df": 4}}, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"acmc.parse.Read2": {"tf": 1}}, "df": 1}}}}}, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {"acmc.phen.SEMANTIC_VERSION_TYPES": {"tf": 1}, "acmc.phen.DEFAULT_VERSION_INC": {"tf": 1}}, "df": 2}}}}}}, "r": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"acmc.trud.FQDN": {"tf": 1}}, "df": 1}}}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"acmc.logging_config.setup_logger": {"tf": 1}}, "df": 1}}}}}}}}, "y": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {"acmc.logging_config.setup_logger": {"tf": 1}}, "df": 1}}}, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "r": {"docs": {"acmc.logging_config.setup_logger": {"tf": 1}}, "df": 1}}}}}, "u": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {"acmc.parse.SUPPORTED_CODE_TYPES": {"tf": 1}}, "df": 1, "e": {"docs": {}, "df": 0, "d": {"docs": {"acmc.omop.OMOP_CDM_Version": {"tf": 1}, "acmc.phen.CODE_FILE_TYPES": {"tf": 1}}, "df": 2}}}}}}}}, "q": {"docs": {}, "df": 0, "l": {"docs": {"acmc.omop.install": {"tf": 1}, "acmc.omop.clear": {"tf": 1}, "acmc.omop.delete": {"tf": 1}}, "df": 3, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"acmc.omop.OMOP_DB_FILENAME": {"tf": 1}, "acmc.omop.DB_PATH": {"tf": 1}, "acmc.omop.clear": {"tf": 1.4142135623730951}, "acmc.omop.delete": {"tf": 1.4142135623730951}, "acmc.omop.table_exists": {"tf": 1}, "acmc.omop.vocab_exists": {"tf": 1}, "acmc.omop.concept_set_exist": {"tf": 1}, "acmc.omop.export": {"tf": 1}}, "df": 8}}}}, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"3": {"docs": {"acmc.omop.table_exists": {"tf": 1}, "acmc.omop.vocab_exists": {"tf": 1}, "acmc.omop.concept_set_exist": {"tf": 1}}, "df": 3}, "docs": {}, "df": 0}}}}}, "t": {"docs": {}, "df": 0, "r": {"docs": {"acmc.omop.install": {"tf": 1.4142135623730951}, "acmc.omop.write_version_file": {"tf": 1}, "acmc.omop.table_exists": {"tf": 1}, "acmc.omop.vocab_exists": {"tf": 1}, "acmc.omop.concept_set_exist": {"tf": 1}, "acmc.omop.export": {"tf": 1}, "acmc.phen.fork": {"tf": 2}}, "df": 7, "u": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"acmc.phen.init": {"tf": 1}, "acmc.phen.validate": {"tf": 1}}, "df": 2}}}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "s": {"docs": {"acmc.util.QuotedDumper": {"tf": 1}}, "df": 1}}}}}, "o": {"docs": {}, "df": 0, "p": {"docs": {"acmc.parse.Proto": {"tf": 1}, "acmc.parse.Read3": {"tf": 1}, "acmc.parse.Icd10": {"tf": 1}, "acmc.parse.Snomed": {"tf": 1}, "acmc.parse.Opcs4": {"tf": 1}, "acmc.parse.Atc": {"tf": 1}, "acmc.parse.Med": {"tf": 1}, "acmc.parse.Cprd": {"tf": 1}}, "df": 8}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"acmc.parse.Proto.raise_exception": {"tf": 1}}, "df": 1, "s": {"docs": {"acmc.parse.Proto.raise_exception": {"tf": 1}}, "df": 1}}}}}}}, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "d": {"docs": {"acmc.phen.init": {"tf": 1}, "acmc.phen.validate": {"tf": 1}}, "df": 2}}}}}}}, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {"acmc.phen.SPLIT_COL_ACTION": {"tf": 1}}, "df": 1}}}, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {"acmc.phen.fork": {"tf": 1}, "acmc.phen.export": {"tf": 1}, "acmc.phen.copy": {"tf": 1}}, "df": 3}, "e": {"docs": {}, "df": 0, "d": {"docs": {"acmc.phen.fork": {"tf": 1}, "acmc.trud.download_release_file": {"tf": 1}}, "df": 2}}}}}}}}, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"acmc.phen.CODE_FILE_TYPES": {"tf": 1}, "acmc.phen.translate_codes": {"tf": 1.4142135623730951}}, "df": 2}}}}}, "c": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {"acmc.phen.CONFIG_SCHEMA": {"tf": 1}}, "df": 1}}}}}}, "a": {"docs": {"acmc.logging_config.setup_logger": {"tf": 1}, "acmc.omop.install": {"tf": 1.4142135623730951}, "acmc.omop.write_version_file": {"tf": 1}, "acmc.omop.table_exists": {"tf": 1}, "acmc.omop.vocab_exists": {"tf": 1}, "acmc.omop.concept_set_exist": {"tf": 1}, "acmc.parse.CodesError": {"tf": 1.4142135623730951}, "acmc.parse.Proto.raise_exception": {"tf": 1}, "acmc.parse.Read2": {"tf": 1}, "acmc.parse.CodeTypeParser": {"tf": 1.4142135623730951}, "acmc.phen.fork": {"tf": 2.23606797749979}, "acmc.phen.validate": {"tf": 1}, "acmc.phen.translate_codes": {"tf": 1.4142135623730951}, "acmc.phen.export": {"tf": 1.7320508075688772}, "acmc.phen.copy": {"tf": 1.7320508075688772}, "acmc.phen.extract_concepts": {"tf": 1}, "acmc.phen.diff_phen": {"tf": 1}, "acmc.trud.download_release_file": {"tf": 1}}, "df": 18, "c": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "c": {"docs": {"acmc.logging_config": {"tf": 1}, "acmc.logging_config.DEFAULT_LOG_FILE": {"tf": 1}, "acmc.logging_config.setup_logger": {"tf": 1}, "acmc.logging_config.set_log_level": {"tf": 1}, "acmc.main": {"tf": 1}, "acmc.omop.omop_vocab_types": {"tf": 1}, "acmc.omop.export": {"tf": 1}, "acmc.trud.VOCAB_PATH": {"tf": 1}}, "df": 8}}, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {"acmc.logging_config": {"tf": 1}}, "df": 1}}}}, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"acmc.phen.SPLIT_COL_ACTION": {"tf": 1}, "acmc.phen.CODES_COL_ACTION": {"tf": 1}, "acmc.phen.DIVIDE_COL_ACTION": {"tf": 1}, "acmc.phen.COL_ACTIONS": {"tf": 1}}, "df": 4}}}}}, "l": {"docs": {}, "df": 0, "l": {"docs": {"acmc.logging_config": {"tf": 1}, "acmc.parse.Proto": {"tf": 1}, "acmc.parse.Read3": {"tf": 1}, "acmc.parse.Icd10": {"tf": 1}, "acmc.parse.Snomed": {"tf": 1}, "acmc.parse.Opcs4": {"tf": 1}, "acmc.parse.Atc": {"tf": 1}, "acmc.parse.Med": {"tf": 1}, "acmc.parse.Cprd": {"tf": 1}, "acmc.phen.translate_codes": {"tf": 1}, "acmc.phen.publish": {"tf": 1}}, "df": 11, "o": {"docs": {}, "df": 0, "w": {"docs": {"acmc.parse.Proto.raise_exception": {"tf": 1}}, "df": 1}}}}, "p": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"acmc.logging_config.DEFAULT_LOG_FILE": {"tf": 1}}, "df": 1}}}}}}, "e": {"docs": {}, "df": 0, "s": {"docs": {"acmc.parse.Read2": {"tf": 1}}, "df": 1}}}}}, "i": {"docs": {"acmc.trud.FQDN": {"tf": 1}, "acmc.trud.get_releases": {"tf": 1}}, "df": 2}}, "s": {"docs": {"acmc.logging_config.setup_logger": {"tf": 1}, "acmc.parse.Proto": {"tf": 1}, "acmc.parse.Proto.raise_exception": {"tf": 1}, "acmc.parse.Read3": {"tf": 1}, "acmc.parse.Icd10": {"tf": 1}, "acmc.parse.Snomed": {"tf": 1}, "acmc.parse.Opcs4": {"tf": 1}, "acmc.parse.Atc": {"tf": 1}, "acmc.parse.Med": {"tf": 1}, "acmc.parse.Cprd": {"tf": 1}, "acmc.phen.init": {"tf": 1}, "acmc.phen.fork": {"tf": 1}, "acmc.phen.translate_codes": {"tf": 1}, "acmc.phen.extract_concepts": {"tf": 1}}, "df": 14}, "n": {"docs": {"acmc.parse.CodesError": {"tf": 1}, "acmc.parse.Proto.raise_exception": {"tf": 1}, "acmc.parse.CodeTypeParser": {"tf": 1}, "acmc.phen.fork": {"tf": 1}, "acmc.trud.get_releases": {"tf": 1}, "acmc.trud.download_release_file": {"tf": 1}}, "df": 6, "d": {"docs": {"acmc.logging_config.setup_logger": {"tf": 1}, "acmc.omop.write_version_file": {"tf": 1}, "acmc.parse.Proto": {"tf": 1.4142135623730951}, "acmc.parse.Proto.process": {"tf": 1}, "acmc.parse.Read2": {"tf": 1}, "acmc.parse.Read3": {"tf": 1.4142135623730951}, "acmc.parse.Icd10": {"tf": 1.4142135623730951}, "acmc.parse.Snomed": {"tf": 1.4142135623730951}, "acmc.parse.Opcs4": {"tf": 1.4142135623730951}, "acmc.parse.Atc": {"tf": 1.4142135623730951}, "acmc.parse.Med": {"tf": 1.4142135623730951}, "acmc.parse.Cprd": {"tf": 1.4142135623730951}, "acmc.phen.fork": {"tf": 1}, "acmc.phen.translate_codes": {"tf": 1}, "acmc.phen.extract_concepts": {"tf": 1}}, "df": 15}, "y": {"docs": {"acmc.phen.fork": {"tf": 1}}, "df": 1}}, "r": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"acmc.logging_config.set_log_level": {"tf": 1}, "acmc.omop.install": {"tf": 1}, "acmc.omop.write_version_file": {"tf": 1}, "acmc.omop.clear": {"tf": 1}, "acmc.omop.delete": {"tf": 1}, "acmc.omop.table_exists": {"tf": 1}, "acmc.omop.vocab_exists": {"tf": 1}, "acmc.omop.concept_set_exist": {"tf": 1}, "acmc.omop.export": {"tf": 1}, "acmc.phen.fork": {"tf": 1}}, "df": 10}}}}}}}, "e": {"docs": {"acmc.omop.export": {"tf": 1}, "acmc.parse.InvalidCodesException": {"tf": 1}}, "df": 2}}, "t": {"docs": {"acmc.phen.fork": {"tf": 1}, "acmc.phen.export": {"tf": 1}, "acmc.phen.copy": {"tf": 1}}, "df": 3, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {"acmc.omop.install": {"tf": 1.4142135623730951}, "acmc.omop.write_version_file": {"tf": 1}}, "df": 2}}}}}, "i": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "s": {"docs": {"acmc.parse.Proto": {"tf": 1}, "acmc.parse.Read3": {"tf": 1}, "acmc.parse.Icd10": {"tf": 1}, "acmc.parse.Snomed": {"tf": 1}, "acmc.parse.Opcs4": {"tf": 1}, "acmc.parse.Atc": {"tf": 1}, "acmc.parse.Med": {"tf": 1}, "acmc.parse.Cprd": {"tf": 1}}, "df": 8}}}, "d": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"acmc.parse.Read2": {"tf": 1}}, "df": 1}}}}}}, "u": {"docs": {}, "df": 0, "p": {"docs": {"acmc.logging_config.setup_logger": {"tf": 1}, "acmc.parse": {"tf": 1}}, "df": 2, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"docs": {"acmc.phen.fork": {"tf": 2.8284271247461903}}, "df": 1}}}}}}, "d": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"acmc.phen.publish": {"tf": 1}}, "df": 1}}}}}}, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"acmc.parse.CodesError": {"tf": 1}, "acmc.parse.CodeTypeParser": {"tf": 1}}, "df": 2}}, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"acmc.parse.Proto.raise_exception": {"tf": 1.4142135623730951}}, "df": 1}}}}, "r": {"docs": {}, "df": 0, "l": {"docs": {"acmc.phen.fork": {"tf": 2}}, "df": 1}}}, "o": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"acmc.logging_config.setup_logger": {"tf": 1}}, "df": 1}}}}}}}}, "m": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "p": {"docs": {"acmc.omop": {"tf": 1.4142135623730951}, "acmc.omop.VOCAB_PATH": {"tf": 1}, "acmc.omop.OMOP_CDM_Version": {"tf": 1}, "acmc.omop.OMOP_DB_FILENAME": {"tf": 1}, "acmc.omop.DB_PATH": {"tf": 1}, "acmc.omop.VERSION_FILE": {"tf": 1}, "acmc.omop.VERSION_PATH": {"tf": 1}, "acmc.omop.EXPORT_FILE": {"tf": 1}, "acmc.omop.vocabularies": {"tf": 1}, "acmc.omop.omop_vocab_types": {"tf": 1}, "acmc.omop.install": {"tf": 1.7320508075688772}, "acmc.omop.write_version_file": {"tf": 1}, "acmc.omop.clear": {"tf": 1.7320508075688772}, "acmc.omop.delete": {"tf": 1.7320508075688772}, "acmc.omop.export": {"tf": 2.449489742783178}, "acmc.phen.OMOP_PATH": {"tf": 1}}, "df": 16}}}, "h": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {"acmc.omop.install": {"tf": 1.4142135623730951}, "acmc.omop.write_version_file": {"tf": 1}}, "df": 2}}}}, "f": {"docs": {"acmc.omop.install": {"tf": 1}, "acmc.omop.write_version_file": {"tf": 1}, "acmc.parse.SUPPORTED_CODE_TYPES": {"tf": 1}, "acmc.parse.Proto": {"tf": 1.4142135623730951}, "acmc.parse.Read2": {"tf": 1}, "acmc.parse.Read3": {"tf": 1.4142135623730951}, "acmc.parse.Icd10": {"tf": 1.4142135623730951}, "acmc.parse.Snomed": {"tf": 1.4142135623730951}, "acmc.parse.Opcs4": {"tf": 1.4142135623730951}, "acmc.parse.Atc": {"tf": 1.4142135623730951}, "acmc.parse.Med": {"tf": 1.4142135623730951}, "acmc.parse.Cprd": {"tf": 1.4142135623730951}, "acmc.phen.DEFAULT_PHEN_DIR_LIST": {"tf": 1}, "acmc.phen.SEMANTIC_VERSION_TYPES": {"tf": 1}, "acmc.phen.COL_ACTIONS": {"tf": 1}, "acmc.phen.CODE_FILE_TYPES": {"tf": 1}, "acmc.phen.fork": {"tf": 1}, "acmc.phen.diff_phen": {"tf": 1}, "acmc.trud": {"tf": 1}, "acmc.trud.FQDN": {"tf": 1}, "acmc.trud.download_release_file": {"tf": 1}}, "df": 21}, "n": {"docs": {"acmc.parse.Read2": {"tf": 1}, "acmc.util.QuotedDumper": {"tf": 1}}, "df": 2, "l": {"docs": {}, "df": 0, "y": {"docs": {"acmc.parse.Proto.raise_exception": {"tf": 1}}, "df": 1}}}, "r": {"docs": {"acmc.parse.Read2": {"tf": 1}}, "df": 1, "i": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {"acmc.phen.fork": {"tf": 1.7320508075688772}}, "df": 1}}}}}, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"acmc.phen.fork": {"tf": 1}}, "df": 1, "l": {"docs": {}, "df": 0, "y": {"docs": {"acmc.phen.fork": {"tf": 1}}, "df": 1}}}}}}}}}, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"acmc.phen.fork": {"tf": 1}}, "df": 1}}}}}, "i": {"docs": {}, "df": 0, "n": {"docs": {"acmc.omop.install": {"tf": 1}, "acmc.omop.export": {"tf": 1.4142135623730951}, "acmc.parse.CodesError": {"tf": 1}, "acmc.parse.Proto.verify": {"tf": 1}, "acmc.parse.CodeTypeParser": {"tf": 1}, "acmc.phen.PhenValidationException": {"tf": 1}, "acmc.phen.fork": {"tf": 1.7320508075688772}, "acmc.util.QuotedDumper": {"tf": 1}}, "df": 8, "t": {"docs": {"acmc.logging_config.set_log_level": {"tf": 1}}, "df": 1, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"acmc.main": {"tf": 1}}, "df": 1}}}}}}, "o": {"docs": {"acmc.phen.translate_codes": {"tf": 1}, "acmc.phen.export": {"tf": 1}, "acmc.phen.copy": {"tf": 1}}, "df": 3}}, "s": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "s": {"docs": {"acmc.omop.install": {"tf": 1}}, "df": 1}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"acmc.trud": {"tf": 1}}, "df": 1}}}}}}}}}, "i": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {"acmc.parse.Proto.raise_exception": {"tf": 1.4142135623730951}}, "df": 1}}}}, "v": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "d": {"docs": {"acmc.parse.InvalidCodesException": {"tf": 1}}, "df": 1, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"acmc.parse.CodesError": {"tf": 1}, "acmc.parse.CodeTypeParser": {"tf": 1}}, "df": 2}}}}}}}}}}}}}}}}}}}, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "x": {"docs": {"acmc.parse.Proto": {"tf": 1}, "acmc.parse.Read3": {"tf": 1}, "acmc.parse.Icd10": {"tf": 1}, "acmc.parse.Snomed": {"tf": 1}, "acmc.parse.Opcs4": {"tf": 1}, "acmc.parse.Atc": {"tf": 1}, "acmc.parse.Med": {"tf": 1}, "acmc.parse.Cprd": {"tf": 1}}, "df": 8}}}, "c": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {"acmc.phen.SEMANTIC_VERSION_TYPES": {"tf": 1}, "acmc.phen.DEFAULT_VERSION_INC": {"tf": 1}}, "df": 2}}}}}}}, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "l": {"docs": {"acmc.phen.init": {"tf": 1}}, "df": 1}}}}}, "f": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"acmc.trud.get_releases": {"tf": 1}}, "df": 1}}}}}}}}}}, "f": {"docs": {"acmc.omop.install": {"tf": 1.7320508075688772}, "acmc.omop.clear": {"tf": 1}, "acmc.omop.delete": {"tf": 1}, "acmc.omop.table_exists": {"tf": 1.4142135623730951}, "acmc.omop.vocab_exists": {"tf": 1.4142135623730951}, "acmc.omop.concept_set_exist": {"tf": 1.4142135623730951}, "acmc.parse.CodesError": {"tf": 1}, "acmc.parse.Proto": {"tf": 1.4142135623730951}, "acmc.parse.Read3": {"tf": 1.4142135623730951}, "acmc.parse.Icd10": {"tf": 1.4142135623730951}, "acmc.parse.Snomed": {"tf": 1.4142135623730951}, "acmc.parse.Opcs4": {"tf": 1.4142135623730951}, "acmc.parse.Atc": {"tf": 1.4142135623730951}, "acmc.parse.Med": {"tf": 1.4142135623730951}, "acmc.parse.Cprd": {"tf": 1.4142135623730951}, "acmc.parse.CodeTypeParser": {"tf": 1}, "acmc.phen.fork": {"tf": 1.7320508075688772}}, "df": 17}, "s": {"docs": {"acmc.omop.install": {"tf": 1}, "acmc.parse.Proto": {"tf": 1}, "acmc.parse.Read2": {"tf": 1}, "acmc.parse.Read3": {"tf": 1}, "acmc.parse.Icd10": {"tf": 1}, "acmc.parse.Snomed": {"tf": 1}, "acmc.parse.Opcs4": {"tf": 1}, "acmc.parse.Atc": {"tf": 1}, "acmc.parse.Med": {"tf": 1}, "acmc.parse.Cprd": {"tf": 1}, "acmc.phen.fork": {"tf": 1.7320508075688772}, "acmc.phen.validate": {"tf": 1}}, "df": 12, "s": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"acmc.parse.Proto": {"tf": 1}, "acmc.parse.Proto.process": {"tf": 1}, "acmc.parse.Read3": {"tf": 1}, "acmc.parse.Icd10": {"tf": 1}, "acmc.parse.Snomed": {"tf": 1}, "acmc.parse.Opcs4": {"tf": 1}, "acmc.parse.Atc": {"tf": 1}, "acmc.parse.Med": {"tf": 1}, "acmc.parse.Cprd": {"tf": 1}}, "df": 9}}}}}, "d": {"docs": {"acmc.omop.vocab_exists": {"tf": 1.7320508075688772}}, "df": 1, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "y": {"docs": {"acmc.parse.Proto.process": {"tf": 1}}, "df": 1}}}}}}}, "t": {"docs": {"acmc.parse.Proto.raise_exception": {"tf": 1}, "acmc.parse.Read2": {"tf": 1}}, "df": 2, "e": {"docs": {}, "df": 0, "m": {"docs": {"acmc.trud.get_releases": {"tf": 1}, "acmc.trud.download_release_file": {"tf": 1}}, "df": 2}}}}, "w": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "k": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {"acmc.main.DEFAULT_WORKSPACE_PATH": {"tf": 1}}, "df": 1}}}}}}}}, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"acmc.omop.write_version_file": {"tf": 1}}, "df": 1}}, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {"acmc.omop.export": {"tf": 1}}, "df": 1}}}}}}, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {"acmc.omop.export": {"tf": 1}, "acmc.phen.fork": {"tf": 1}}, "df": 2}}, "n": {"docs": {"acmc.parse.InvalidCodesException": {"tf": 1}, "acmc.parse.Read2": {"tf": 1}, "acmc.phen.PhenValidationException": {"tf": 1}}, "df": 3}}, "a": {"docs": {}, "df": 0, "t": {"docs": {"acmc.parse.Proto": {"tf": 1}, "acmc.parse.Read3": {"tf": 1}, "acmc.parse.Icd10": {"tf": 1}, "acmc.parse.Snomed": {"tf": 1}, "acmc.parse.Opcs4": {"tf": 1}, "acmc.parse.Atc": {"tf": 1}, "acmc.parse.Med": {"tf": 1}, "acmc.parse.Cprd": {"tf": 1}}, "df": 8}}}, "i": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {"acmc.parse.Proto.process": {"tf": 1}, "acmc.phen.init": {"tf": 1}, "acmc.phen.fork": {"tf": 1}, "acmc.phen.validate": {"tf": 1}}, "df": 4}}}}, "v": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "b": {"docs": {"acmc.omop.vocab_exists": {"tf": 1}}, "df": 1, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"acmc.omop": {"tf": 1}, "acmc.omop.vocabularies": {"tf": 1}, "acmc.omop.install": {"tf": 1.4142135623730951}, "acmc.omop.write_version_file": {"tf": 1}, "acmc.trud": {"tf": 1}}, "df": 5}}}, "y": {"docs": {"acmc.omop.VOCAB_PATH": {"tf": 1}, "acmc.omop.omop_vocab_types": {"tf": 1}, "acmc.omop.vocab_exists": {"tf": 1.7320508075688772}, "acmc.omop.export": {"tf": 1.4142135623730951}, "acmc.phen.VOCAB_VERSION_FILE": {"tf": 1}, "acmc.trud.VOCAB_PATH": {"tf": 1}, "acmc.trud.DOWNLOADS_PATH": {"tf": 1}}, "df": 7}}}}, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"acmc.omop.write_version_file": {"tf": 1}}, "df": 1}}}}}}}}}}}, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"acmc.omop.OMOP_CDM_Version": {"tf": 1}, "acmc.omop.VERSION_FILE": {"tf": 1}, "acmc.omop.VERSION_PATH": {"tf": 1}, "acmc.omop.install": {"tf": 1.4142135623730951}, "acmc.omop.write_version_file": {"tf": 1.7320508075688772}, "acmc.omop.export": {"tf": 1.7320508075688772}, "acmc.phen.VOCAB_VERSION_FILE": {"tf": 1}, "acmc.phen.SEMANTIC_VERSION_TYPES": {"tf": 1}, "acmc.phen.DEFAULT_VERSION_INC": {"tf": 1}, "acmc.phen.fork": {"tf": 2}, "acmc.phen.export": {"tf": 1}, "acmc.phen.copy": {"tf": 1}, "acmc.trud.VERSION_FILE": {"tf": 1}, "acmc.trud.VERSION_PATH": {"tf": 1}}, "df": 14, "s": {"docs": {"acmc.phen.diff_phen": {"tf": 1}}, "df": 1}}}}}, "i": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "y": {"docs": {"acmc.parse.Proto.verify": {"tf": 1}}, "df": 1}}}}}, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"acmc.omop.install": {"tf": 1.4142135623730951}, "acmc.phen.fork": {"tf": 1.7320508075688772}}, "df": 2}}}}}}}, "i": {"docs": {}, "df": 0, "d": {"docs": {"acmc.phen.fork": {"tf": 1}}, "df": 1, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"acmc.parse.Read2": {"tf": 1}, "acmc.phen.PhenValidationException": {"tf": 1}}, "df": 2}}}, "e": {"docs": {}, "df": 0, "s": {"docs": {"acmc.parse.Read2": {"tf": 1}, "acmc.phen.validate": {"tf": 1}}, "df": 2}}}}}}}}}, "n": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "b": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {"acmc.omop.OMOP_CDM_Version": {"tf": 1}}, "df": 1}}}}}, "o": {"docs": {}, "df": 0, "t": {"docs": {"acmc.omop.install": {"tf": 1.4142135623730951}, "acmc.omop.clear": {"tf": 1}, "acmc.omop.delete": {"tf": 1}, "acmc.parse.Proto": {"tf": 1}, "acmc.parse.Proto.raise_exception": {"tf": 1.7320508075688772}, "acmc.parse.Proto.process": {"tf": 1}, "acmc.parse.Read3": {"tf": 1}, "acmc.parse.Icd10": {"tf": 1}, "acmc.parse.Snomed": {"tf": 1}, "acmc.parse.Opcs4": {"tf": 1}, "acmc.parse.Atc": {"tf": 1}, "acmc.parse.Med": {"tf": 1}, "acmc.parse.Cprd": {"tf": 1}, "acmc.phen.fork": {"tf": 1.4142135623730951}}, "df": 14}, "n": {"docs": {}, "df": 0, "e": {"docs": {"acmc.phen.fork": {"tf": 1}}, "df": 1}}}, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "e": {"docs": {"acmc.omop.table_exists": {"tf": 1.4142135623730951}, "acmc.omop.concept_set_exist": {"tf": 1.4142135623730951}, "acmc.parse.Proto": {"tf": 1}, "acmc.parse.Read3": {"tf": 1}, "acmc.parse.Icd10": {"tf": 1}, "acmc.parse.Snomed": {"tf": 1}, "acmc.parse.Opcs4": {"tf": 1}, "acmc.parse.Atc": {"tf": 1}, "acmc.parse.Med": {"tf": 1}, "acmc.parse.Cprd": {"tf": 1}, "acmc.phen.PHEN_DIR": {"tf": 1}, "acmc.phen.CONCEPTS_DIR": {"tf": 1}, "acmc.phen.MAP_DIR": {"tf": 1}, "acmc.phen.CONCEPT_SET_DIR": {"tf": 1}, "acmc.phen.DEFAULT_GIT_BRANCH": {"tf": 1}, "acmc.phen.extract_concepts": {"tf": 1.4142135623730951}, "acmc.trud.FQDN": {"tf": 1}}, "df": 17}}}, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "y": {"docs": {"acmc.parse.Read2": {"tf": 1}}, "df": 1}}}}}}}, "w": {"docs": {"acmc.phen.fork": {"tf": 1.7320508075688772}}, "df": 1}}, "h": {"docs": {}, "df": 0, "s": {"docs": {"acmc.trud": {"tf": 1}, "acmc.trud.FQDN": {"tf": 1}}, "df": 2}}}, "e": {"docs": {}, "df": 0, "x": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {"acmc.omop.EXPORT_FILE": {"tf": 1}, "acmc.omop.export": {"tf": 1.4142135623730951}}, "df": 2, "e": {"docs": {}, "df": 0, "d": {"docs": {"acmc.omop.export": {"tf": 1}}, "df": 1}}, "s": {"docs": {"acmc.phen.export": {"tf": 1}}, "df": 1}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"acmc.parse.Proto.raise_exception": {"tf": 1}}, "df": 1}}}}}}}}, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {"acmc.parse.Proto.raise_exception": {"tf": 1}}, "df": 1}}}}}, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"docs": {"acmc.omop.install": {"tf": 1}, "acmc.omop.clear": {"tf": 1}, "acmc.omop.delete": {"tf": 1}}, "df": 3, "s": {"docs": {"acmc.omop.table_exists": {"tf": 1.4142135623730951}, "acmc.omop.vocab_exists": {"tf": 1.4142135623730951}, "acmc.omop.concept_set_exist": {"tf": 1.4142135623730951}}, "df": 3}}}}, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"acmc.omop.install": {"tf": 1}, "acmc.parse.InvalidCodesException": {"tf": 1}, "acmc.parse.Proto.raise_exception": {"tf": 1.4142135623730951}, "acmc.phen.PhenValidationException": {"tf": 1}}, "df": 4}}}}}}}, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "s": {"docs": {"acmc.parse.Read2": {"tf": 1}}, "df": 1}}}}, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"acmc.phen.extract_concepts": {"tf": 1}}, "df": 1}}}}}}, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"acmc.trud.VOCAB_PATH": {"tf": 1}}, "df": 1}}}}}}}}, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"acmc.omop.install": {"tf": 1}, "acmc.parse.CodesError": {"tf": 1}, "acmc.parse.CodeTypeParser": {"tf": 1}}, "df": 3, "s": {"docs": {"acmc.parse.Read2": {"tf": 1}, "acmc.phen.PhenValidationException": {"tf": 1}}, "df": 2}}}}}, "n": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"acmc.parse.Read2": {"tf": 1}}, "df": 1}}}}}}, "a": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "h": {"docs": {"acmc.phen.translate_codes": {"tf": 1}}, "df": 1}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "q": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"acmc.omop.vocabularies": {"tf": 1}}, "df": 1}}}}}}, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"acmc.omop.install": {"tf": 1}, "acmc.trud.get_releases": {"tf": 1}, "acmc.trud.download_release_file": {"tf": 1}}, "df": 3}}}}, "a": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"acmc.trud.VOCAB_PATH": {"tf": 1}}, "df": 1}}}}}}, "a": {"docs": {}, "df": 0, "d": {"2": {"docs": {"acmc.parse.Read2": {"tf": 1.4142135623730951}}, "df": 1}, "docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "g": {"docs": {"acmc.omop.install": {"tf": 1}}, "df": 1}}}}}, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "s": {"docs": {"acmc.omop.table_exists": {"tf": 1}, "acmc.omop.vocab_exists": {"tf": 1}, "acmc.omop.concept_set_exist": {"tf": 1}, "acmc.omop.export": {"tf": 1}, "acmc.phen.translate_codes": {"tf": 1}}, "df": 5}}}}, "r": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"acmc.trud.get_releases": {"tf": 1}}, "df": 1}}}}}, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {"acmc.util.QuotedDumper": {"tf": 1}}, "df": 1}}}}, "p": {"docs": {}, "df": 0, "o": {"docs": {"acmc.phen.DEFAULT_GIT_BRANCH": {"tf": 1}, "acmc.phen.init": {"tf": 1}, "acmc.phen.fork": {"tf": 2.8284271247461903}, "acmc.phen.validate": {"tf": 1}, "acmc.phen.publish": {"tf": 1}, "acmc.phen.export": {"tf": 1}, "acmc.phen.copy": {"tf": 1}}, "df": 7, "r": {"docs": {}, "df": 0, "t": {"docs": {"acmc.parse.CodesError": {"tf": 1}, "acmc.parse.CodeTypeParser": {"tf": 1}}, "df": 2}}}}, "s": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "v": {"docs": {}, "df": 0, "e": {"docs": {"acmc.parse.Proto": {"tf": 1}, "acmc.parse.Read3": {"tf": 1}, "acmc.parse.Icd10": {"tf": 1}, "acmc.parse.Snomed": {"tf": 1}, "acmc.parse.Opcs4": {"tf": 1}, "acmc.parse.Atc": {"tf": 1}, "acmc.parse.Med": {"tf": 1}, "acmc.parse.Cprd": {"tf": 1}}, "df": 8, "d": {"docs": {"acmc.parse.InvalidCodesException": {"tf": 1}}, "df": 1}}}}}}, "m": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {"acmc.phen.fork": {"tf": 1.7320508075688772}}, "df": 1}}}}}, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"acmc.parse.Proto.raise_exception": {"tf": 1.7320508075688772}}, "df": 1, "s": {"docs": {"acmc.omop.install": {"tf": 1}, "acmc.omop.clear": {"tf": 1}, "acmc.omop.delete": {"tf": 1}, "acmc.parse.Proto.raise_exception": {"tf": 1}, "acmc.phen.fork": {"tf": 1}}, "df": 5}, "d": {"docs": {"acmc.parse.InvalidCodesException": {"tf": 1}, "acmc.phen.PhenValidationException": {"tf": 1}}, "df": 2}}}}}, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"acmc.parse.Read2": {"tf": 1}}, "df": 1}}}}}, "b": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"acmc.omop.install": {"tf": 1}, "acmc.parse.Read2": {"tf": 1}}, "df": 2}}}}, "y": {"docs": {"acmc.omop.install": {"tf": 1.4142135623730951}, "acmc.omop.write_version_file": {"tf": 1}, "acmc.parse.InvalidCodesException": {"tf": 1}, "acmc.phen.publish": {"tf": 1}}, "df": 4}, "o": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {"acmc.omop.table_exists": {"tf": 1}, "acmc.omop.vocab_exists": {"tf": 1}, "acmc.omop.concept_set_exist": {"tf": 1}}, "df": 3}}}, "e": {"docs": {"acmc.omop.export": {"tf": 1}, "acmc.parse.InvalidCodesException": {"tf": 1}, "acmc.phen.fork": {"tf": 1}}, "df": 3, "c": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "e": {"docs": {"acmc.parse.Proto.raise_exception": {"tf": 1}}, "df": 1}}}}}, "t": {"docs": {}, "df": 0, "w": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {"acmc.phen.diff_phen": {"tf": 1}}, "df": 1}}}}}}, "r": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "h": {"docs": {"acmc.phen.DEFAULT_GIT_BRANCH": {"tf": 1}}, "df": 1}}}}}}, "z": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "p": {"docs": {"acmc.omop.install": {"tf": 2}}, "df": 1}}}, "q": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "y": {"docs": {"acmc.omop.table_exists": {"tf": 1}, "acmc.omop.vocab_exists": {"tf": 1}, "acmc.omop.concept_set_exist": {"tf": 1}}, "df": 3}}}, "a": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "d": {"docs": {"acmc.trud.FQDN": {"tf": 1}}, "df": 1}}}}}}}, "o": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"acmc.util.QuotedDumper": {"tf": 1}}, "df": 1}}}}}}, "y": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "l": {"docs": {"acmc.phen.CONFIG_SCHEMA": {"tf": 1}}, "df": 1}}, "a": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "l": {"docs": {"acmc.util.QuotedDumper": {"tf": 1}}, "df": 1}}}}, "g": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "t": {"docs": {"acmc.phen.init": {"tf": 1}, "acmc.phen.fork": {"tf": 1}, "acmc.phen.validate": {"tf": 1}}, "df": 3}, "v": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {"acmc.trud.download_release_file": {"tf": 1}}, "df": 1}}}}}}}}, "pipeline": ["trimmer"], "_isPrebuiltIndex": true};
 
     // mirrored in build-search-index.js (part 1)
     // Also split on html tags. this is a cheap heuristic, but good enough.