diff --git a/docs/api/acmc/omop.html b/docs/api/acmc/omop.html
index 2283c41f434f10663622429b88506f8a32a46341..879520eaf02437c47091e817a2655b29b0c9c63e 100644
--- a/docs/api/acmc/omop.html
+++ b/docs/api/acmc/omop.html
@@ -212,115 +212,115 @@
 </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"># connect to database, if it does not exist it will be created</span>
 </span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</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-99"><a href="#L-99"><span class="linenos"> 99</span></a>    <span class="c1"># Iterate through files in the folder</span>
-</span><span id="L-100"><a href="#L-100"><span class="linenos">100</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-101"><a href="#L-101"><span class="linenos">101</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-102"><a href="#L-102"><span class="linenos">102</span></a>    <span class="n">table_count</span> <span class="o">=</span> <span class="mi">1</span>
-</span><span id="L-103"><a href="#L-103"><span class="linenos">103</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-104"><a href="#L-104"><span class="linenos">104</span></a>        <span class="k">try</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><span id="L-106"><a href="#L-106"><span class="linenos">106</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-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 class="c1"># read the CSV file with the specified delimiter</span>
-</span><span id="L-109"><a href="#L-109"><span class="linenos">109</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-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="c1"># export Table to sqlite db</span>
-</span><span id="L-112"><a href="#L-112"><span class="linenos">112</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-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"># add to the metadata</span>
-</span><span id="L-115"><a href="#L-115"><span class="linenos">115</span></a>            <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-116"><a href="#L-116"><span class="linenos">116</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-117"><a href="#L-117"><span class="linenos">117</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-118"><a href="#L-118"><span class="linenos">118</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-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="n">conn</span><span class="o">.</span><span class="n">close</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"># write version file</span>
-</span><span id="L-123"><a href="#L-123"><span class="linenos">123</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-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="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-126"><a href="#L-126"><span class="linenos">126</span></a>
+</span><span id="L-99"><a href="#L-99"><span class="linenos"> 99</span></a>
+</span><span id="L-100"><a href="#L-100"><span class="linenos">100</span></a>    <span class="c1"># Iterate through files in the folder</span>
+</span><span id="L-101"><a href="#L-101"><span class="linenos">101</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-102"><a href="#L-102"><span class="linenos">102</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-103"><a href="#L-103"><span class="linenos">103</span></a>    <span class="n">table_count</span> <span class="o">=</span> <span class="mi">1</span>
+</span><span id="L-104"><a href="#L-104"><span class="linenos">104</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-105"><a href="#L-105"><span class="linenos">105</span></a>        <span class="k">try</span><span class="p">:</span>
+</span><span id="L-106"><a href="#L-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><span id="L-107"><a href="#L-107"><span class="linenos">107</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-108"><a href="#L-108"><span class="linenos">108</span></a>            <span class="p">)</span>
+</span><span id="L-109"><a href="#L-109"><span class="linenos">109</span></a>            <span class="c1"># read the CSV file with the specified delimiter</span>
+</span><span id="L-110"><a href="#L-110"><span class="linenos">110</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-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="c1"># export Table to sqlite db</span>
+</span><span id="L-113"><a href="#L-113"><span class="linenos">113</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-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"># add to the metadata</span>
+</span><span id="L-116"><a href="#L-116"><span class="linenos">116</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-117"><a href="#L-117"><span class="linenos">117</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-118"><a href="#L-118"><span class="linenos">118</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-119"><a href="#L-119"><span class="linenos">119</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-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="n">conn</span><span class="o">.</span><span class="n">close</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"># write version file</span>
+</span><span id="L-124"><a href="#L-124"><span class="linenos">124</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-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="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-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">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-129"><a href="#L-129"><span class="linenos">129</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Writes the OMOP vocaburaries and version to a file&quot;&quot;&quot;</span>
-</span><span id="L-130"><a href="#L-130"><span class="linenos">130</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-131"><a href="#L-131"><span class="linenos">131</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-132"><a href="#L-132"><span class="linenos">132</span></a>        <span class="n">yaml</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span>
-</span><span id="L-133"><a href="#L-133"><span class="linenos">133</span></a>            <span class="n">vocabularies</span><span class="p">,</span>
-</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a>            <span class="n">file</span><span class="p">,</span>
-</span><span id="L-135"><a href="#L-135"><span class="linenos">135</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-136"><a href="#L-136"><span class="linenos">136</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-137"><a href="#L-137"><span class="linenos">137</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-138"><a href="#L-138"><span class="linenos">138</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-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-128"><a href="#L-128"><span class="linenos">128</span></a>
+</span><span id="L-129"><a href="#L-129"><span class="linenos">129</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-130"><a href="#L-130"><span class="linenos">130</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Writes the OMOP vocaburaries and version to a file&quot;&quot;&quot;</span>
+</span><span id="L-131"><a href="#L-131"><span class="linenos">131</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-132"><a href="#L-132"><span class="linenos">132</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-133"><a href="#L-133"><span class="linenos">133</span></a>        <span class="n">yaml</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span>
+</span><span id="L-134"><a href="#L-134"><span class="linenos">134</span></a>            <span class="n">vocabularies</span><span class="p">,</span>
+</span><span id="L-135"><a href="#L-135"><span class="linenos">135</span></a>            <span class="n">file</span><span class="p">,</span>
+</span><span id="L-136"><a href="#L-136"><span class="linenos">136</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-137"><a href="#L-137"><span class="linenos">137</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-138"><a href="#L-138"><span class="linenos">138</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-139"><a href="#L-139"><span class="linenos">139</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-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><span id="L-142"><a href="#L-142"><span class="linenos">142</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-143"><a href="#L-143"><span class="linenos">143</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Clears the OMOP sql database&quot;&quot;&quot;</span>
-</span><span id="L-144"><a href="#L-144"><span class="linenos">144</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-145"><a href="#L-145"><span class="linenos">145</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-146"><a href="#L-146"><span class="linenos">146</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-147"><a href="#L-147"><span class="linenos">147</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-148"><a href="#L-148"><span class="linenos">148</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-149"><a href="#L-149"><span class="linenos">149</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-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 class="c1"># Fetch and print table names</span>
-</span><span id="L-152"><a href="#L-152"><span class="linenos">152</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-153"><a href="#L-153"><span class="linenos">153</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-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="c1"># cur.execute(&quot;DROP TABLE CONCEPT_SET;&quot;)</span>
-</span><span id="L-156"><a href="#L-156"><span class="linenos">156</span></a>    <span class="c1"># cur.execute(&quot;DROP TABLE CONCEPT_SET_ITEM;&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="n">conn</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
-</span><span id="L-159"><a href="#L-159"><span class="linenos">159</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-160"><a href="#L-160"><span class="linenos">160</span></a>
+</span><span id="L-142"><a href="#L-142"><span class="linenos">142</span></a>
+</span><span id="L-143"><a href="#L-143"><span class="linenos">143</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-144"><a href="#L-144"><span class="linenos">144</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Clears the OMOP sql database&quot;&quot;&quot;</span>
+</span><span id="L-145"><a href="#L-145"><span class="linenos">145</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-146"><a href="#L-146"><span class="linenos">146</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-147"><a href="#L-147"><span class="linenos">147</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-148"><a href="#L-148"><span class="linenos">148</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-149"><a href="#L-149"><span class="linenos">149</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-150"><a href="#L-150"><span class="linenos">150</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-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"># Fetch and print table names</span>
+</span><span id="L-153"><a href="#L-153"><span class="linenos">153</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-154"><a href="#L-154"><span class="linenos">154</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-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 class="c1"># cur.execute(&quot;DROP TABLE CONCEPT_SET;&quot;)</span>
+</span><span id="L-157"><a href="#L-157"><span class="linenos">157</span></a>    <span class="c1"># cur.execute(&quot;DROP TABLE CONCEPT_SET_ITEM;&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="n">conn</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+</span><span id="L-160"><a href="#L-160"><span class="linenos">160</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-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="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-163"><a href="#L-163"><span class="linenos">163</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Deletes the OMOP sql database&quot;&quot;&quot;</span>
-</span><span id="L-164"><a href="#L-164"><span class="linenos">164</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-165"><a href="#L-165"><span class="linenos">165</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-166"><a href="#L-166"><span class="linenos">166</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-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="n">db_path</span><span class="o">.</span><span class="n">unlink</span><span class="p">()</span>
-</span><span id="L-169"><a href="#L-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;OMOP database deleted&quot;</span><span class="p">)</span>
-</span><span id="L-170"><a href="#L-170"><span class="linenos">170</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">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-164"><a href="#L-164"><span class="linenos">164</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Deletes the OMOP sql database&quot;&quot;&quot;</span>
+</span><span id="L-165"><a href="#L-165"><span class="linenos">165</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-166"><a href="#L-166"><span class="linenos">166</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-167"><a href="#L-167"><span class="linenos">167</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-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 class="n">db_path</span><span class="o">.</span><span class="n">unlink</span><span class="p">()</span>
+</span><span id="L-170"><a href="#L-170"><span class="linenos">170</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-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 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-173"><a href="#L-173"><span class="linenos">173</span></a>    <span class="c1"># Query to check if the table exists</span>
-</span><span id="L-174"><a href="#L-174"><span class="linenos">174</span></a>    <span class="n">cursor</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span>
-</span><span id="L-175"><a href="#L-175"><span class="linenos">175</span></a><span class="w">        </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-176"><a href="#L-176"><span class="linenos">176</span></a><span class="sd">		SELECT name</span>
-</span><span id="L-177"><a href="#L-177"><span class="linenos">177</span></a><span class="sd">		FROM sqlite_master</span>
-</span><span id="L-178"><a href="#L-178"><span class="linenos">178</span></a><span class="sd">		WHERE type=&#39;table&#39; AND name=?</span>
-</span><span id="L-179"><a href="#L-179"><span class="linenos">179</span></a><span class="sd">		&quot;&quot;&quot;</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 class="n">table_name</span><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><span id="L-183"><a href="#L-183"><span class="linenos">183</span></a>    <span class="c1"># Fetch the result</span>
-</span><span id="L-184"><a href="#L-184"><span class="linenos">184</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-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="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-187"><a href="#L-187"><span class="linenos">187</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">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-174"><a href="#L-174"><span class="linenos">174</span></a>    <span class="c1"># Query to check if the table exists</span>
+</span><span id="L-175"><a href="#L-175"><span class="linenos">175</span></a>    <span class="n">cursor</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span>
+</span><span id="L-176"><a href="#L-176"><span class="linenos">176</span></a><span class="w">        </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-177"><a href="#L-177"><span class="linenos">177</span></a><span class="sd">		SELECT name</span>
+</span><span id="L-178"><a href="#L-178"><span class="linenos">178</span></a><span class="sd">		FROM sqlite_master</span>
+</span><span id="L-179"><a href="#L-179"><span class="linenos">179</span></a><span class="sd">		WHERE type=&#39;table&#39; AND name=?</span>
+</span><span id="L-180"><a href="#L-180"><span class="linenos">180</span></a><span class="sd">		&quot;&quot;&quot;</span><span class="p">,</span>
+</span><span id="L-181"><a href="#L-181"><span class="linenos">181</span></a>        <span class="p">(</span><span class="n">table_name</span><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><span id="L-184"><a href="#L-184"><span class="linenos">184</span></a>    <span class="c1"># Fetch the result</span>
+</span><span id="L-185"><a href="#L-185"><span class="linenos">185</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-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">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-188"><a href="#L-188"><span class="linenos">188</span></a>
-</span><span id="L-189"><a href="#L-189"><span class="linenos">189</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-190"><a href="#L-190"><span class="linenos">190</span></a>    <span class="c1"># Query to check if the table exists</span>
-</span><span id="L-191"><a href="#L-191"><span class="linenos">191</span></a>    <span class="n">cursor</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span>
-</span><span id="L-192"><a href="#L-192"><span class="linenos">192</span></a><span class="w">        </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-193"><a href="#L-193"><span class="linenos">193</span></a><span class="sd">		SELECT vocabulary_id </span>
-</span><span id="L-194"><a href="#L-194"><span class="linenos">194</span></a><span class="sd">		FROM VOCABULARY</span>
-</span><span id="L-195"><a href="#L-195"><span class="linenos">195</span></a><span class="sd">		WHERE vocabulary_id=?</span>
-</span><span id="L-196"><a href="#L-196"><span class="linenos">196</span></a><span class="sd">		&quot;&quot;&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 class="n">vocab_id</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><span id="L-200"><a href="#L-200"><span class="linenos">200</span></a>    <span class="c1"># Fetch the result</span>
-</span><span id="L-201"><a href="#L-201"><span class="linenos">201</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-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="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-204"><a href="#L-204"><span class="linenos">204</span></a>
+</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="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-191"><a href="#L-191"><span class="linenos">191</span></a>    <span class="c1"># Query to check if the table exists</span>
+</span><span id="L-192"><a href="#L-192"><span class="linenos">192</span></a>    <span class="n">cursor</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span>
+</span><span id="L-193"><a href="#L-193"><span class="linenos">193</span></a><span class="w">        </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="L-194"><a href="#L-194"><span class="linenos">194</span></a><span class="sd">		SELECT vocabulary_id </span>
+</span><span id="L-195"><a href="#L-195"><span class="linenos">195</span></a><span class="sd">		FROM VOCABULARY</span>
+</span><span id="L-196"><a href="#L-196"><span class="linenos">196</span></a><span class="sd">		WHERE vocabulary_id=?</span>
+</span><span id="L-197"><a href="#L-197"><span class="linenos">197</span></a><span class="sd">		&quot;&quot;&quot;</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 class="n">vocab_id</span><span class="p">,),</span>
+</span><span id="L-199"><a href="#L-199"><span class="linenos">199</span></a>    <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 class="c1"># Fetch the result</span>
+</span><span id="L-202"><a href="#L-202"><span class="linenos">202</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-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="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-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 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-207"><a href="#L-207"><span class="linenos">207</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">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-208"><a href="#L-208"><span class="linenos">208</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-209"><a href="#L-209"><span class="linenos">209</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-210"><a href="#L-210"><span class="linenos">210</span></a>
@@ -387,68 +387,67 @@
 </span><span id="L-271"><a href="#L-271"><span class="linenos">271</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-272"><a href="#L-272"><span class="linenos">272</span></a>
 </span><span id="L-273"><a href="#L-273"><span class="linenos">273</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-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"># create Concept_Set</span>
-</span><span id="L-276"><a href="#L-276"><span class="linenos">276</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-277"><a href="#L-277"><span class="linenos">277</span></a>                <span class="n">cur</span><span class="o">.</span><span class="n">execute</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;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-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="k">else</span><span class="p">:</span>
-</span><span id="L-281"><a href="#L-281"><span class="linenos">281</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-282"><a href="#L-282"><span class="linenos">282</span></a>                <span class="c1"># TODO: ask to remove old concept_set?</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 class="c1"># get Concept_set_Id</span>
-</span><span id="L-285"><a href="#L-285"><span class="linenos">285</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-286"><a href="#L-286"><span class="linenos">286</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-287"><a href="#L-287"><span class="linenos">287</span></a>            <span class="n">cur</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span>
-</span><span id="L-288"><a href="#L-288"><span class="linenos">288</span></a>                <span class="n">query</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="n">concept_set_name</span><span class="p">,</span>
-</span><span id="L-291"><a href="#L-291"><span class="linenos">291</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-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="c1"># FAILS HERE WITH NONE REUR</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">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-296"><a href="#L-296"><span class="linenos">296</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-297"><a href="#L-297"><span class="linenos">297</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-298"><a href="#L-298"><span class="linenos">298</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-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="c1"># get corresponing Concept_id (OMOP) for each Concept_code (e.g. SNOMED)</span>
-</span><span id="L-301"><a href="#L-301"><span class="linenos">301</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-302"><a href="#L-302"><span class="linenos">302</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-303"><a href="#L-303"><span class="linenos">303</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-304"><a href="#L-304"><span class="linenos">304</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-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="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-307"><a href="#L-307"><span class="linenos">307</span></a>                <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span>
-</span><span id="L-308"><a href="#L-308"><span class="linenos">308</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-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><span id="L-311"><a href="#L-311"><span class="linenos">311</span></a>            <span class="c1"># Create Concept_set_item</span>
-</span><span id="L-312"><a href="#L-312"><span class="linenos">312</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-313"><a href="#L-313"><span class="linenos">313</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-314"><a href="#L-314"><span class="linenos">314</span></a>
-</span><span id="L-315"><a href="#L-315"><span class="linenos">315</span></a>    <span class="c1"># Output all tables to CSV</span>
-</span><span id="L-316"><a href="#L-316"><span class="linenos">316</span></a>    <span class="c1"># Get the list of all tables</span>
-</span><span id="L-317"><a href="#L-317"><span class="linenos">317</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-318"><a href="#L-318"><span class="linenos">318</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-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"># Export each table to a separate CSV file</span>
-</span><span id="L-321"><a href="#L-321"><span class="linenos">321</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-322"><a href="#L-322"><span class="linenos">322</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-323"><a href="#L-323"><span class="linenos">323</span></a>        <span class="c1"># ignore SQLite&#39;s internal system table</span>
-</span><span id="L-324"><a href="#L-324"><span class="linenos">324</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-325"><a href="#L-325"><span class="linenos">325</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-326"><a href="#L-326"><span class="linenos">326</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-327"><a href="#L-327"><span class="linenos">327</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-328"><a href="#L-328"><span class="linenos">328</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-329"><a href="#L-329"><span class="linenos">329</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-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="n">conn</span><span class="o">.</span><span class="n">close</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 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-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="k">return</span> <span class="n">export_db_path</span>
+</span><span id="L-274"><a href="#L-274"><span class="linenos">274</span></a>            <span class="c1"># create Concept_Set</span>
+</span><span id="L-275"><a href="#L-275"><span class="linenos">275</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-276"><a href="#L-276"><span class="linenos">276</span></a>                <span class="n">cur</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span>
+</span><span id="L-277"><a href="#L-277"><span class="linenos">277</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-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="k">else</span><span class="p">:</span>
+</span><span id="L-280"><a href="#L-280"><span class="linenos">280</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-281"><a href="#L-281"><span class="linenos">281</span></a>                <span class="c1"># TODO: ask to remove old concept_set?</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="c1"># get Concept_set_Id</span>
+</span><span id="L-284"><a href="#L-284"><span class="linenos">284</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-285"><a href="#L-285"><span class="linenos">285</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-286"><a href="#L-286"><span class="linenos">286</span></a>            <span class="n">cur</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span>
+</span><span id="L-287"><a href="#L-287"><span class="linenos">287</span></a>                <span class="n">query</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">concept_set_name</span><span class="p">,</span>
+</span><span id="L-290"><a href="#L-290"><span class="linenos">290</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-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="c1"># FAILS HERE WITH NONE REUR</span>
+</span><span id="L-294"><a href="#L-294"><span class="linenos">294</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-295"><a href="#L-295"><span class="linenos">295</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-296"><a href="#L-296"><span class="linenos">296</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-297"><a href="#L-297"><span class="linenos">297</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-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"># get corresponing Concept_id (OMOP) for each Concept_code (e.g. SNOMED)</span>
+</span><span id="L-300"><a href="#L-300"><span class="linenos">300</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-301"><a href="#L-301"><span class="linenos">301</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-302"><a href="#L-302"><span class="linenos">302</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-303"><a href="#L-303"><span class="linenos">303</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-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="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-306"><a href="#L-306"><span class="linenos">306</span></a>                <span class="n">logger</span><span class="o">.</span><span class="n">error</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;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-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><span id="L-310"><a href="#L-310"><span class="linenos">310</span></a>            <span class="c1"># Create Concept_set_item</span>
+</span><span id="L-311"><a href="#L-311"><span class="linenos">311</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-312"><a href="#L-312"><span class="linenos">312</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-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"># Output all tables to CSV</span>
+</span><span id="L-315"><a href="#L-315"><span class="linenos">315</span></a>    <span class="c1"># Get the list of all tables</span>
+</span><span id="L-316"><a href="#L-316"><span class="linenos">316</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-317"><a href="#L-317"><span class="linenos">317</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-318"><a href="#L-318"><span class="linenos">318</span></a>
+</span><span id="L-319"><a href="#L-319"><span class="linenos">319</span></a>    <span class="c1"># Export each table to a separate CSV file</span>
+</span><span id="L-320"><a href="#L-320"><span class="linenos">320</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-321"><a href="#L-321"><span class="linenos">321</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-322"><a href="#L-322"><span class="linenos">322</span></a>        <span class="c1"># ignore SQLite&#39;s internal system table</span>
+</span><span id="L-323"><a href="#L-323"><span class="linenos">323</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-324"><a href="#L-324"><span class="linenos">324</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-325"><a href="#L-325"><span class="linenos">325</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-326"><a href="#L-326"><span class="linenos">326</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-327"><a href="#L-327"><span class="linenos">327</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-328"><a href="#L-328"><span class="linenos">328</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-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="n">conn</span><span class="o">.</span><span class="n">close</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 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-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">return</span> <span class="n">export_db_path</span>
 </span></pre></div>
 
 
@@ -619,33 +618,34 @@
 </span><span id="install-97"><a href="#install-97"><span class="linenos"> 97</span></a>
 </span><span id="install-98"><a href="#install-98"><span class="linenos"> 98</span></a>    <span class="c1"># connect to database, if it does not exist it will be created</span>
 </span><span id="install-99"><a href="#install-99"><span class="linenos"> 99</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-100"><a href="#install-100"><span class="linenos">100</span></a>    <span class="c1"># Iterate through files in the folder</span>
-</span><span id="install-101"><a href="#install-101"><span class="linenos">101</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-102"><a href="#install-102"><span class="linenos">102</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-103"><a href="#install-103"><span class="linenos">103</span></a>    <span class="n">table_count</span> <span class="o">=</span> <span class="mi">1</span>
-</span><span id="install-104"><a href="#install-104"><span class="linenos">104</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-105"><a href="#install-105"><span class="linenos">105</span></a>        <span class="k">try</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><span id="install-107"><a href="#install-107"><span class="linenos">107</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-108"><a href="#install-108"><span class="linenos">108</span></a>            <span class="p">)</span>
-</span><span id="install-109"><a href="#install-109"><span class="linenos">109</span></a>            <span class="c1"># read the CSV file with the specified delimiter</span>
-</span><span id="install-110"><a href="#install-110"><span class="linenos">110</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-111"><a href="#install-111"><span class="linenos">111</span></a>
-</span><span id="install-112"><a href="#install-112"><span class="linenos">112</span></a>            <span class="c1"># export Table to sqlite db</span>
-</span><span id="install-113"><a href="#install-113"><span class="linenos">113</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-114"><a href="#install-114"><span class="linenos">114</span></a>
-</span><span id="install-115"><a href="#install-115"><span class="linenos">115</span></a>            <span class="c1"># add to the metadata</span>
-</span><span id="install-116"><a href="#install-116"><span class="linenos">116</span></a>            <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-117"><a href="#install-117"><span class="linenos">117</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-118"><a href="#install-118"><span class="linenos">118</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-119"><a href="#install-119"><span class="linenos">119</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-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="n">conn</span><span class="o">.</span><span class="n">close</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"># write version file</span>
-</span><span id="install-124"><a href="#install-124"><span class="linenos">124</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-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="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="install-100"><a href="#install-100"><span class="linenos">100</span></a>
+</span><span id="install-101"><a href="#install-101"><span class="linenos">101</span></a>    <span class="c1"># Iterate through files in the folder</span>
+</span><span id="install-102"><a href="#install-102"><span class="linenos">102</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-103"><a href="#install-103"><span class="linenos">103</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-104"><a href="#install-104"><span class="linenos">104</span></a>    <span class="n">table_count</span> <span class="o">=</span> <span class="mi">1</span>
+</span><span id="install-105"><a href="#install-105"><span class="linenos">105</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-106"><a href="#install-106"><span class="linenos">106</span></a>        <span class="k">try</span><span class="p">:</span>
+</span><span id="install-107"><a href="#install-107"><span class="linenos">107</span></a>            <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span>
+</span><span id="install-108"><a href="#install-108"><span class="linenos">108</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-109"><a href="#install-109"><span class="linenos">109</span></a>            <span class="p">)</span>
+</span><span id="install-110"><a href="#install-110"><span class="linenos">110</span></a>            <span class="c1"># read the CSV file with the specified delimiter</span>
+</span><span id="install-111"><a href="#install-111"><span class="linenos">111</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-112"><a href="#install-112"><span class="linenos">112</span></a>
+</span><span id="install-113"><a href="#install-113"><span class="linenos">113</span></a>            <span class="c1"># export Table to sqlite db</span>
+</span><span id="install-114"><a href="#install-114"><span class="linenos">114</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-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"># add to the metadata</span>
+</span><span id="install-117"><a href="#install-117"><span class="linenos">117</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-118"><a href="#install-118"><span class="linenos">118</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-119"><a href="#install-119"><span class="linenos">119</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-120"><a href="#install-120"><span class="linenos">120</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-121"><a href="#install-121"><span class="linenos">121</span></a>
+</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">close</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"># write version file</span>
+</span><span id="install-125"><a href="#install-125"><span class="linenos">125</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-126"><a href="#install-126"><span class="linenos">126</span></a>
+</span><span id="install-127"><a href="#install-127"><span class="linenos">127</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>
 
 
@@ -665,18 +665,18 @@
 
     </div>
     <a class="headerlink" href="#write_version_file"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="write_version_file-129"><a href="#write_version_file-129"><span class="linenos">129</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-130"><a href="#write_version_file-130"><span class="linenos">130</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Writes the OMOP vocaburaries and version to a file&quot;&quot;&quot;</span>
-</span><span id="write_version_file-131"><a href="#write_version_file-131"><span class="linenos">131</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-132"><a href="#write_version_file-132"><span class="linenos">132</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-133"><a href="#write_version_file-133"><span class="linenos">133</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-134"><a href="#write_version_file-134"><span class="linenos">134</span></a>            <span class="n">vocabularies</span><span class="p">,</span>
-</span><span id="write_version_file-135"><a href="#write_version_file-135"><span class="linenos">135</span></a>            <span class="n">file</span><span class="p">,</span>
-</span><span id="write_version_file-136"><a href="#write_version_file-136"><span class="linenos">136</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-137"><a href="#write_version_file-137"><span class="linenos">137</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-138"><a href="#write_version_file-138"><span class="linenos">138</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-139"><a href="#write_version_file-139"><span class="linenos">139</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-140"><a href="#write_version_file-140"><span class="linenos">140</span></a>        <span class="p">)</span>
+            <div class="pdoc-code codehilite"><pre><span></span><span id="write_version_file-130"><a href="#write_version_file-130"><span class="linenos">130</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-131"><a href="#write_version_file-131"><span class="linenos">131</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Writes the OMOP vocaburaries and version to a file&quot;&quot;&quot;</span>
+</span><span id="write_version_file-132"><a href="#write_version_file-132"><span class="linenos">132</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-133"><a href="#write_version_file-133"><span class="linenos">133</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-134"><a href="#write_version_file-134"><span class="linenos">134</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-135"><a href="#write_version_file-135"><span class="linenos">135</span></a>            <span class="n">vocabularies</span><span class="p">,</span>
+</span><span id="write_version_file-136"><a href="#write_version_file-136"><span class="linenos">136</span></a>            <span class="n">file</span><span class="p">,</span>
+</span><span id="write_version_file-137"><a href="#write_version_file-137"><span class="linenos">137</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-138"><a href="#write_version_file-138"><span class="linenos">138</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-139"><a href="#write_version_file-139"><span class="linenos">139</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-140"><a href="#write_version_file-140"><span class="linenos">140</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-141"><a href="#write_version_file-141"><span class="linenos">141</span></a>        <span class="p">)</span>
 </span></pre></div>
 
 
@@ -696,24 +696,24 @@
 
     </div>
     <a class="headerlink" href="#clear"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="clear-143"><a href="#clear-143"><span class="linenos">143</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-144"><a href="#clear-144"><span class="linenos">144</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Clears the OMOP sql database&quot;&quot;&quot;</span>
-</span><span id="clear-145"><a href="#clear-145"><span class="linenos">145</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-146"><a href="#clear-146"><span class="linenos">146</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-147"><a href="#clear-147"><span class="linenos">147</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-148"><a href="#clear-148"><span class="linenos">148</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-149"><a href="#clear-149"><span class="linenos">149</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-150"><a href="#clear-150"><span class="linenos">150</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-151"><a href="#clear-151"><span class="linenos">151</span></a>
-</span><span id="clear-152"><a href="#clear-152"><span class="linenos">152</span></a>    <span class="c1"># Fetch and print table names</span>
-</span><span id="clear-153"><a href="#clear-153"><span class="linenos">153</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-154"><a href="#clear-154"><span class="linenos">154</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-155"><a href="#clear-155"><span class="linenos">155</span></a>
-</span><span id="clear-156"><a href="#clear-156"><span class="linenos">156</span></a>    <span class="c1"># cur.execute(&quot;DROP TABLE CONCEPT_SET;&quot;)</span>
-</span><span id="clear-157"><a href="#clear-157"><span class="linenos">157</span></a>    <span class="c1"># cur.execute(&quot;DROP TABLE CONCEPT_SET_ITEM;&quot;)</span>
-</span><span id="clear-158"><a href="#clear-158"><span class="linenos">158</span></a>
-</span><span id="clear-159"><a href="#clear-159"><span class="linenos">159</span></a>    <span class="n">conn</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
-</span><span id="clear-160"><a href="#clear-160"><span class="linenos">160</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>
+            <div class="pdoc-code codehilite"><pre><span></span><span id="clear-144"><a href="#clear-144"><span class="linenos">144</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-145"><a href="#clear-145"><span class="linenos">145</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Clears the OMOP sql database&quot;&quot;&quot;</span>
+</span><span id="clear-146"><a href="#clear-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;Clearing OMOP data from database&quot;</span><span class="p">)</span>
+</span><span id="clear-147"><a href="#clear-147"><span class="linenos">147</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-148"><a href="#clear-148"><span class="linenos">148</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-149"><a href="#clear-149"><span class="linenos">149</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-150"><a href="#clear-150"><span class="linenos">150</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-151"><a href="#clear-151"><span class="linenos">151</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-152"><a href="#clear-152"><span class="linenos">152</span></a>
+</span><span id="clear-153"><a href="#clear-153"><span class="linenos">153</span></a>    <span class="c1"># Fetch and print table names</span>
+</span><span id="clear-154"><a href="#clear-154"><span class="linenos">154</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-155"><a href="#clear-155"><span class="linenos">155</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-156"><a href="#clear-156"><span class="linenos">156</span></a>
+</span><span id="clear-157"><a href="#clear-157"><span class="linenos">157</span></a>    <span class="c1"># cur.execute(&quot;DROP TABLE CONCEPT_SET;&quot;)</span>
+</span><span id="clear-158"><a href="#clear-158"><span class="linenos">158</span></a>    <span class="c1"># cur.execute(&quot;DROP TABLE CONCEPT_SET_ITEM;&quot;)</span>
+</span><span id="clear-159"><a href="#clear-159"><span class="linenos">159</span></a>
+</span><span id="clear-160"><a href="#clear-160"><span class="linenos">160</span></a>    <span class="n">conn</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+</span><span id="clear-161"><a href="#clear-161"><span class="linenos">161</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>
 
 
@@ -733,14 +733,14 @@
 
     </div>
     <a class="headerlink" href="#delete"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="delete-163"><a href="#delete-163"><span class="linenos">163</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-164"><a href="#delete-164"><span class="linenos">164</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Deletes the OMOP sql database&quot;&quot;&quot;</span>
-</span><span id="delete-165"><a href="#delete-165"><span class="linenos">165</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-166"><a href="#delete-166"><span class="linenos">166</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-167"><a href="#delete-167"><span class="linenos">167</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-168"><a href="#delete-168"><span class="linenos">168</span></a>
-</span><span id="delete-169"><a href="#delete-169"><span class="linenos">169</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-170"><a href="#delete-170"><span class="linenos">170</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-164"><a href="#delete-164"><span class="linenos">164</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-165"><a href="#delete-165"><span class="linenos">165</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Deletes the OMOP sql database&quot;&quot;&quot;</span>
+</span><span id="delete-166"><a href="#delete-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;Deleting OMOP database&quot;</span><span class="p">)</span>
+</span><span id="delete-167"><a href="#delete-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="delete-168"><a href="#delete-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="delete-169"><a href="#delete-169"><span class="linenos">169</span></a>
+</span><span id="delete-170"><a href="#delete-170"><span class="linenos">170</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-171"><a href="#delete-171"><span class="linenos">171</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>
 
 
@@ -760,21 +760,21 @@
 
     </div>
     <a class="headerlink" href="#table_exists"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="table_exists-173"><a href="#table_exists-173"><span class="linenos">173</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-174"><a href="#table_exists-174"><span class="linenos">174</span></a>    <span class="c1"># Query to check if the table exists</span>
-</span><span id="table_exists-175"><a href="#table_exists-175"><span class="linenos">175</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-176"><a href="#table_exists-176"><span class="linenos">176</span></a><span class="w">        </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="table_exists-177"><a href="#table_exists-177"><span class="linenos">177</span></a><span class="sd">		SELECT name</span>
-</span><span id="table_exists-178"><a href="#table_exists-178"><span class="linenos">178</span></a><span class="sd">		FROM sqlite_master</span>
-</span><span id="table_exists-179"><a href="#table_exists-179"><span class="linenos">179</span></a><span class="sd">		WHERE type=&#39;table&#39; AND name=?</span>
-</span><span id="table_exists-180"><a href="#table_exists-180"><span class="linenos">180</span></a><span class="sd">		&quot;&quot;&quot;</span><span class="p">,</span>
-</span><span id="table_exists-181"><a href="#table_exists-181"><span class="linenos">181</span></a>        <span class="p">(</span><span class="n">table_name</span><span class="p">,),</span>
-</span><span id="table_exists-182"><a href="#table_exists-182"><span class="linenos">182</span></a>    <span class="p">)</span>
-</span><span id="table_exists-183"><a href="#table_exists-183"><span class="linenos">183</span></a>
-</span><span id="table_exists-184"><a href="#table_exists-184"><span class="linenos">184</span></a>    <span class="c1"># Fetch the result</span>
-</span><span id="table_exists-185"><a href="#table_exists-185"><span class="linenos">185</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-186"><a href="#table_exists-186"><span class="linenos">186</span></a>
-</span><span id="table_exists-187"><a href="#table_exists-187"><span class="linenos">187</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>
+            <div class="pdoc-code codehilite"><pre><span></span><span id="table_exists-174"><a href="#table_exists-174"><span class="linenos">174</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-175"><a href="#table_exists-175"><span class="linenos">175</span></a>    <span class="c1"># Query to check if the table exists</span>
+</span><span id="table_exists-176"><a href="#table_exists-176"><span class="linenos">176</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-177"><a href="#table_exists-177"><span class="linenos">177</span></a><span class="w">        </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="table_exists-178"><a href="#table_exists-178"><span class="linenos">178</span></a><span class="sd">		SELECT name</span>
+</span><span id="table_exists-179"><a href="#table_exists-179"><span class="linenos">179</span></a><span class="sd">		FROM sqlite_master</span>
+</span><span id="table_exists-180"><a href="#table_exists-180"><span class="linenos">180</span></a><span class="sd">		WHERE type=&#39;table&#39; AND name=?</span>
+</span><span id="table_exists-181"><a href="#table_exists-181"><span class="linenos">181</span></a><span class="sd">		&quot;&quot;&quot;</span><span class="p">,</span>
+</span><span id="table_exists-182"><a href="#table_exists-182"><span class="linenos">182</span></a>        <span class="p">(</span><span class="n">table_name</span><span class="p">,),</span>
+</span><span id="table_exists-183"><a href="#table_exists-183"><span class="linenos">183</span></a>    <span class="p">)</span>
+</span><span id="table_exists-184"><a href="#table_exists-184"><span class="linenos">184</span></a>
+</span><span id="table_exists-185"><a href="#table_exists-185"><span class="linenos">185</span></a>    <span class="c1"># Fetch the result</span>
+</span><span id="table_exists-186"><a href="#table_exists-186"><span class="linenos">186</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-187"><a href="#table_exists-187"><span class="linenos">187</span></a>
+</span><span id="table_exists-188"><a href="#table_exists-188"><span class="linenos">188</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>
 
 
@@ -792,21 +792,21 @@
 
     </div>
     <a class="headerlink" href="#vocab_exists"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="vocab_exists-190"><a href="#vocab_exists-190"><span class="linenos">190</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-191"><a href="#vocab_exists-191"><span class="linenos">191</span></a>    <span class="c1"># Query to check if the table exists</span>
-</span><span id="vocab_exists-192"><a href="#vocab_exists-192"><span class="linenos">192</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-193"><a href="#vocab_exists-193"><span class="linenos">193</span></a><span class="w">        </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="vocab_exists-194"><a href="#vocab_exists-194"><span class="linenos">194</span></a><span class="sd">		SELECT vocabulary_id </span>
-</span><span id="vocab_exists-195"><a href="#vocab_exists-195"><span class="linenos">195</span></a><span class="sd">		FROM VOCABULARY</span>
-</span><span id="vocab_exists-196"><a href="#vocab_exists-196"><span class="linenos">196</span></a><span class="sd">		WHERE vocabulary_id=?</span>
-</span><span id="vocab_exists-197"><a href="#vocab_exists-197"><span class="linenos">197</span></a><span class="sd">		&quot;&quot;&quot;</span><span class="p">,</span>
-</span><span id="vocab_exists-198"><a href="#vocab_exists-198"><span class="linenos">198</span></a>        <span class="p">(</span><span class="n">vocab_id</span><span class="p">,),</span>
-</span><span id="vocab_exists-199"><a href="#vocab_exists-199"><span class="linenos">199</span></a>    <span class="p">)</span>
-</span><span id="vocab_exists-200"><a href="#vocab_exists-200"><span class="linenos">200</span></a>
-</span><span id="vocab_exists-201"><a href="#vocab_exists-201"><span class="linenos">201</span></a>    <span class="c1"># Fetch the result</span>
-</span><span id="vocab_exists-202"><a href="#vocab_exists-202"><span class="linenos">202</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-203"><a href="#vocab_exists-203"><span class="linenos">203</span></a>
-</span><span id="vocab_exists-204"><a href="#vocab_exists-204"><span class="linenos">204</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>
+            <div class="pdoc-code codehilite"><pre><span></span><span id="vocab_exists-191"><a href="#vocab_exists-191"><span class="linenos">191</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-192"><a href="#vocab_exists-192"><span class="linenos">192</span></a>    <span class="c1"># Query to check if the table exists</span>
+</span><span id="vocab_exists-193"><a href="#vocab_exists-193"><span class="linenos">193</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-194"><a href="#vocab_exists-194"><span class="linenos">194</span></a><span class="w">        </span><span class="sd">&quot;&quot;&quot;</span>
+</span><span id="vocab_exists-195"><a href="#vocab_exists-195"><span class="linenos">195</span></a><span class="sd">		SELECT vocabulary_id </span>
+</span><span id="vocab_exists-196"><a href="#vocab_exists-196"><span class="linenos">196</span></a><span class="sd">		FROM VOCABULARY</span>
+</span><span id="vocab_exists-197"><a href="#vocab_exists-197"><span class="linenos">197</span></a><span class="sd">		WHERE vocabulary_id=?</span>
+</span><span id="vocab_exists-198"><a href="#vocab_exists-198"><span class="linenos">198</span></a><span class="sd">		&quot;&quot;&quot;</span><span class="p">,</span>
+</span><span id="vocab_exists-199"><a href="#vocab_exists-199"><span class="linenos">199</span></a>        <span class="p">(</span><span class="n">vocab_id</span><span class="p">,),</span>
+</span><span id="vocab_exists-200"><a href="#vocab_exists-200"><span class="linenos">200</span></a>    <span class="p">)</span>
+</span><span id="vocab_exists-201"><a href="#vocab_exists-201"><span class="linenos">201</span></a>
+</span><span id="vocab_exists-202"><a href="#vocab_exists-202"><span class="linenos">202</span></a>    <span class="c1"># Fetch the result</span>
+</span><span id="vocab_exists-203"><a href="#vocab_exists-203"><span class="linenos">203</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-204"><a href="#vocab_exists-204"><span class="linenos">204</span></a>
+</span><span id="vocab_exists-205"><a href="#vocab_exists-205"><span class="linenos">205</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>
 
 
@@ -824,8 +824,7 @@
 
     </div>
     <a class="headerlink" href="#concept_set_exist"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="concept_set_exist-207"><a href="#concept_set_exist-207"><span class="linenos">207</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-208"><a href="#concept_set_exist-208"><span class="linenos">208</span></a>
+            <div class="pdoc-code codehilite"><pre><span></span><span id="concept_set_exist-208"><a href="#concept_set_exist-208"><span class="linenos">208</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-209"><a href="#concept_set_exist-209"><span class="linenos">209</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-210"><a href="#concept_set_exist-210"><span class="linenos">210</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-211"><a href="#concept_set_exist-211"><span class="linenos">211</span></a>
@@ -907,68 +906,67 @@
 </span><span id="export-272"><a href="#export-272"><span class="linenos">272</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-273"><a href="#export-273"><span class="linenos">273</span></a>
 </span><span id="export-274"><a href="#export-274"><span class="linenos">274</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-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="c1"># create Concept_Set</span>
-</span><span id="export-277"><a href="#export-277"><span class="linenos">277</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-278"><a href="#export-278"><span class="linenos">278</span></a>                <span class="n">cur</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span>
-</span><span id="export-279"><a href="#export-279"><span class="linenos">279</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-280"><a href="#export-280"><span class="linenos">280</span></a>                <span class="p">)</span>
-</span><span id="export-281"><a href="#export-281"><span class="linenos">281</span></a>            <span class="k">else</span><span class="p">:</span>
-</span><span id="export-282"><a href="#export-282"><span class="linenos">282</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-283"><a href="#export-283"><span class="linenos">283</span></a>                <span class="c1"># TODO: ask to remove old concept_set?</span>
-</span><span id="export-284"><a href="#export-284"><span class="linenos">284</span></a>
-</span><span id="export-285"><a href="#export-285"><span class="linenos">285</span></a>            <span class="c1"># get Concept_set_Id</span>
-</span><span id="export-286"><a href="#export-286"><span class="linenos">286</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-287"><a href="#export-287"><span class="linenos">287</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-288"><a href="#export-288"><span class="linenos">288</span></a>            <span class="n">cur</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span>
-</span><span id="export-289"><a href="#export-289"><span class="linenos">289</span></a>                <span class="n">query</span><span class="p">,</span>
-</span><span id="export-290"><a href="#export-290"><span class="linenos">290</span></a>                <span class="p">(</span>
-</span><span id="export-291"><a href="#export-291"><span class="linenos">291</span></a>                    <span class="n">concept_set_name</span><span class="p">,</span>
-</span><span id="export-292"><a href="#export-292"><span class="linenos">292</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-293"><a href="#export-293"><span class="linenos">293</span></a>                <span class="p">),</span>
-</span><span id="export-294"><a href="#export-294"><span class="linenos">294</span></a>            <span class="p">)</span>
-</span><span id="export-295"><a href="#export-295"><span class="linenos">295</span></a>            <span class="c1"># FAILS HERE WITH NONE REUR</span>
-</span><span id="export-296"><a href="#export-296"><span class="linenos">296</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-297"><a href="#export-297"><span class="linenos">297</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-298"><a href="#export-298"><span class="linenos">298</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-299"><a href="#export-299"><span class="linenos">299</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-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="c1"># get corresponing Concept_id (OMOP) for each Concept_code (e.g. SNOMED)</span>
-</span><span id="export-302"><a href="#export-302"><span class="linenos">302</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-303"><a href="#export-303"><span class="linenos">303</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-304"><a href="#export-304"><span class="linenos">304</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-305"><a href="#export-305"><span class="linenos">305</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-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="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-308"><a href="#export-308"><span class="linenos">308</span></a>                <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span>
-</span><span id="export-309"><a href="#export-309"><span class="linenos">309</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-310"><a href="#export-310"><span class="linenos">310</span></a>                <span class="p">)</span>
-</span><span id="export-311"><a href="#export-311"><span class="linenos">311</span></a>
-</span><span id="export-312"><a href="#export-312"><span class="linenos">312</span></a>            <span class="c1"># Create Concept_set_item</span>
-</span><span id="export-313"><a href="#export-313"><span class="linenos">313</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-314"><a href="#export-314"><span class="linenos">314</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-315"><a href="#export-315"><span class="linenos">315</span></a>
-</span><span id="export-316"><a href="#export-316"><span class="linenos">316</span></a>    <span class="c1"># Output all tables to CSV</span>
-</span><span id="export-317"><a href="#export-317"><span class="linenos">317</span></a>    <span class="c1"># Get the list of all tables</span>
-</span><span id="export-318"><a href="#export-318"><span class="linenos">318</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-319"><a href="#export-319"><span class="linenos">319</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-320"><a href="#export-320"><span class="linenos">320</span></a>
-</span><span id="export-321"><a href="#export-321"><span class="linenos">321</span></a>    <span class="c1"># Export each table to a separate CSV file</span>
-</span><span id="export-322"><a href="#export-322"><span class="linenos">322</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-323"><a href="#export-323"><span class="linenos">323</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-324"><a href="#export-324"><span class="linenos">324</span></a>        <span class="c1"># ignore SQLite&#39;s internal system table</span>
-</span><span id="export-325"><a href="#export-325"><span class="linenos">325</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-326"><a href="#export-326"><span class="linenos">326</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-327"><a href="#export-327"><span class="linenos">327</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-328"><a href="#export-328"><span class="linenos">328</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-329"><a href="#export-329"><span class="linenos">329</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-330"><a href="#export-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;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-331"><a href="#export-331"><span class="linenos">331</span></a>
-</span><span id="export-332"><a href="#export-332"><span class="linenos">332</span></a>    <span class="n">conn</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
-</span><span id="export-333"><a href="#export-333"><span class="linenos">333</span></a>
-</span><span id="export-334"><a href="#export-334"><span class="linenos">334</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-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="k">return</span> <span class="n">export_db_path</span>
+</span><span id="export-275"><a href="#export-275"><span class="linenos">275</span></a>            <span class="c1"># create Concept_Set</span>
+</span><span id="export-276"><a href="#export-276"><span class="linenos">276</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-277"><a href="#export-277"><span class="linenos">277</span></a>                <span class="n">cur</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span>
+</span><span id="export-278"><a href="#export-278"><span class="linenos">278</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-279"><a href="#export-279"><span class="linenos">279</span></a>                <span class="p">)</span>
+</span><span id="export-280"><a href="#export-280"><span class="linenos">280</span></a>            <span class="k">else</span><span class="p">:</span>
+</span><span id="export-281"><a href="#export-281"><span class="linenos">281</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-282"><a href="#export-282"><span class="linenos">282</span></a>                <span class="c1"># TODO: ask to remove old concept_set?</span>
+</span><span id="export-283"><a href="#export-283"><span class="linenos">283</span></a>
+</span><span id="export-284"><a href="#export-284"><span class="linenos">284</span></a>            <span class="c1"># get Concept_set_Id</span>
+</span><span id="export-285"><a href="#export-285"><span class="linenos">285</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-286"><a href="#export-286"><span class="linenos">286</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-287"><a href="#export-287"><span class="linenos">287</span></a>            <span class="n">cur</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span>
+</span><span id="export-288"><a href="#export-288"><span class="linenos">288</span></a>                <span class="n">query</span><span class="p">,</span>
+</span><span id="export-289"><a href="#export-289"><span class="linenos">289</span></a>                <span class="p">(</span>
+</span><span id="export-290"><a href="#export-290"><span class="linenos">290</span></a>                    <span class="n">concept_set_name</span><span class="p">,</span>
+</span><span id="export-291"><a href="#export-291"><span class="linenos">291</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-292"><a href="#export-292"><span class="linenos">292</span></a>                <span class="p">),</span>
+</span><span id="export-293"><a href="#export-293"><span class="linenos">293</span></a>            <span class="p">)</span>
+</span><span id="export-294"><a href="#export-294"><span class="linenos">294</span></a>            <span class="c1"># FAILS HERE WITH NONE REUR</span>
+</span><span id="export-295"><a href="#export-295"><span class="linenos">295</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-296"><a href="#export-296"><span class="linenos">296</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-297"><a href="#export-297"><span class="linenos">297</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-298"><a href="#export-298"><span class="linenos">298</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-299"><a href="#export-299"><span class="linenos">299</span></a>
+</span><span id="export-300"><a href="#export-300"><span class="linenos">300</span></a>            <span class="c1"># get corresponing Concept_id (OMOP) for each Concept_code (e.g. SNOMED)</span>
+</span><span id="export-301"><a href="#export-301"><span class="linenos">301</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-302"><a href="#export-302"><span class="linenos">302</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-303"><a href="#export-303"><span class="linenos">303</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-304"><a href="#export-304"><span class="linenos">304</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-305"><a href="#export-305"><span class="linenos">305</span></a>
+</span><span id="export-306"><a href="#export-306"><span class="linenos">306</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-307"><a href="#export-307"><span class="linenos">307</span></a>                <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span>
+</span><span id="export-308"><a href="#export-308"><span class="linenos">308</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-309"><a href="#export-309"><span class="linenos">309</span></a>                <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_item</span>
+</span><span id="export-312"><a href="#export-312"><span class="linenos">312</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-313"><a href="#export-313"><span class="linenos">313</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-314"><a href="#export-314"><span class="linenos">314</span></a>
+</span><span id="export-315"><a href="#export-315"><span class="linenos">315</span></a>    <span class="c1"># Output all tables to CSV</span>
+</span><span id="export-316"><a href="#export-316"><span class="linenos">316</span></a>    <span class="c1"># Get the list of all tables</span>
+</span><span id="export-317"><a href="#export-317"><span class="linenos">317</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-318"><a href="#export-318"><span class="linenos">318</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-319"><a href="#export-319"><span class="linenos">319</span></a>
+</span><span id="export-320"><a href="#export-320"><span class="linenos">320</span></a>    <span class="c1"># Export each table to a separate CSV file</span>
+</span><span id="export-321"><a href="#export-321"><span class="linenos">321</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-322"><a href="#export-322"><span class="linenos">322</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-323"><a href="#export-323"><span class="linenos">323</span></a>        <span class="c1"># ignore SQLite&#39;s internal system table</span>
+</span><span id="export-324"><a href="#export-324"><span class="linenos">324</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-325"><a href="#export-325"><span class="linenos">325</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-326"><a href="#export-326"><span class="linenos">326</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-327"><a href="#export-327"><span class="linenos">327</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-328"><a href="#export-328"><span class="linenos">328</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-329"><a href="#export-329"><span class="linenos">329</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-330"><a href="#export-330"><span class="linenos">330</span></a>
+</span><span id="export-331"><a href="#export-331"><span class="linenos">331</span></a>    <span class="n">conn</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+</span><span id="export-332"><a href="#export-332"><span class="linenos">332</span></a>
+</span><span id="export-333"><a href="#export-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="sa">f</span><span class="s2">&quot;Created export db successfully&quot;</span><span class="p">)</span>
+</span><span id="export-334"><a href="#export-334"><span class="linenos">334</span></a>
+</span><span id="export-335"><a href="#export-335"><span class="linenos">335</span></a>    <span class="k">return</span> <span class="n">export_db_path</span>
 </span></pre></div>
 
 
diff --git a/docs/api/acmc/parse.html b/docs/api/acmc/parse.html
index 791d60001523a733a279018ce934933a35401b0e..1294f93173c08b44cc0f746cecee893529253861 100644
--- a/docs/api/acmc/parse.html
+++ b/docs/api/acmc/parse.html
@@ -108,9 +108,6 @@
                         <li>
                                 <a class="variable" href="#Icd10.checks">checks</a>
                         </li>
-                        <li>
-                                <a class="function" href="#Icd10.trim_icd10">trim_icd10</a>
-                        </li>
                 </ul>
 
             </li>
@@ -237,12 +234,12 @@
 </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="nb">list</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="nb">list</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="kc">None</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>
@@ -532,228 +529,223 @@
 </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 class="k">def</span><span class="w"> </span><span class="nf">trim_icd10</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="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-342"><a href="#L-342"><span class="linenos">342</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="p">[:</span><span class="mi">4</span><span class="p">]</span>
-</span><span id="L-343"><a href="#L-343"><span class="linenos">343</span></a>        <span class="k">return</span> <span class="n">codes</span>
-</span><span id="L-344"><a href="#L-344"><span class="linenos">344</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="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-347"><a href="#L-347"><span class="linenos">347</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-348"><a href="#L-348"><span class="linenos">348</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-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="bp">self</span><span class="o">.</span><span class="n">checks</span> <span class="o">=</span> <span class="p">[</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="c1"># 	&quot;Not Empty&quot;,</span>
-</span><span id="L-353"><a href="#L-353"><span class="linenos">353</span></a>            <span class="c1"># 	lambda codes : pd.Series([len(codes) &gt; 0]),</span>
-</span><span id="L-354"><a href="#L-354"><span class="linenos">354</span></a>            <span class="c1"># 	lambda codes : raise_exception(Exception(&quot;Code List is Empty&quot;))</span>
-</span><span id="L-355"><a href="#L-355"><span class="linenos">355</span></a>            <span class="c1"># ),</span>
-</span><span id="L-356"><a href="#L-356"><span class="linenos">356</span></a>            <span class="p">(</span>
-</span><span id="L-357"><a href="#L-357"><span class="linenos">357</span></a>                <span class="s2">&quot;Too Short&quot;</span><span class="p">,</span>
-</span><span id="L-358"><a href="#L-358"><span class="linenos">358</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-359"><a href="#L-359"><span class="linenos">359</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-360"><a href="#L-360"><span class="linenos">360</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
-</span><span id="L-361"><a href="#L-361"><span class="linenos">361</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
-</span><span id="L-362"><a href="#L-362"><span class="linenos">362</span></a>                            <span class="sa">f</span><span class="s2">&quot;QA Too Short&quot;</span><span class="p">,</span>
-</span><span id="L-363"><a href="#L-363"><span class="linenos">363</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
-</span><span id="L-364"><a href="#L-364"><span class="linenos">364</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-365"><a href="#L-365"><span class="linenos">365</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-366"><a href="#L-366"><span class="linenos">366</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-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="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="s2">&quot;Too Long&quot;</span><span class="p">,</span>
-</span><span id="L-373"><a href="#L-373"><span class="linenos">373</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-374"><a href="#L-374"><span class="linenos">374</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-375"><a href="#L-375"><span class="linenos">375</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
-</span><span id="L-376"><a href="#L-376"><span class="linenos">376</span></a>                        <span class="n">CodesError</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;QA Too Long&quot;</span><span class="p">,</span>
-</span><span id="L-378"><a href="#L-378"><span class="linenos">378</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
-</span><span id="L-379"><a href="#L-379"><span class="linenos">379</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-380"><a href="#L-380"><span class="linenos">380</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-381"><a href="#L-381"><span class="linenos">381</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-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="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="s2">&quot;Numeric&quot;</span><span class="p">,</span>
-</span><span id="L-388"><a href="#L-388"><span class="linenos">388</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-389"><a href="#L-389"><span class="linenos">389</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-390"><a href="#L-390"><span class="linenos">390</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
-</span><span id="L-391"><a href="#L-391"><span class="linenos">391</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
-</span><span id="L-392"><a href="#L-392"><span class="linenos">392</span></a>                            <span class="sa">f</span><span class="s2">&quot;QA Numeric&quot;</span><span class="p">,</span>
-</span><span id="L-393"><a href="#L-393"><span class="linenos">393</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
-</span><span id="L-394"><a href="#L-394"><span class="linenos">394</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-395"><a href="#L-395"><span class="linenos">395</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-396"><a href="#L-396"><span class="linenos">396</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-397"><a href="#L-397"><span class="linenos">397</span></a>                        <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 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"># (</span>
-</span><span id="L-402"><a href="#L-402"><span class="linenos">402</span></a>            <span class="c1"># 	&quot;Is Integer&quot;,</span>
-</span><span id="L-403"><a href="#L-403"><span class="linenos">403</span></a>            <span class="c1"># 	lambda codes : codes.dtype == int,</span>
-</span><span id="L-404"><a href="#L-404"><span class="linenos">404</span></a>            <span class="c1"># 	lambda codes : codes.astype(int) #Convert to integer</span>
-</span><span id="L-405"><a href="#L-405"><span class="linenos">405</span></a>            <span class="c1"># ),</span>
-</span><span id="L-406"><a href="#L-406"><span class="linenos">406</span></a>            <span class="p">(</span>
-</span><span id="L-407"><a href="#L-407"><span class="linenos">407</span></a>                <span class="s2">&quot;In Database&quot;</span><span class="p">,</span>
-</span><span id="L-408"><a href="#L-408"><span class="linenos">408</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-409"><a href="#L-409"><span class="linenos">409</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-410"><a href="#L-410"><span class="linenos">410</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
-</span><span id="L-411"><a href="#L-411"><span class="linenos">411</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
-</span><span id="L-412"><a href="#L-412"><span class="linenos">412</span></a>                            <span class="sa">f</span><span class="s2">&quot;QA In Database&quot;</span><span class="p">,</span>
-</span><span id="L-413"><a href="#L-413"><span class="linenos">413</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
-</span><span id="L-414"><a href="#L-414"><span class="linenos">414</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-415"><a href="#L-415"><span class="linenos">415</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-416"><a href="#L-416"><span class="linenos">416</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-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 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><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="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-425"><a href="#L-425"><span class="linenos">425</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-426"><a href="#L-426"><span class="linenos">426</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-427"><a href="#L-427"><span class="linenos">427</span></a>
-</span><span id="L-428"><a href="#L-428"><span class="linenos">428</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-429"><a href="#L-429"><span class="linenos">429</span></a>            <span class="p">(</span>
-</span><span id="L-430"><a href="#L-430"><span class="linenos">430</span></a>                <span class="s2">&quot;Not Empty&quot;</span><span class="p">,</span>
-</span><span id="L-431"><a href="#L-431"><span class="linenos">431</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-432"><a href="#L-432"><span class="linenos">432</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-433"><a href="#L-433"><span class="linenos">433</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
-</span><span id="L-434"><a href="#L-434"><span class="linenos">434</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
-</span><span id="L-435"><a href="#L-435"><span class="linenos">435</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-436"><a href="#L-436"><span class="linenos">436</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
-</span><span id="L-437"><a href="#L-437"><span class="linenos">437</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-438"><a href="#L-438"><span class="linenos">438</span></a>                            <span class="n">mask</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-</span><span id="L-439"><a href="#L-439"><span class="linenos">439</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-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="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="s2">&quot;In Database&quot;</span><span class="p">,</span>
-</span><span id="L-446"><a href="#L-446"><span class="linenos">446</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-447"><a href="#L-447"><span class="linenos">447</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-448"><a href="#L-448"><span class="linenos">448</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
-</span><span id="L-449"><a href="#L-449"><span class="linenos">449</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
-</span><span id="L-450"><a href="#L-450"><span class="linenos">450</span></a>                            <span class="sa">f</span><span class="s2">&quot;QA In Database&quot;</span><span class="p">,</span>
-</span><span id="L-451"><a href="#L-451"><span class="linenos">451</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
-</span><span id="L-452"><a href="#L-452"><span class="linenos">452</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-453"><a href="#L-453"><span class="linenos">453</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-454"><a href="#L-454"><span class="linenos">454</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-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 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><span id="L-461"><a href="#L-461"><span class="linenos">461</span></a>
-</span><span id="L-462"><a href="#L-462"><span class="linenos">462</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-463"><a href="#L-463"><span class="linenos">463</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-464"><a href="#L-464"><span class="linenos">464</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-465"><a href="#L-465"><span class="linenos">465</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-466"><a href="#L-466"><span class="linenos">466</span></a>            <span class="p">(</span>
-</span><span id="L-467"><a href="#L-467"><span class="linenos">467</span></a>                <span class="s2">&quot;Not Empty&quot;</span><span class="p">,</span>
-</span><span id="L-468"><a href="#L-468"><span class="linenos">468</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-469"><a href="#L-469"><span class="linenos">469</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-470"><a href="#L-470"><span class="linenos">470</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
-</span><span id="L-471"><a href="#L-471"><span class="linenos">471</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
-</span><span id="L-472"><a href="#L-472"><span class="linenos">472</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-473"><a href="#L-473"><span class="linenos">473</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
-</span><span id="L-474"><a href="#L-474"><span class="linenos">474</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-475"><a href="#L-475"><span class="linenos">475</span></a>                            <span class="n">mask</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-</span><span id="L-476"><a href="#L-476"><span class="linenos">476</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-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="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="s2">&quot;Alphanumeric Capital&quot;</span><span class="p">,</span>
-</span><span id="L-483"><a href="#L-483"><span class="linenos">483</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-484"><a href="#L-484"><span class="linenos">484</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-485"><a href="#L-485"><span class="linenos">485</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
-</span><span id="L-486"><a href="#L-486"><span class="linenos">486</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
-</span><span id="L-487"><a href="#L-487"><span class="linenos">487</span></a>                            <span class="sa">f</span><span class="s2">&quot;QA Alphanumeric Capital&quot;</span><span class="p">,</span>
-</span><span id="L-488"><a href="#L-488"><span class="linenos">488</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
-</span><span id="L-489"><a href="#L-489"><span class="linenos">489</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-490"><a href="#L-490"><span class="linenos">490</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-491"><a href="#L-491"><span class="linenos">491</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-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 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><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="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-500"><a href="#L-500"><span class="linenos">500</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-501"><a href="#L-501"><span class="linenos">501</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-502"><a href="#L-502"><span class="linenos">502</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-503"><a href="#L-503"><span class="linenos">503</span></a>            <span class="p">(</span>
-</span><span id="L-504"><a href="#L-504"><span class="linenos">504</span></a>                <span class="s2">&quot;Not Empty&quot;</span><span class="p">,</span>
-</span><span id="L-505"><a href="#L-505"><span class="linenos">505</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-506"><a href="#L-506"><span class="linenos">506</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-507"><a href="#L-507"><span class="linenos">507</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
-</span><span id="L-508"><a href="#L-508"><span class="linenos">508</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
-</span><span id="L-509"><a href="#L-509"><span class="linenos">509</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-510"><a href="#L-510"><span class="linenos">510</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
-</span><span id="L-511"><a href="#L-511"><span class="linenos">511</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-512"><a href="#L-512"><span class="linenos">512</span></a>                            <span class="n">mask</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-</span><span id="L-513"><a href="#L-513"><span class="linenos">513</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-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 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><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="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-522"><a href="#L-522"><span class="linenos">522</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-523"><a href="#L-523"><span class="linenos">523</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-524"><a href="#L-524"><span class="linenos">524</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-525"><a href="#L-525"><span class="linenos">525</span></a>            <span class="p">(</span>
-</span><span id="L-526"><a href="#L-526"><span class="linenos">526</span></a>                <span class="s2">&quot;Not Empty&quot;</span><span class="p">,</span>
-</span><span id="L-527"><a href="#L-527"><span class="linenos">527</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-528"><a href="#L-528"><span class="linenos">528</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-529"><a href="#L-529"><span class="linenos">529</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
-</span><span id="L-530"><a href="#L-530"><span class="linenos">530</span></a>                        <span class="n">CodesError</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;Code list is empty&quot;</span><span class="p">,</span>
-</span><span id="L-532"><a href="#L-532"><span class="linenos">532</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
-</span><span id="L-533"><a href="#L-533"><span class="linenos">533</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-534"><a href="#L-534"><span class="linenos">534</span></a>                            <span class="n">mask</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-</span><span id="L-535"><a href="#L-535"><span class="linenos">535</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-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 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-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><span id="L-543"><a href="#L-543"><span class="linenos">543</span></a><span class="k">class</span><span class="w"> </span><span class="nc">CodeTypeParser</span><span class="p">:</span>
-</span><span id="L-544"><a href="#L-544"><span class="linenos">544</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-545"><a href="#L-545"><span class="linenos">545</span></a>
-</span><span id="L-546"><a href="#L-546"><span class="linenos">546</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-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-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="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-549"><a href="#L-549"><span class="linenos">549</span></a>            <span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span>
-</span><span id="L-550"><a href="#L-550"><span class="linenos">550</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-551"><a href="#L-551"><span class="linenos">551</span></a>            <span class="p">)</span>
-</span><span id="L-552"><a href="#L-552"><span class="linenos">552</span></a>
-</span><span id="L-553"><a href="#L-553"><span class="linenos">553</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-554"><a href="#L-554"><span class="linenos">554</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-555"><a href="#L-555"><span class="linenos">555</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-556"><a href="#L-556"><span class="linenos">556</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-557"><a href="#L-557"><span class="linenos">557</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-558"><a href="#L-558"><span class="linenos">558</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-559"><a href="#L-559"><span class="linenos">559</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-560"><a href="#L-560"><span class="linenos">560</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-561"><a href="#L-561"><span class="linenos">561</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-562"><a href="#L-562"><span class="linenos">562</span></a>        <span class="p">}</span>
+</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></pre></div>
 
 
@@ -773,7 +765,7 @@
                 <section id="SUPPORTED_CODE_TYPES">
                     <div class="attr variable">
             <span class="name">SUPPORTED_CODE_TYPES</span>        =
-<span class="default_value">{&#39;read2&#39;, &#39;opcs4&#39;, &#39;snomed&#39;, &#39;icd10&#39;, &#39;read3&#39;, &#39;atc&#39;}</span>
+<span class="default_value">{&#39;read2&#39;, &#39;read3&#39;, &#39;snomed&#39;, &#39;icd10&#39;, &#39;opcs4&#39;, &#39;atc&#39;}</span>
 
         
     </div>
@@ -908,12 +900,12 @@
 </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="nb">list</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="nb">list</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="kc">None</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>
@@ -1016,7 +1008,7 @@
                             </div>
                             <div id="Proto.checks" class="classattr">
                                 <div class="attr variable">
-            <span class="name">checks</span><span class="annotation">: list[tuple[str, typing.Callable[[list], pandas.core.series.Series], typing.Callable[[list, pathlib.Path], NoneType]]]</span>
+            <span class="name">checks</span><span class="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]]]</span>
 
         
     </div>
@@ -1477,10 +1469,6 @@
 </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>
-</span><span id="Icd10-341"><a href="#Icd10-341"><span class="linenos">341</span></a>
-</span><span id="Icd10-342"><a href="#Icd10-342"><span class="linenos">342</span></a>    <span class="k">def</span><span class="w"> </span><span class="nf">trim_icd10</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="o">-&gt;</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">:</span>
-</span><span id="Icd10-343"><a href="#Icd10-343"><span class="linenos">343</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="p">[:</span><span class="mi">4</span><span class="p">]</span>
-</span><span id="Icd10-344"><a href="#Icd10-344"><span class="linenos">344</span></a>        <span class="k">return</span> <span class="n">codes</span>
 </span></pre></div>
 
 
@@ -1504,26 +1492,6 @@
     
     
 
-                            </div>
-                            <div id="Icd10.trim_icd10" class="classattr">
-                                        <input id="Icd10.trim_icd10-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">trim_icd10</span><span class="signature pdoc-code condensed">(<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="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="Icd10.trim_icd10-view-source"><span>View Source</span></label>
-
-    </div>
-    <a class="headerlink" href="#Icd10.trim_icd10"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="Icd10.trim_icd10-342"><a href="#Icd10.trim_icd10-342"><span class="linenos">342</span></a>    <span class="k">def</span><span class="w"> </span><span class="nf">trim_icd10</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="o">-&gt;</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="p">:</span>
-</span><span id="Icd10.trim_icd10-343"><a href="#Icd10.trim_icd10-343"><span class="linenos">343</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="p">[:</span><span class="mi">4</span><span class="p">]</span>
-</span><span id="Icd10.trim_icd10-344"><a href="#Icd10.trim_icd10-344"><span class="linenos">344</span></a>        <span class="k">return</span> <span class="n">codes</span>
-</span></pre></div>
-
-
-    
-
                             </div>
                             <div class="inherited">
                                 <h5>Inherited Members</h5>
@@ -1550,82 +1518,82 @@
 
     </div>
     <a class="headerlink" href="#Snomed"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="Snomed-347"><a href="#Snomed-347"><span class="linenos">347</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-348"><a href="#Snomed-348"><span class="linenos">348</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-349"><a href="#Snomed-349"><span class="linenos">349</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-350"><a href="#Snomed-350"><span class="linenos">350</span></a>
-</span><span id="Snomed-351"><a href="#Snomed-351"><span class="linenos">351</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-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="c1"># 	&quot;Not Empty&quot;,</span>
-</span><span id="Snomed-354"><a href="#Snomed-354"><span class="linenos">354</span></a>            <span class="c1"># 	lambda codes : pd.Series([len(codes) &gt; 0]),</span>
-</span><span id="Snomed-355"><a href="#Snomed-355"><span class="linenos">355</span></a>            <span class="c1"># 	lambda codes : raise_exception(Exception(&quot;Code List is Empty&quot;))</span>
-</span><span id="Snomed-356"><a href="#Snomed-356"><span class="linenos">356</span></a>            <span class="c1"># ),</span>
-</span><span id="Snomed-357"><a href="#Snomed-357"><span class="linenos">357</span></a>            <span class="p">(</span>
-</span><span id="Snomed-358"><a href="#Snomed-358"><span class="linenos">358</span></a>                <span class="s2">&quot;Too Short&quot;</span><span class="p">,</span>
-</span><span id="Snomed-359"><a href="#Snomed-359"><span class="linenos">359</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-360"><a href="#Snomed-360"><span class="linenos">360</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-361"><a href="#Snomed-361"><span class="linenos">361</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
-</span><span id="Snomed-362"><a href="#Snomed-362"><span class="linenos">362</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
-</span><span id="Snomed-363"><a href="#Snomed-363"><span class="linenos">363</span></a>                            <span class="sa">f</span><span class="s2">&quot;QA Too Short&quot;</span><span class="p">,</span>
-</span><span id="Snomed-364"><a href="#Snomed-364"><span class="linenos">364</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
-</span><span id="Snomed-365"><a href="#Snomed-365"><span class="linenos">365</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-366"><a href="#Snomed-366"><span class="linenos">366</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-367"><a href="#Snomed-367"><span class="linenos">367</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-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="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="s2">&quot;Too Long&quot;</span><span class="p">,</span>
-</span><span id="Snomed-374"><a href="#Snomed-374"><span class="linenos">374</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-375"><a href="#Snomed-375"><span class="linenos">375</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-376"><a href="#Snomed-376"><span class="linenos">376</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
-</span><span id="Snomed-377"><a href="#Snomed-377"><span class="linenos">377</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
-</span><span id="Snomed-378"><a href="#Snomed-378"><span class="linenos">378</span></a>                            <span class="sa">f</span><span class="s2">&quot;QA Too Long&quot;</span><span class="p">,</span>
-</span><span id="Snomed-379"><a href="#Snomed-379"><span class="linenos">379</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
-</span><span id="Snomed-380"><a href="#Snomed-380"><span class="linenos">380</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-381"><a href="#Snomed-381"><span class="linenos">381</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-382"><a href="#Snomed-382"><span class="linenos">382</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-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="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="s2">&quot;Numeric&quot;</span><span class="p">,</span>
-</span><span id="Snomed-389"><a href="#Snomed-389"><span class="linenos">389</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-390"><a href="#Snomed-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_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-391"><a href="#Snomed-391"><span class="linenos">391</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
-</span><span id="Snomed-392"><a href="#Snomed-392"><span class="linenos">392</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
-</span><span id="Snomed-393"><a href="#Snomed-393"><span class="linenos">393</span></a>                            <span class="sa">f</span><span class="s2">&quot;QA Numeric&quot;</span><span class="p">,</span>
-</span><span id="Snomed-394"><a href="#Snomed-394"><span class="linenos">394</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
-</span><span id="Snomed-395"><a href="#Snomed-395"><span class="linenos">395</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-396"><a href="#Snomed-396"><span class="linenos">396</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-397"><a href="#Snomed-397"><span class="linenos">397</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-398"><a href="#Snomed-398"><span class="linenos">398</span></a>                        <span class="p">)</span>
-</span><span id="Snomed-399"><a href="#Snomed-399"><span class="linenos">399</span></a>                    <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="c1"># (</span>
-</span><span id="Snomed-403"><a href="#Snomed-403"><span class="linenos">403</span></a>            <span class="c1"># 	&quot;Is Integer&quot;,</span>
-</span><span id="Snomed-404"><a href="#Snomed-404"><span class="linenos">404</span></a>            <span class="c1"># 	lambda codes : codes.dtype == int,</span>
-</span><span id="Snomed-405"><a href="#Snomed-405"><span class="linenos">405</span></a>            <span class="c1"># 	lambda codes : codes.astype(int) #Convert to integer</span>
-</span><span id="Snomed-406"><a href="#Snomed-406"><span class="linenos">406</span></a>            <span class="c1"># ),</span>
-</span><span id="Snomed-407"><a href="#Snomed-407"><span class="linenos">407</span></a>            <span class="p">(</span>
-</span><span id="Snomed-408"><a href="#Snomed-408"><span class="linenos">408</span></a>                <span class="s2">&quot;In Database&quot;</span><span class="p">,</span>
-</span><span id="Snomed-409"><a href="#Snomed-409"><span class="linenos">409</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-410"><a href="#Snomed-410"><span class="linenos">410</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-411"><a href="#Snomed-411"><span class="linenos">411</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
-</span><span id="Snomed-412"><a href="#Snomed-412"><span class="linenos">412</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
-</span><span id="Snomed-413"><a href="#Snomed-413"><span class="linenos">413</span></a>                            <span class="sa">f</span><span class="s2">&quot;QA In Database&quot;</span><span class="p">,</span>
-</span><span id="Snomed-414"><a href="#Snomed-414"><span class="linenos">414</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
-</span><span id="Snomed-415"><a href="#Snomed-415"><span class="linenos">415</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-416"><a href="#Snomed-416"><span class="linenos">416</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-417"><a href="#Snomed-417"><span class="linenos">417</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-418"><a href="#Snomed-418"><span class="linenos">418</span></a>                        <span class="p">)</span>
-</span><span id="Snomed-419"><a href="#Snomed-419"><span class="linenos">419</span></a>                    <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>
+            <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>
 </span></pre></div>
 
 
@@ -1675,42 +1643,42 @@
 
     </div>
     <a class="headerlink" href="#Opcs4"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="Opcs4-425"><a href="#Opcs4-425"><span class="linenos">425</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-426"><a href="#Opcs4-426"><span class="linenos">426</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-427"><a href="#Opcs4-427"><span class="linenos">427</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-428"><a href="#Opcs4-428"><span class="linenos">428</span></a>
-</span><span id="Opcs4-429"><a href="#Opcs4-429"><span class="linenos">429</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-430"><a href="#Opcs4-430"><span class="linenos">430</span></a>            <span class="p">(</span>
-</span><span id="Opcs4-431"><a href="#Opcs4-431"><span class="linenos">431</span></a>                <span class="s2">&quot;Not Empty&quot;</span><span class="p">,</span>
-</span><span id="Opcs4-432"><a href="#Opcs4-432"><span class="linenos">432</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-433"><a href="#Opcs4-433"><span class="linenos">433</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-434"><a href="#Opcs4-434"><span class="linenos">434</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
-</span><span id="Opcs4-435"><a href="#Opcs4-435"><span class="linenos">435</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
-</span><span id="Opcs4-436"><a href="#Opcs4-436"><span class="linenos">436</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-437"><a href="#Opcs4-437"><span class="linenos">437</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
-</span><span id="Opcs4-438"><a href="#Opcs4-438"><span class="linenos">438</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-439"><a href="#Opcs4-439"><span class="linenos">439</span></a>                            <span class="n">mask</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-</span><span id="Opcs4-440"><a href="#Opcs4-440"><span class="linenos">440</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-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="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="s2">&quot;In Database&quot;</span><span class="p">,</span>
-</span><span id="Opcs4-447"><a href="#Opcs4-447"><span class="linenos">447</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-448"><a href="#Opcs4-448"><span class="linenos">448</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-449"><a href="#Opcs4-449"><span class="linenos">449</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
-</span><span id="Opcs4-450"><a href="#Opcs4-450"><span class="linenos">450</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
-</span><span id="Opcs4-451"><a href="#Opcs4-451"><span class="linenos">451</span></a>                            <span class="sa">f</span><span class="s2">&quot;QA In Database&quot;</span><span class="p">,</span>
-</span><span id="Opcs4-452"><a href="#Opcs4-452"><span class="linenos">452</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
-</span><span id="Opcs4-453"><a href="#Opcs4-453"><span class="linenos">453</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-454"><a href="#Opcs4-454"><span class="linenos">454</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-455"><a href="#Opcs4-455"><span class="linenos">455</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-456"><a href="#Opcs4-456"><span class="linenos">456</span></a>                        <span class="p">)</span>
-</span><span id="Opcs4-457"><a href="#Opcs4-457"><span class="linenos">457</span></a>                    <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>
+            <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>
 </span></pre></div>
 
 
@@ -1760,41 +1728,41 @@
 
     </div>
     <a class="headerlink" href="#Atc"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="Atc-463"><a href="#Atc-463"><span class="linenos">463</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-464"><a href="#Atc-464"><span class="linenos">464</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-465"><a href="#Atc-465"><span class="linenos">465</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-466"><a href="#Atc-466"><span class="linenos">466</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-467"><a href="#Atc-467"><span class="linenos">467</span></a>            <span class="p">(</span>
-</span><span id="Atc-468"><a href="#Atc-468"><span class="linenos">468</span></a>                <span class="s2">&quot;Not Empty&quot;</span><span class="p">,</span>
-</span><span id="Atc-469"><a href="#Atc-469"><span class="linenos">469</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-470"><a href="#Atc-470"><span class="linenos">470</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-471"><a href="#Atc-471"><span class="linenos">471</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
-</span><span id="Atc-472"><a href="#Atc-472"><span class="linenos">472</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
-</span><span id="Atc-473"><a href="#Atc-473"><span class="linenos">473</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-474"><a href="#Atc-474"><span class="linenos">474</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
-</span><span id="Atc-475"><a href="#Atc-475"><span class="linenos">475</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-476"><a href="#Atc-476"><span class="linenos">476</span></a>                            <span class="n">mask</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-</span><span id="Atc-477"><a href="#Atc-477"><span class="linenos">477</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-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="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="s2">&quot;Alphanumeric Capital&quot;</span><span class="p">,</span>
-</span><span id="Atc-484"><a href="#Atc-484"><span class="linenos">484</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-485"><a href="#Atc-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_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-486"><a href="#Atc-486"><span class="linenos">486</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
-</span><span id="Atc-487"><a href="#Atc-487"><span class="linenos">487</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
-</span><span id="Atc-488"><a href="#Atc-488"><span class="linenos">488</span></a>                            <span class="sa">f</span><span class="s2">&quot;QA Alphanumeric Capital&quot;</span><span class="p">,</span>
-</span><span id="Atc-489"><a href="#Atc-489"><span class="linenos">489</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
-</span><span id="Atc-490"><a href="#Atc-490"><span class="linenos">490</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-491"><a href="#Atc-491"><span class="linenos">491</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-492"><a href="#Atc-492"><span class="linenos">492</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-493"><a href="#Atc-493"><span class="linenos">493</span></a>                        <span class="p">)</span>
-</span><span id="Atc-494"><a href="#Atc-494"><span class="linenos">494</span></a>                    <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>
+            <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>
 </span></pre></div>
 
 
@@ -1844,26 +1812,26 @@
 
     </div>
     <a class="headerlink" href="#Med"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="Med-500"><a href="#Med-500"><span class="linenos">500</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-501"><a href="#Med-501"><span class="linenos">501</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-502"><a href="#Med-502"><span class="linenos">502</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-503"><a href="#Med-503"><span class="linenos">503</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-504"><a href="#Med-504"><span class="linenos">504</span></a>            <span class="p">(</span>
-</span><span id="Med-505"><a href="#Med-505"><span class="linenos">505</span></a>                <span class="s2">&quot;Not Empty&quot;</span><span class="p">,</span>
-</span><span id="Med-506"><a href="#Med-506"><span class="linenos">506</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-507"><a href="#Med-507"><span class="linenos">507</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-508"><a href="#Med-508"><span class="linenos">508</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
-</span><span id="Med-509"><a href="#Med-509"><span class="linenos">509</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
-</span><span id="Med-510"><a href="#Med-510"><span class="linenos">510</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-511"><a href="#Med-511"><span class="linenos">511</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
-</span><span id="Med-512"><a href="#Med-512"><span class="linenos">512</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-513"><a href="#Med-513"><span class="linenos">513</span></a>                            <span class="n">mask</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-</span><span id="Med-514"><a href="#Med-514"><span class="linenos">514</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-515"><a href="#Med-515"><span class="linenos">515</span></a>                        <span class="p">)</span>
-</span><span id="Med-516"><a href="#Med-516"><span class="linenos">516</span></a>                    <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>
+            <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>
 </span></pre></div>
 
 
@@ -1913,26 +1881,26 @@
 
     </div>
     <a class="headerlink" href="#Cprd"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="Cprd-522"><a href="#Cprd-522"><span class="linenos">522</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-523"><a href="#Cprd-523"><span class="linenos">523</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-524"><a href="#Cprd-524"><span class="linenos">524</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-525"><a href="#Cprd-525"><span class="linenos">525</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-526"><a href="#Cprd-526"><span class="linenos">526</span></a>            <span class="p">(</span>
-</span><span id="Cprd-527"><a href="#Cprd-527"><span class="linenos">527</span></a>                <span class="s2">&quot;Not Empty&quot;</span><span class="p">,</span>
-</span><span id="Cprd-528"><a href="#Cprd-528"><span class="linenos">528</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-529"><a href="#Cprd-529"><span class="linenos">529</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-530"><a href="#Cprd-530"><span class="linenos">530</span></a>                    <span class="n">InvalidCodesException</span><span class="p">(</span>
-</span><span id="Cprd-531"><a href="#Cprd-531"><span class="linenos">531</span></a>                        <span class="n">CodesError</span><span class="p">(</span>
-</span><span id="Cprd-532"><a href="#Cprd-532"><span class="linenos">532</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-533"><a href="#Cprd-533"><span class="linenos">533</span></a>                            <span class="n">codes</span><span class="o">=</span><span class="n">codes</span><span class="p">,</span>
-</span><span id="Cprd-534"><a href="#Cprd-534"><span class="linenos">534</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-535"><a href="#Cprd-535"><span class="linenos">535</span></a>                            <span class="n">mask</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-</span><span id="Cprd-536"><a href="#Cprd-536"><span class="linenos">536</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-537"><a href="#Cprd-537"><span class="linenos">537</span></a>                        <span class="p">)</span>
-</span><span id="Cprd-538"><a href="#Cprd-538"><span class="linenos">538</span></a>                    <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>
+            <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>
 </span></pre></div>
 
 
@@ -1982,26 +1950,25 @@
 
     </div>
     <a class="headerlink" href="#CodeTypeParser"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="CodeTypeParser-544"><a href="#CodeTypeParser-544"><span class="linenos">544</span></a><span class="k">class</span><span class="w"> </span><span class="nc">CodeTypeParser</span><span class="p">:</span>
-</span><span id="CodeTypeParser-545"><a href="#CodeTypeParser-545"><span class="linenos">545</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-546"><a href="#CodeTypeParser-546"><span class="linenos">546</span></a>
-</span><span id="CodeTypeParser-547"><a href="#CodeTypeParser-547"><span class="linenos">547</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>
+            <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>
 </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="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-550"><a href="#CodeTypeParser-550"><span class="linenos">550</span></a>            <span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span>
-</span><span id="CodeTypeParser-551"><a href="#CodeTypeParser-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="CodeTypeParser-552"><a href="#CodeTypeParser-552"><span class="linenos">552</span></a>            <span class="p">)</span>
-</span><span id="CodeTypeParser-553"><a href="#CodeTypeParser-553"><span class="linenos">553</span></a>
-</span><span id="CodeTypeParser-554"><a href="#CodeTypeParser-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="CodeTypeParser-555"><a href="#CodeTypeParser-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="CodeTypeParser-556"><a href="#CodeTypeParser-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="CodeTypeParser-557"><a href="#CodeTypeParser-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="CodeTypeParser-558"><a href="#CodeTypeParser-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="CodeTypeParser-559"><a href="#CodeTypeParser-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="CodeTypeParser-560"><a href="#CodeTypeParser-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="CodeTypeParser-561"><a href="#CodeTypeParser-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="CodeTypeParser-562"><a href="#CodeTypeParser-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="CodeTypeParser-563"><a href="#CodeTypeParser-563"><span class="linenos">563</span></a>        <span class="p">}</span>
+</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></pre></div>
 
 
@@ -2019,23 +1986,22 @@
 
     </div>
     <a class="headerlink" href="#CodeTypeParser.__init__"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="CodeTypeParser.__init__-547"><a href="#CodeTypeParser.__init__-547"><span class="linenos">547</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>
+            <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="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__-550"><a href="#CodeTypeParser.__init__-550"><span class="linenos">550</span></a>            <span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span>
-</span><span id="CodeTypeParser.__init__-551"><a href="#CodeTypeParser.__init__-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="CodeTypeParser.__init__-552"><a href="#CodeTypeParser.__init__-552"><span class="linenos">552</span></a>            <span class="p">)</span>
-</span><span id="CodeTypeParser.__init__-553"><a href="#CodeTypeParser.__init__-553"><span class="linenos">553</span></a>
-</span><span id="CodeTypeParser.__init__-554"><a href="#CodeTypeParser.__init__-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="CodeTypeParser.__init__-555"><a href="#CodeTypeParser.__init__-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="CodeTypeParser.__init__-556"><a href="#CodeTypeParser.__init__-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="CodeTypeParser.__init__-557"><a href="#CodeTypeParser.__init__-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="CodeTypeParser.__init__-558"><a href="#CodeTypeParser.__init__-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="CodeTypeParser.__init__-559"><a href="#CodeTypeParser.__init__-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="CodeTypeParser.__init__-560"><a href="#CodeTypeParser.__init__-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="CodeTypeParser.__init__-561"><a href="#CodeTypeParser.__init__-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="CodeTypeParser.__init__-562"><a href="#CodeTypeParser.__init__-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="CodeTypeParser.__init__-563"><a href="#CodeTypeParser.__init__-563"><span class="linenos">563</span></a>        <span class="p">}</span>
+</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>
 </span></pre></div>
 
 
diff --git a/docs/api/acmc/phen.html b/docs/api/acmc/phen.html
index fe5aeb310fde2ea4789566af7e74996eb3fdd95f..1ab96681e253c985257390e428dc728be5039afc 100644
--- a/docs/api/acmc/phen.html
+++ b/docs/api/acmc/phen.html
@@ -238,7 +238,7 @@
 </span><span id="L-20"><a href="#L-20"><span class="linenos">  20</span></a><span class="kn">import</span><span class="w"> </span><span class="nn">yaml</span>
 </span><span id="L-21"><a href="#L-21"><span class="linenos">  21</span></a><span class="kn">import</span><span class="w"> </span><span class="nn">semver</span>
 </span><span id="L-22"><a href="#L-22"><span class="linenos">  22</span></a><span class="kn">from</span><span class="w"> </span><span class="nn">git</span><span class="w"> </span><span class="kn">import</span> <span class="n">Repo</span>
-</span><span id="L-23"><a href="#L-23"><span class="linenos">  23</span></a><span class="kn">from</span><span class="w"> </span><span class="nn">cerberus</span><span class="w"> </span><span class="kn">import</span> <span class="n">Validator</span>
+</span><span id="L-23"><a href="#L-23"><span class="linenos">  23</span></a><span class="kn">from</span><span class="w"> </span><span class="nn">cerberus</span><span class="w"> </span><span class="kn">import</span> <span class="n">Validator</span>  <span class="c1"># type: ignore</span>
 </span><span id="L-24"><a href="#L-24"><span class="linenos">  24</span></a><span class="kn">from</span><span class="w"> </span><span class="nn">deepdiff</span><span class="w"> </span><span class="kn">import</span> <span class="n">DeepDiff</span>
 </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>
@@ -417,1239 +417,1236 @@
 </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><span id="L-203"><a href="#L-203"><span class="linenos"> 203</span></a>    <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="o">=</span> <span class="kc">None</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="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-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="sd">    Args:</span>
-</span><span id="L-208"><a href="#L-208"><span class="linenos"> 208</span></a><span class="sd">        phen_dir (str): local directory path where the upstream repo is to be cloned</span>
-</span><span id="L-209"><a href="#L-209"><span class="linenos"> 209</span></a><span class="sd">        upstream_url (str): url to the upstream repo</span>
-</span><span id="L-210"><a href="#L-210"><span class="linenos"> 210</span></a><span class="sd">        upstream_version (str): version in the upstream repo to clone</span>
-</span><span id="L-211"><a href="#L-211"><span class="linenos"> 211</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-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="sd">    Raises:</span>
-</span><span id="L-214"><a href="#L-214"><span class="linenos"> 214</span></a><span class="sd">        ValueError: if the specified version is not in the upstream repo</span>
-</span><span id="L-215"><a href="#L-215"><span class="linenos"> 215</span></a><span class="sd">        ValueError: if the upstream repo is not a valid phenotype repo</span>
-</span><span id="L-216"><a href="#L-216"><span class="linenos"> 216</span></a><span class="sd">        ValueError: if there&#39;s any other problems with Git</span>
-</span><span id="L-217"><a href="#L-217"><span class="linenos"> 217</span></a><span class="sd">    &quot;&quot;&quot;</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><span id="L-219"><a href="#L-219"><span class="linenos"> 219</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-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><span id="L-222"><a href="#L-222"><span class="linenos"> 222</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-223"><a href="#L-223"><span class="linenos"> 223</span></a>    <span class="c1"># check if directory already exists and ask user if they want to recreate it</span>
-</span><span id="L-224"><a href="#L-224"><span class="linenos"> 224</span></a>    <span class="k">if</span> <span class="p">(</span>
-</span><span id="L-225"><a href="#L-225"><span class="linenos"> 225</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-226"><a href="#L-226"><span class="linenos"> 226</span></a>    <span class="p">):</span>  <span class="c1"># Check if it exists and is a directory</span>
-</span><span id="L-227"><a href="#L-227"><span class="linenos"> 227</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-228"><a href="#L-228"><span class="linenos"> 228</span></a>            <span class="n">phen_path</span><span class="p">,</span>
-</span><span id="L-229"><a href="#L-229"><span class="linenos"> 229</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-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="k">else</span><span class="p">:</span>
-</span><span id="L-232"><a href="#L-232"><span class="linenos"> 232</span></a>        <span class="n">configure</span> <span class="o">=</span> <span class="kc">True</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="k">if</span> <span class="ow">not</span> <span class="n">configure</span><span class="p">:</span>
-</span><span id="L-235"><a href="#L-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;Exiting, phenotype not initiatised&quot;</span><span class="p">)</span>
-</span><span id="L-236"><a href="#L-236"><span class="linenos"> 236</span></a>        <span class="k">return</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">try</span><span class="p">:</span>
-</span><span id="L-239"><a href="#L-239"><span class="linenos"> 239</span></a>        <span class="c1"># Clone repo</span>
-</span><span id="L-240"><a href="#L-240"><span class="linenos"> 240</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-241"><a href="#L-241"><span class="linenos"> 241</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-242"><a href="#L-242"><span class="linenos"> 242</span></a>
-</span><span id="L-243"><a href="#L-243"><span class="linenos"> 243</span></a>        <span class="c1"># Fetch all branches and tags</span>
-</span><span id="L-244"><a href="#L-244"><span class="linenos"> 244</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-245"><a href="#L-245"><span class="linenos"> 245</span></a>
-</span><span id="L-246"><a href="#L-246"><span class="linenos"> 246</span></a>        <span class="c1"># Check if the version exists</span>
-</span><span id="L-247"><a href="#L-247"><span class="linenos"> 247</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-248"><a href="#L-248"><span class="linenos"> 248</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-249"><a href="#L-249"><span class="linenos"> 249</span></a>            <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
-</span><span id="L-250"><a href="#L-250"><span class="linenos"> 250</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-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><span id="L-253"><a href="#L-253"><span class="linenos"> 253</span></a>        <span class="c1"># Checkout the specified version</span>
-</span><span id="L-254"><a href="#L-254"><span class="linenos"> 254</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-255"><a href="#L-255"><span class="linenos"> 255</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-256"><a href="#L-256"><span class="linenos"> 256</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-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="c1"># Check if &#39;config.yaml&#39; exists in the root directory</span>
-</span><span id="L-259"><a href="#L-259"><span class="linenos"> 259</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.yaml&quot;</span>
-</span><span id="L-260"><a href="#L-260"><span class="linenos"> 260</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-261"><a href="#L-261"><span class="linenos"> 261</span></a>            <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
-</span><span id="L-262"><a href="#L-262"><span class="linenos"> 262</span></a>                <span class="sa">f</span><span class="s2">&quot;The forked repository is not a valid ACMC repo because &#39;config.yaml&#39; is missing in the root directory.&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><span id="L-265"><a href="#L-265"><span class="linenos"> 265</span></a>        <span class="c1"># Validate the phenotype is compatible with the acmc tool</span>
-</span><span id="L-266"><a href="#L-266"><span class="linenos"> 266</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-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"># Delete each tag locally</span>
-</span><span id="L-269"><a href="#L-269"><span class="linenos"> 269</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-270"><a href="#L-270"><span class="linenos"> 270</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-271"><a href="#L-271"><span class="linenos"> 271</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-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;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-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="c1"># Add upstream remote</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">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-276"><a href="#L-276"><span class="linenos"> 276</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-277"><a href="#L-277"><span class="linenos"> 277</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-278"><a href="#L-278"><span class="linenos"> 278</span></a>
-</span><span id="L-279"><a href="#L-279"><span class="linenos"> 279</span></a>        <span class="c1"># Optionally set a new origin remote</span>
-</span><span id="L-280"><a href="#L-280"><span class="linenos"> 280</span></a>        <span class="k">if</span> <span class="n">new_origin_url</span><span class="p">:</span>
-</span><span id="L-281"><a href="#L-281"><span class="linenos"> 281</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-282"><a href="#L-282"><span class="linenos"> 282</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-283"><a href="#L-283"><span class="linenos"> 283</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-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="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-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;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-287"><a href="#L-287"><span class="linenos"> 287</span></a>        <span class="k">if</span> <span class="n">new_origin_url</span><span class="p">:</span>
-</span><span id="L-288"><a href="#L-288"><span class="linenos"> 288</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-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="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-291"><a href="#L-291"><span class="linenos"> 291</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-292"><a href="#L-292"><span class="linenos"> 292</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-293"><a href="#L-293"><span class="linenos"> 293</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-294"><a href="#L-294"><span class="linenos"> 294</span></a>
-</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="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-297"><a href="#L-297"><span class="linenos"> 297</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-298"><a href="#L-298"><span class="linenos"> 298</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-299"><a href="#L-299"><span class="linenos"> 299</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-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"># check if directory already exists and ask user if they want to recreate it</span>
-</span><span id="L-302"><a href="#L-302"><span class="linenos"> 302</span></a>    <span class="k">if</span> <span class="p">(</span>
-</span><span id="L-303"><a href="#L-303"><span class="linenos"> 303</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-304"><a href="#L-304"><span class="linenos"> 304</span></a>    <span class="p">):</span>  <span class="c1"># Check if it exists and is a directory</span>
-</span><span id="L-305"><a href="#L-305"><span class="linenos"> 305</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-306"><a href="#L-306"><span class="linenos"> 306</span></a>            <span class="n">phen_path</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;The phen directory already exists. Do you want to reinitialise? (yes/no): &quot;</span><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="k">else</span><span class="p">:</span>
-</span><span id="L-310"><a href="#L-310"><span class="linenos"> 310</span></a>        <span class="n">configure</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-311"><a href="#L-311"><span class="linenos"> 311</span></a>
-</span><span id="L-312"><a href="#L-312"><span class="linenos"> 312</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-313"><a href="#L-313"><span class="linenos"> 313</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-314"><a href="#L-314"><span class="linenos"> 314</span></a>        <span class="k">return</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 class="c1"># Initialise repo from local or remote</span>
-</span><span id="L-317"><a href="#L-317"><span class="linenos"> 317</span></a>    <span class="n">repo</span><span class="p">:</span> <span class="n">Repo</span>
-</span><span id="L-318"><a href="#L-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="L-319"><a href="#L-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="L-320"><a href="#L-320"><span class="linenos"> 320</span></a>        <span class="c1"># add PAT token to the URL</span>
-</span><span id="L-321"><a href="#L-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="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"># clone the repo</span>
-</span><span id="L-324"><a href="#L-324"><span class="linenos"> 324</span></a>        <span class="n">repo</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-325"><a href="#L-325"><span class="linenos"> 325</span></a>        <span class="n">repo</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-326"><a href="#L-326"><span class="linenos"> 326</span></a>
-</span><span id="L-327"><a href="#L-327"><span class="linenos"> 327</span></a>        <span class="c1"># open repo</span>
-</span><span id="L-328"><a href="#L-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="L-329"><a href="#L-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="L-330"><a href="#L-330"><span class="linenos"> 330</span></a>        <span class="k">if</span> <span class="p">(</span>
-</span><span id="L-331"><a href="#L-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="L-332"><a href="#L-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="L-333"><a href="#L-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="L-334"><a href="#L-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="L-335"><a href="#L-335"><span class="linenos"> 335</span></a>        <span class="k">else</span><span class="p">:</span>
-</span><span id="L-336"><a href="#L-336"><span class="linenos"> 336</span></a>            <span class="c1"># Get the total number of commits in the default branch</span>
-</span><span id="L-337"><a href="#L-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="L-338"><a href="#L-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="L-339"><a href="#L-339"><span class="linenos"> 339</span></a>    <span class="k">else</span><span class="p">:</span>
-</span><span id="L-340"><a href="#L-340"><span class="linenos"> 340</span></a>        <span class="c1"># local repo, create the directories and init</span>
-</span><span id="L-341"><a href="#L-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="L-342"><a href="#L-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="L-343"><a href="#L-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="L-344"><a href="#L-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="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="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-347"><a href="#L-347"><span class="linenos"> 347</span></a>    <span class="c1"># initialise empty repos</span>
-</span><span id="L-348"><a href="#L-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="L-349"><a href="#L-349"><span class="linenos"> 349</span></a>        <span class="c1"># create initial commit</span>
-</span><span id="L-350"><a href="#L-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="L-351"><a href="#L-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="L-352"><a href="#L-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="L-353"><a href="#L-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="L-354"><a href="#L-354"><span class="linenos"> 354</span></a>            <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">add</span><span class="p">([</span><span class="n">initial_file_path</span><span class="p">])</span>
-</span><span id="L-356"><a href="#L-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="L-357"><a href="#L-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="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="c1"># Checkout the phens default branch, creating it if it does not exist</span>
-</span><span id="L-360"><a href="#L-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="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">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-362"><a href="#L-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="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">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-365"><a href="#L-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="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"># if the phen path does not contain the config file then initialise the phen type</span>
-</span><span id="L-368"><a href="#L-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="L-369"><a href="#L-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="L-370"><a href="#L-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="L-371"><a href="#L-371"><span class="linenos"> 371</span></a>        <span class="k">return</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">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-374"><a href="#L-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="L-375"><a href="#L-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="L-376"><a href="#L-376"><span class="linenos"> 376</span></a>
-</span><span id="L-377"><a href="#L-377"><span class="linenos"> 377</span></a>    <span class="c1"># create empty phen config file</span>
-</span><span id="L-378"><a href="#L-378"><span class="linenos"> 378</span></a>    <span class="n">config</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-379"><a href="#L-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="L-380"><a href="#L-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="L-381"><a href="#L-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="L-382"><a href="#L-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="L-383"><a href="#L-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="L-384"><a href="#L-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="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="s2">&quot;translate&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="s2">&quot;concept_sets&quot;</span><span class="p">:</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><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">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-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">config</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"># add git ignore</span>
-</span><span id="L-402"><a href="#L-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="L-403"><a href="#L-403"><span class="linenos"> 403</span></a><span class="s2">*.db</span>
-</span><span id="L-404"><a href="#L-404"><span class="linenos"> 404</span></a><span class="s2">*.sqlite3</span>
-</span><span id="L-405"><a href="#L-405"><span class="linenos"> 405</span></a><span class="s2"> </span>
-</span><span id="L-406"><a href="#L-406"><span class="linenos"> 406</span></a><span class="s2"># Ignore SQLite journal and metadata files</span>
-</span><span id="L-407"><a href="#L-407"><span class="linenos"> 407</span></a><span class="s2">*.db-journal</span>
-</span><span id="L-408"><a href="#L-408"><span class="linenos"> 408</span></a><span class="s2">*.sqlite3-journal</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="s2"># python</span>
-</span><span id="L-411"><a href="#L-411"><span class="linenos"> 411</span></a><span class="s2">.ipynb_checkpoints</span>
-</span><span id="L-412"><a href="#L-412"><span class="linenos"> 412</span></a><span class="s2"> &quot;&quot;&quot;</span>
-</span><span id="L-413"><a href="#L-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="L-414"><a href="#L-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="L-415"><a href="#L-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="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"># add to git repo and commit</span>
-</span><span id="L-418"><a href="#L-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="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="n">phen_path</span> <span class="o">/</span> <span class="n">d</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">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-421"><a href="#L-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="L-422"><a href="#L-422"><span class="linenos"> 422</span></a>
-</span><span id="L-423"><a href="#L-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><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.yaml&#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.yaml&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.yaml&#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-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-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-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-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><span id="L-426"><a href="#L-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="L-427"><a href="#L-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="L-428"><a href="#L-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="L-429"><a href="#L-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="L-430"><a href="#L-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="L-431"><a href="#L-431"><span class="linenos"> 431</span></a>        <span class="k">raise</span> <span class="ne">NotADirectoryError</span><span class="p">(</span>
-</span><span id="L-432"><a href="#L-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="L-433"><a href="#L-433"><span class="linenos"> 433</span></a>        <span class="p">)</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="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-436"><a href="#L-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="L-437"><a href="#L-437"><span class="linenos"> 437</span></a>        <span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span>
-</span><span id="L-438"><a href="#L-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="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><span id="L-441"><a href="#L-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="L-442"><a href="#L-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="L-443"><a href="#L-443"><span class="linenos"> 443</span></a>        <span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span>
-</span><span id="L-444"><a href="#L-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="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><span id="L-447"><a href="#L-447"><span class="linenos"> 447</span></a>    <span class="c1"># Calidate the directory is a git repo</span>
-</span><span id="L-448"><a href="#L-448"><span class="linenos"> 448</span></a>    <span class="k">try</span><span class="p">:</span>
-</span><span id="L-449"><a href="#L-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="L-450"><a href="#L-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="L-451"><a href="#L-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="L-452"><a href="#L-452"><span class="linenos"> 452</span></a>
-</span><span id="L-453"><a href="#L-453"><span class="linenos"> 453</span></a>    <span class="c1"># Load configuration File</span>
-</span><span id="L-454"><a href="#L-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;.yaml&quot;</span><span class="p">:</span>
-</span><span id="L-455"><a href="#L-455"><span class="linenos"> 455</span></a>        <span class="k">try</span><span class="p">:</span>
-</span><span id="L-456"><a href="#L-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="L-457"><a href="#L-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="L-458"><a href="#L-458"><span class="linenos"> 458</span></a>
-</span><span id="L-459"><a href="#L-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="L-460"><a href="#L-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="L-461"><a href="#L-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="L-462"><a href="#L-462"><span class="linenos"> 462</span></a>            <span class="k">else</span><span class="p">:</span>
-</span><span id="L-463"><a href="#L-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="L-464"><a href="#L-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="L-465"><a href="#L-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="L-466"><a href="#L-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="L-467"><a href="#L-467"><span class="linenos"> 467</span></a>            <span class="k">raise</span> <span class="n">e</span>
-</span><span id="L-468"><a href="#L-468"><span class="linenos"> 468</span></a>    <span class="k">else</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">Exception</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;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-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"># initiatise</span>
-</span><span id="L-474"><a href="#L-474"><span class="linenos"> 474</span></a>    <span class="n">validation_errors</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-475"><a href="#L-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="L-476"><a href="#L-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="L-477"><a href="#L-477"><span class="linenos"> 477</span></a>
-</span><span id="L-478"><a href="#L-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="L-479"><a href="#L-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="L-480"><a href="#L-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="L-481"><a href="#L-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="L-482"><a href="#L-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="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><span id="L-485"><a href="#L-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="L-486"><a href="#L-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="L-487"><a href="#L-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="L-488"><a href="#L-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="L-489"><a href="#L-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="L-490"><a href="#L-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="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="k">else</span><span class="p">:</span>
-</span><span id="L-493"><a href="#L-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="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="c1"># check codes definition</span>
-</span><span id="L-496"><a href="#L-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="L-497"><a href="#L-497"><span class="linenos"> 497</span></a>        <span class="c1"># check concepte code file exists</span>
-</span><span id="L-498"><a href="#L-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="L-499"><a href="#L-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="L-500"><a href="#L-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="L-501"><a href="#L-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="L-502"><a href="#L-502"><span class="linenos"> 502</span></a>            <span class="p">)</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 concepte code file is not empty</span>
-</span><span id="L-505"><a href="#L-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="L-506"><a href="#L-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="L-507"><a href="#L-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="L-508"><a href="#L-508"><span class="linenos"> 508</span></a>            <span class="p">)</span>
-</span><span id="L-509"><a href="#L-509"><span class="linenos"> 509</span></a>
-</span><span id="L-510"><a href="#L-510"><span class="linenos"> 510</span></a>        <span class="c1"># check code file type is supported</span>
-</span><span id="L-511"><a href="#L-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="L-512"><a href="#L-512"><span class="linenos"> 512</span></a>            <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
-</span><span id="L-513"><a href="#L-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="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 class="c1"># check columns specified are a supported medical coding type</span>
-</span><span id="L-517"><a href="#L-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="L-518"><a href="#L-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="L-519"><a href="#L-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="L-520"><a href="#L-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="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><span id="L-523"><a href="#L-523"><span class="linenos"> 523</span></a>        <span class="c1"># check the actions are supported</span>
-</span><span id="L-524"><a href="#L-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="L-525"><a href="#L-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="L-526"><a href="#L-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="L-527"><a href="#L-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="L-528"><a href="#L-528"><span class="linenos"> 528</span></a>
-</span><span id="L-529"><a href="#L-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="L-530"><a href="#L-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="L-531"><a href="#L-531"><span class="linenos"> 531</span></a>        <span class="k">raise</span> <span class="n">PhenValidationException</span><span class="p">(</span>
-</span><span id="L-532"><a href="#L-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="L-533"><a href="#L-533"><span class="linenos"> 533</span></a>            <span class="n">validation_errors</span><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><span id="L-536"><a href="#L-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>
+</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-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-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;.yaml&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><span id="L-539"><a href="#L-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="L-540"><a href="#L-540"><span class="linenos"> 540</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-541"><a href="#L-541"><span class="linenos"> 541</span></a><span class="sd">    Load Code List File</span>
-</span><span id="L-542"><a href="#L-542"><span class="linenos"> 542</span></a><span class="sd">    &quot;&quot;&quot;</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 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-545"><a href="#L-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="L-546"><a href="#L-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="L-547"><a href="#L-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="L-548"><a href="#L-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="L-549"><a href="#L-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="L-550"><a href="#L-550"><span class="linenos"> 550</span></a>        <span class="k">else</span><span class="p">:</span>
-</span><span id="L-551"><a href="#L-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="L-552"><a href="#L-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="L-553"><a href="#L-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="L-554"><a href="#L-554"><span class="linenos"> 554</span></a>    <span class="k">else</span><span class="p">:</span>
-</span><span id="L-555"><a href="#L-555"><span class="linenos"> 555</span></a>        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
-</span><span id="L-556"><a href="#L-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="L-557"><a href="#L-557"><span class="linenos"> 557</span></a>        <span class="p">)</span>
-</span><span id="L-558"><a href="#L-558"><span class="linenos"> 558</span></a>
-</span><span id="L-559"><a href="#L-559"><span class="linenos"> 559</span></a>    <span class="k">return</span> <span class="n">df</span>
+</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><span id="L-562"><a href="#L-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="L-563"><a href="#L-563"><span class="linenos"> 563</span></a>    <span class="c1"># Perform Structural Changes to file before preprocessing</span>
-</span><span id="L-564"><a href="#L-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="L-565"><a href="#L-565"><span class="linenos"> 565</span></a>    <span class="k">if</span> <span class="p">(</span>
-</span><span id="L-566"><a href="#L-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="L-567"><a href="#L-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="L-568"><a href="#L-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="L-569"><a href="#L-569"><span class="linenos"> 569</span></a>    <span class="p">):</span>
-</span><span id="L-570"><a href="#L-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="L-571"><a href="#L-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="L-572"><a href="#L-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="L-573"><a href="#L-573"><span class="linenos"> 573</span></a>            <span class="s2">&quot;Action: Splitting&quot;</span><span class="p">,</span>
-</span><span id="L-574"><a href="#L-574"><span class="linenos"> 574</span></a>            <span class="n">split_col</span><span class="p">,</span>
-</span><span id="L-575"><a href="#L-575"><span class="linenos"> 575</span></a>            <span class="s2">&quot;column into:&quot;</span><span class="p">,</span>
-</span><span id="L-576"><a href="#L-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="L-577"><a href="#L-577"><span class="linenos"> 577</span></a>        <span class="p">)</span>
-</span><span id="L-578"><a href="#L-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="L-579"><a href="#L-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="L-580"><a href="#L-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="L-581"><a href="#L-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="L-582"><a href="#L-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="L-583"><a href="#L-583"><span class="linenos"> 583</span></a>
-</span><span id="L-584"><a href="#L-584"><span class="linenos"> 584</span></a>    <span class="k">return</span> <span class="n">df</span>
+</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-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><span id="L-587"><a href="#L-587"><span class="linenos"> 587</span></a><span class="c1"># Perform QA Checks on columns individually and append to df</span>
-</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">preprocess_source_concepts</span><span class="p">(</span>
-</span><span id="L-589"><a href="#L-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="L-590"><a href="#L-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="L-591"><a href="#L-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="L-592"><a href="#L-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="L-593"><a href="#L-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="L-594"><a href="#L-594"><span class="linenos"> 594</span></a>
-</span><span id="L-595"><a href="#L-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="L-596"><a href="#L-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="L-597"><a href="#L-597"><span class="linenos"> 597</span></a>
-</span><span id="L-598"><a href="#L-598"><span class="linenos"> 598</span></a>    <span class="c1"># Preprocess codes</span>
-</span><span id="L-599"><a href="#L-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="L-600"><a href="#L-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="L-601"><a href="#L-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="L-602"><a href="#L-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="L-603"><a href="#L-603"><span class="linenos"> 603</span></a>
-</span><span id="L-604"><a href="#L-604"><span class="linenos"> 604</span></a>        <span class="c1"># get codes by column name</span>
-</span><span id="L-605"><a href="#L-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="L-606"><a href="#L-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="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">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-608"><a href="#L-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="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="c1"># process codes, validating them using parser and returning the errors</span>
-</span><span id="L-611"><a href="#L-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="L-612"><a href="#L-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="L-613"><a href="#L-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="L-614"><a href="#L-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="L-615"><a href="#L-615"><span class="linenos"> 615</span></a>
-</span><span id="L-616"><a href="#L-616"><span class="linenos"> 616</span></a>        <span class="c1"># add processed codes to df</span>
-</span><span id="L-617"><a href="#L-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="L-618"><a href="#L-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="L-619"><a href="#L-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="L-620"><a href="#L-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="L-621"><a href="#L-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="L-622"><a href="#L-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="L-623"><a href="#L-623"><span class="linenos"> 623</span></a>        <span class="p">)</span>
-</span><span id="L-624"><a href="#L-624"><span class="linenos"> 624</span></a>
-</span><span id="L-625"><a href="#L-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="L-626"><a href="#L-626"><span class="linenos"> 626</span></a>
-</span><span id="L-627"><a href="#L-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><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-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><span id="L-630"><a href="#L-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="L-631"><a href="#L-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><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><span id="L-634"><a href="#L-634"><span class="linenos"> 634</span></a><span class="c1"># Translate Df with multiple codes into single code type Series</span>
-</span><span id="L-635"><a href="#L-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="L-636"><a href="#L-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="L-637"><a href="#L-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="L-638"><a href="#L-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="L-639"><a href="#L-639"><span class="linenos"> 639</span></a>
-</span><span id="L-640"><a href="#L-640"><span class="linenos"> 640</span></a>    <span class="c1"># codes = pd.DataFrame([], dtype=str)</span>
-</span><span id="L-641"><a href="#L-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="L-642"><a href="#L-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="L-643"><a href="#L-643"><span class="linenos"> 643</span></a>    <span class="p">)</span>
-</span><span id="L-644"><a href="#L-644"><span class="linenos"> 644</span></a>    <span class="c1"># Convert codes to target type</span>
-</span><span id="L-645"><a href="#L-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="L-646"><a href="#L-646"><span class="linenos"> 646</span></a>
-</span><span id="L-647"><a href="#L-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="L-648"><a href="#L-648"><span class="linenos"> 648</span></a>
-</span><span id="L-649"><a href="#L-649"><span class="linenos"> 649</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-650"><a href="#L-650"><span class="linenos"> 650</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-651"><a href="#L-651"><span class="linenos"> 651</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-652"><a href="#L-652"><span class="linenos"> 652</span></a>                <span class="p">{</span>
-</span><span id="L-653"><a href="#L-653"><span class="linenos"> 653</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-654"><a href="#L-654"><span class="linenos"> 654</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-655"><a href="#L-655"><span class="linenos"> 655</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-656"><a href="#L-656"><span class="linenos"> 656</span></a>                <span class="p">}</span>
-</span><span id="L-657"><a href="#L-657"><span class="linenos"> 657</span></a>            <span class="p">)</span>
-</span><span id="L-658"><a href="#L-658"><span class="linenos"> 658</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-659"><a href="#L-659"><span class="linenos"> 659</span></a>            <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span>
-</span><span id="L-660"><a href="#L-660"><span class="linenos"> 660</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-661"><a href="#L-661"><span class="linenos"> 661</span></a>            <span class="p">)</span>
-</span><span id="L-662"><a href="#L-662"><span class="linenos"> 662</span></a>        <span class="k">else</span><span class="p">:</span>
-</span><span id="L-663"><a href="#L-663"><span class="linenos"> 663</span></a>            <span class="c1"># get the translation filename using source to target code types</span>
-</span><span id="L-664"><a href="#L-664"><span class="linenos"> 664</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-665"><a href="#L-665"><span class="linenos"> 665</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-666"><a href="#L-666"><span class="linenos"> 666</span></a>
-</span><span id="L-667"><a href="#L-667"><span class="linenos"> 667</span></a>            <span class="c1"># do the mapping if it exists</span>
-</span><span id="L-668"><a href="#L-668"><span class="linenos"> 668</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-669"><a href="#L-669"><span class="linenos"> 669</span></a>                <span class="c1"># get mapping</span>
-</span><span id="L-670"><a href="#L-670"><span class="linenos"> 670</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-671"><a href="#L-671"><span class="linenos"> 671</span></a>
-</span><span id="L-672"><a href="#L-672"><span class="linenos"> 672</span></a>                <span class="c1"># do mapping</span>
-</span><span id="L-673"><a href="#L-673"><span class="linenos"> 673</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-674"><a href="#L-674"><span class="linenos"> 674</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-675"><a href="#L-675"><span class="linenos"> 675</span></a>                <span class="p">)</span>
-</span><span id="L-676"><a href="#L-676"><span class="linenos"> 676</span></a>
-</span><span id="L-677"><a href="#L-677"><span class="linenos"> 677</span></a>                <span class="c1"># normalise the output</span>
-</span><span id="L-678"><a href="#L-678"><span class="linenos"> 678</span></a>                <span class="n">translated_df</span><span class="o">.</span><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;CONCEPT&quot;</span><span class="p">]</span>
-</span><span id="L-679"><a href="#L-679"><span class="linenos"> 679</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-680"><a href="#L-680"><span class="linenos"> 680</span></a>
-</span><span id="L-681"><a href="#L-681"><span class="linenos"> 681</span></a>                <span class="c1"># add to list of codes</span>
-</span><span id="L-682"><a href="#L-682"><span class="linenos"> 682</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-683"><a href="#L-683"><span class="linenos"> 683</span></a>
-</span><span id="L-684"><a href="#L-684"><span class="linenos"> 684</span></a>            <span class="k">else</span><span class="p">:</span>
-</span><span id="L-685"><a href="#L-685"><span class="linenos"> 685</span></a>                <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span>
-</span><span id="L-686"><a href="#L-686"><span class="linenos"> 686</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-687"><a href="#L-687"><span class="linenos"> 687</span></a>                <span class="p">)</span>
+</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-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="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-690"><a href="#L-690"><span class="linenos"> 690</span></a>
-</span><span id="L-691"><a href="#L-691"><span class="linenos"> 691</span></a>    <span class="c1"># added concept set type to output if any translations</span>
-</span><span id="L-692"><a href="#L-692"><span class="linenos"> 692</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-693"><a href="#L-693"><span class="linenos"> 693</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-694"><a href="#L-694"><span class="linenos"> 694</span></a>    <span class="k">else</span><span class="p">:</span>
-</span><span id="L-695"><a href="#L-695"><span class="linenos"> 695</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-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-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 class="k">return</span> <span class="n">codes</span>
-</span><span id="L-698"><a href="#L-698"><span class="linenos"> 698</span></a>
-</span><span id="L-699"><a href="#L-699"><span class="linenos"> 699</span></a>
-</span><span id="L-700"><a href="#L-700"><span class="linenos"> 700</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-701"><a href="#L-701"><span class="linenos"> 701</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-702"><a href="#L-702"><span class="linenos"> 702</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">bool</span><span class="p">:</span>
-</span><span id="L-703"><a href="#L-703"><span class="linenos"> 703</span></a>    <span class="c1"># Execute and check if a result exists</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">conn</span><span class="o">.</span><span class="n">cursor</span><span class="p">()</span>
-</span><span id="L-705"><a href="#L-705"><span class="linenos"> 705</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-706"><a href="#L-706"><span class="linenos"> 706</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-707"><a href="#L-707"><span class="linenos"> 707</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-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-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 class="k">return</span> <span class="n">exists</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><span id="L-712"><a href="#L-712"><span class="linenos"> 712</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-713"><a href="#L-713"><span class="linenos"> 713</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-714"><a href="#L-714"><span class="linenos"> 714</span></a>        <span class="p">[</span>
-</span><span id="L-715"><a href="#L-715"><span class="linenos"> 715</span></a>            <span class="p">{</span>
-</span><span id="L-716"><a href="#L-716"><span class="linenos"> 716</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-717"><a href="#L-717"><span class="linenos"> 717</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-718"><a href="#L-718"><span class="linenos"> 718</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-719"><a href="#L-719"><span class="linenos"> 719</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-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="k">for</span> <span class="n">err</span> <span class="ow">in</span> <span class="n">code_errors</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><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">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-726"><a href="#L-726"><span class="linenos"> 726</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-727"><a href="#L-727"><span class="linenos"> 727</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-728"><a href="#L-728"><span class="linenos"> 728</span></a>
-</span><span id="L-729"><a href="#L-729"><span class="linenos"> 729</span></a>
-</span><span id="L-730"><a href="#L-730"><span class="linenos"> 730</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-731"><a href="#L-731"><span class="linenos"> 731</span></a>    <span class="c1"># write the vocab version files</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="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-734"><a href="#L-734"><span class="linenos"> 734</span></a>        <span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span>
-</span><span id="L-735"><a href="#L-735"><span class="linenos"> 735</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-736"><a href="#L-736"><span class="linenos"> 736</span></a>        <span class="p">)</span>
-</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">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-739"><a href="#L-739"><span class="linenos"> 739</span></a>        <span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span>
-</span><span id="L-740"><a href="#L-740"><span class="linenos"> 740</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-741"><a href="#L-741"><span class="linenos"> 741</span></a>        <span class="p">)</span>
-</span><span id="L-742"><a href="#L-742"><span class="linenos"> 742</span></a>
-</span><span id="L-743"><a href="#L-743"><span class="linenos"> 743</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-744"><a href="#L-744"><span class="linenos"> 744</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-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">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-747"><a href="#L-747"><span class="linenos"> 747</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-748"><a href="#L-748"><span class="linenos"> 748</span></a>
-</span><span id="L-749"><a href="#L-749"><span class="linenos"> 749</span></a>    <span class="c1"># Create the combined YAML structure</span>
-</span><span id="L-750"><a href="#L-750"><span class="linenos"> 750</span></a>    <span class="n">version_data</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-751"><a href="#L-751"><span class="linenos"> 751</span></a>        <span class="s2">&quot;versions&quot;</span><span class="p">:</span> <span class="p">{</span>
-</span><span id="L-752"><a href="#L-752"><span class="linenos"> 752</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-753"><a href="#L-753"><span class="linenos"> 753</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-754"><a href="#L-754"><span class="linenos"> 754</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-755"><a href="#L-755"><span class="linenos"> 755</span></a>        <span class="p">}</span>
-</span><span id="L-756"><a href="#L-756"><span class="linenos"> 756</span></a>    <span class="p">}</span>
-</span><span id="L-757"><a href="#L-757"><span class="linenos"> 757</span></a>
-</span><span id="L-758"><a href="#L-758"><span class="linenos"> 758</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-759"><a href="#L-759"><span class="linenos"> 759</span></a>        <span class="n">yaml</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span>
-</span><span id="L-760"><a href="#L-760"><span class="linenos"> 760</span></a>            <span class="n">version_data</span><span class="p">,</span>
-</span><span id="L-761"><a href="#L-761"><span class="linenos"> 761</span></a>            <span class="n">file</span><span class="p">,</span>
-</span><span id="L-762"><a href="#L-762"><span class="linenos"> 762</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-763"><a href="#L-763"><span class="linenos"> 763</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-764"><a href="#L-764"><span class="linenos"> 764</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-765"><a href="#L-765"><span class="linenos"> 765</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-766"><a href="#L-766"><span class="linenos"> 766</span></a>        <span class="p">)</span>
-</span><span id="L-767"><a href="#L-767"><span class="linenos"> 767</span></a>
-</span><span id="L-768"><a href="#L-768"><span class="linenos"> 768</span></a>
-</span><span id="L-769"><a href="#L-769"><span class="linenos"> 769</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-770"><a href="#L-770"><span class="linenos"> 770</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-771"><a href="#L-771"><span class="linenos"> 771</span></a>
-</span><span id="L-772"><a href="#L-772"><span class="linenos"> 772</span></a>    <span class="c1"># Validate configuration</span>
-</span><span id="L-773"><a href="#L-773"><span class="linenos"> 773</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-774"><a href="#L-774"><span class="linenos"> 774</span></a>
-</span><span id="L-775"><a href="#L-775"><span class="linenos"> 775</span></a>    <span class="c1"># initialise paths</span>
-</span><span id="L-776"><a href="#L-776"><span class="linenos"> 776</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-777"><a href="#L-777"><span class="linenos"> 777</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-778"><a href="#L-778"><span class="linenos"> 778</span></a>
-</span><span id="L-779"><a href="#L-779"><span class="linenos"> 779</span></a>    <span class="c1"># load configuration</span>
-</span><span id="L-780"><a href="#L-780"><span class="linenos"> 780</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-781"><a href="#L-781"><span class="linenos"> 781</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-782"><a href="#L-782"><span class="linenos"> 782</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-783"><a href="#L-783"><span class="linenos"> 783</span></a>
-</span><span id="L-784"><a href="#L-784"><span class="linenos"> 784</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-785"><a href="#L-785"><span class="linenos"> 785</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-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="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-788"><a href="#L-788"><span class="linenos"> 788</span></a>        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
-</span><span id="L-789"><a href="#L-789"><span class="linenos"> 789</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-790"><a href="#L-790"><span class="linenos"> 790</span></a>        <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="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-793"><a href="#L-793"><span class="linenos"> 793</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-794"><a href="#L-794"><span class="linenos"> 794</span></a>    <span class="k">else</span><span class="p">:</span>
-</span><span id="L-795"><a href="#L-795"><span class="linenos"> 795</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-796"><a href="#L-796"><span class="linenos"> 796</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-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-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-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-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 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-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><span id="L-801"><a href="#L-801"><span class="linenos"> 801</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-802"><a href="#L-802"><span class="linenos"> 802</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-803"><a href="#L-803"><span class="linenos"> 803</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-804"><a href="#L-804"><span class="linenos"> 804</span></a>    <span class="c1"># Create output dataframe</span>
-</span><span id="L-805"><a href="#L-805"><span class="linenos"> 805</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-806"><a href="#L-806"><span class="linenos"> 806</span></a>    <span class="n">code_errors</span> <span class="o">=</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 class="c1"># Process each folder in codes section</span>
-</span><span id="L-809"><a href="#L-809"><span class="linenos"> 809</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-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;--- </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-811"><a href="#L-811"><span class="linenos"> 811</span></a>
-</span><span id="L-812"><a href="#L-812"><span class="linenos"> 812</span></a>        <span class="c1"># Load code file</span>
-</span><span id="L-813"><a href="#L-813"><span class="linenos"> 813</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-814"><a href="#L-814"><span class="linenos"> 814</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-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 structural actions</span>
-</span><span id="L-817"><a href="#L-817"><span class="linenos"> 817</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-818"><a href="#L-818"><span class="linenos"> 818</span></a>
-</span><span id="L-819"><a href="#L-819"><span class="linenos"> 819</span></a>        <span class="c1"># preprocessing and validate of source concepts</span>
-</span><span id="L-820"><a href="#L-820"><span class="linenos"> 820</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-821"><a href="#L-821"><span class="linenos"> 821</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-822"><a href="#L-822"><span class="linenos"> 822</span></a>            <span class="n">df</span><span class="p">,</span>
-</span><span id="L-823"><a href="#L-823"><span class="linenos"> 823</span></a>            <span class="n">concept_set</span><span class="p">,</span>
-</span><span id="L-824"><a href="#L-824"><span class="linenos"> 824</span></a>            <span class="n">codes_file_path</span><span class="p">,</span>
-</span><span id="L-825"><a href="#L-825"><span class="linenos"> 825</span></a>        <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"># create df with just the source code columns</span>
-</span><span id="L-828"><a href="#L-828"><span class="linenos"> 828</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-829"><a href="#L-829"><span class="linenos"> 829</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-830"><a href="#L-830"><span class="linenos"> 830</span></a>
-</span><span id="L-831"><a href="#L-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">columns</span><span class="p">)</span>
-</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="n">source_df</span><span class="o">.</span><span class="n">head</span><span class="p">())</span>
-</span><span id="L-833"><a href="#L-833"><span class="linenos"> 833</span></a>
-</span><span id="L-834"><a href="#L-834"><span class="linenos"> 834</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-835"><a href="#L-835"><span class="linenos"> 835</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-836"><a href="#L-836"><span class="linenos"> 836</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-837"><a href="#L-837"><span class="linenos"> 837</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-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="c1"># Map source concepts codes to target codes</span>
-</span><span id="L-840"><a href="#L-840"><span class="linenos"> 840</span></a>        <span class="c1"># if processing a source coding list with categorical data</span>
-</span><span id="L-841"><a href="#L-841"><span class="linenos"> 841</span></a>        <span class="k">if</span> <span class="p">(</span>
-</span><span id="L-842"><a href="#L-842"><span class="linenos"> 842</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-843"><a href="#L-843"><span class="linenos"> 843</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-844"><a href="#L-844"><span class="linenos"> 844</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-845"><a href="#L-845"><span class="linenos"> 845</span></a>        <span class="p">):</span>
-</span><span id="L-846"><a href="#L-846"><span class="linenos"> 846</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-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;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-848"><a href="#L-848"><span class="linenos"> 848</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-849"><a href="#L-849"><span class="linenos"> 849</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-850"><a href="#L-850"><span class="linenos"> 850</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-851"><a href="#L-851"><span class="linenos"> 851</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-852"><a href="#L-852"><span class="linenos"> 852</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-853"><a href="#L-853"><span class="linenos"> 853</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-854"><a href="#L-854"><span class="linenos"> 854</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-855"><a href="#L-855"><span class="linenos"> 855</span></a>                        <span class="n">source_df</span><span class="p">,</span>
-</span><span id="L-856"><a href="#L-856"><span class="linenos"> 856</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-857"><a href="#L-857"><span class="linenos"> 857</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-858"><a href="#L-858"><span class="linenos"> 858</span></a>                    <span class="p">)</span>
-</span><span id="L-859"><a href="#L-859"><span class="linenos"> 859</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-860"><a href="#L-860"><span class="linenos"> 860</span></a>        <span class="k">else</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="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-862"><a href="#L-862"><span class="linenos"> 862</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-863"><a href="#L-863"><span class="linenos"> 863</span></a>                <span class="n">source_df</span><span class="p">,</span>
-</span><span id="L-864"><a href="#L-864"><span class="linenos"> 864</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-865"><a href="#L-865"><span class="linenos"> 865</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-866"><a href="#L-866"><span class="linenos"> 866</span></a>            <span class="p">)</span>
-</span><span id="L-867"><a href="#L-867"><span class="linenos"> 867</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-868"><a href="#L-868"><span class="linenos"> 868</span></a>
-</span><span id="L-869"><a href="#L-869"><span class="linenos"> 869</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-870"><a href="#L-870"><span class="linenos"> 870</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-871"><a href="#L-871"><span class="linenos"> 871</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-872"><a href="#L-872"><span class="linenos"> 872</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-873"><a href="#L-873"><span class="linenos"> 873</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-874"><a href="#L-874"><span class="linenos"> 874</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-875"><a href="#L-875"><span class="linenos"> 875</span></a>
-</span><span id="L-876"><a href="#L-876"><span class="linenos"> 876</span></a>    <span class="c1"># Check there is output from processing</span>
-</span><span id="L-877"><a href="#L-877"><span class="linenos"> 877</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-878"><a href="#L-878"><span class="linenos"> 878</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-879"><a href="#L-879"><span class="linenos"> 879</span></a>        <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span>
-</span><span id="L-880"><a href="#L-880"><span class="linenos"> 880</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-881"><a href="#L-881"><span class="linenos"> 881</span></a>        <span class="p">)</span>
-</span><span id="L-882"><a href="#L-882"><span class="linenos"> 882</span></a>
-</span><span id="L-883"><a href="#L-883"><span class="linenos"> 883</span></a>    <span class="c1"># final processing</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">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-885"><a href="#L-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">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-886"><a href="#L-886"><span class="linenos"> 886</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-887"><a href="#L-887"><span class="linenos"> 887</span></a>
-</span><span id="L-888"><a href="#L-888"><span class="linenos"> 888</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-889"><a href="#L-889"><span class="linenos"> 889</span></a>    <span class="c1"># added metadata</span>
-</span><span id="L-890"><a href="#L-890"><span class="linenos"> 890</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-891"><a href="#L-891"><span class="linenos"> 891</span></a>    <span class="n">result_list</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-892"><a href="#L-892"><span class="linenos"> 892</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-893"><a href="#L-893"><span class="linenos"> 893</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-894"><a href="#L-894"><span class="linenos"> 894</span></a>
-</span><span id="L-895"><a href="#L-895"><span class="linenos"> 895</span></a>        <span class="c1"># Filter output based on the current source_concept_type</span>
-</span><span id="L-896"><a href="#L-896"><span class="linenos"> 896</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-897"><a href="#L-897"><span class="linenos"> 897</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-898"><a href="#L-898"><span class="linenos"> 898</span></a>
-</span><span id="L-899"><a href="#L-899"><span class="linenos"> 899</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-900"><a href="#L-900"><span class="linenos"> 900</span></a>        <span class="n">remove_types</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="L-901"><a href="#L-901"><span class="linenos"> 901</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-902"><a href="#L-902"><span class="linenos"> 902</span></a>        <span class="p">]</span>
-</span><span id="L-903"><a href="#L-903"><span class="linenos"> 903</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-904"><a href="#L-904"><span class="linenos"> 904</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-905"><a href="#L-905"><span class="linenos"> 905</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-906"><a href="#L-906"><span class="linenos"> 906</span></a>        <span class="p">)</span>
-</span><span id="L-907"><a href="#L-907"><span class="linenos"> 907</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-908"><a href="#L-908"><span class="linenos"> 908</span></a>
-</span><span id="L-909"><a href="#L-909"><span class="linenos"> 909</span></a>        <span class="c1"># Perform the left join with df2 on SOURCE_CONCEPT to add the metadata</span>
-</span><span id="L-910"><a href="#L-910"><span class="linenos"> 910</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-911"><a href="#L-911"><span class="linenos"> 911</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-912"><a href="#L-912"><span class="linenos"> 912</span></a>
-</span><span id="L-913"><a href="#L-913"><span class="linenos"> 913</span></a>        <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span>
-</span><span id="L-914"><a href="#L-914"><span class="linenos"> 914</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-915"><a href="#L-915"><span class="linenos"> 915</span></a>        <span class="p">)</span>
+</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-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-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"># Append the result to the result_list</span>
-</span><span id="L-918"><a href="#L-918"><span class="linenos"> 918</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-919"><a href="#L-919"><span class="linenos"> 919</span></a>
-</span><span id="L-920"><a href="#L-920"><span class="linenos"> 920</span></a>    <span class="c1"># Concatenate all the results into a single DataFrame</span>
-</span><span id="L-921"><a href="#L-921"><span class="linenos"> 921</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-922"><a href="#L-922"><span class="linenos"> 922</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-923"><a href="#L-923"><span class="linenos"> 923</span></a>    <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span>
-</span><span id="L-924"><a href="#L-924"><span class="linenos"> 924</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-925"><a href="#L-925"><span class="linenos"> 925</span></a>    <span class="p">)</span>
-</span><span id="L-926"><a href="#L-926"><span class="linenos"> 926</span></a>
-</span><span id="L-927"><a href="#L-927"><span class="linenos"> 927</span></a>    <span class="c1"># Save output to map directory</span>
-</span><span id="L-928"><a href="#L-928"><span class="linenos"> 928</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-929"><a href="#L-929"><span class="linenos"> 929</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-930"><a href="#L-930"><span class="linenos"> 930</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-931"><a href="#L-931"><span class="linenos"> 931</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-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"># save concept sets as separate files</span>
-</span><span id="L-934"><a href="#L-934"><span class="linenos"> 934</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-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"># empty the concept-set directory except for hiddle files, e.g. .git</span>
-</span><span id="L-937"><a href="#L-937"><span class="linenos"> 937</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-938"><a href="#L-938"><span class="linenos"> 938</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-939"><a href="#L-939"><span class="linenos"> 939</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-940"><a href="#L-940"><span class="linenos"> 940</span></a>                <span class="n">item</span><span class="o">.</span><span class="n">unlink</span><span class="p">()</span>
-</span><span id="L-941"><a href="#L-941"><span class="linenos"> 941</span></a>    <span class="k">else</span><span class="p">:</span>
-</span><span id="L-942"><a href="#L-942"><span class="linenos"> 942</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-943"><a href="#L-943"><span class="linenos"> 943</span></a>
-</span><span id="L-944"><a href="#L-944"><span class="linenos"> 944</span></a>    <span class="c1"># write each concept as a separate file</span>
-</span><span id="L-945"><a href="#L-945"><span class="linenos"> 945</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-946"><a href="#L-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">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-947"><a href="#L-947"><span class="linenos"> 947</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-948"><a href="#L-948"><span class="linenos"> 948</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-949"><a href="#L-949"><span class="linenos"> 949</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-950"><a href="#L-950"><span class="linenos"> 950</span></a>        <span class="p">)</span>  <span class="c1"># sort cols alphabetically</span>
-</span><span id="L-951"><a href="#L-951"><span class="linenos"> 951</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-952"><a href="#L-952"><span class="linenos"> 952</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-953"><a href="#L-953"><span class="linenos"> 953</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-954"><a href="#L-954"><span class="linenos"> 954</span></a>
-</span><span id="L-955"><a href="#L-955"><span class="linenos"> 955</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-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="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-958"><a href="#L-958"><span class="linenos"> 958</span></a>
-</span><span id="L-959"><a href="#L-959"><span class="linenos"> 959</span></a>
-</span><span id="L-960"><a href="#L-960"><span class="linenos"> 960</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-961"><a href="#L-961"><span class="linenos"> 961</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-962"><a href="#L-962"><span class="linenos"> 962</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">str</span><span class="p">:</span>
-</span><span id="L-963"><a href="#L-963"><span class="linenos"> 963</span></a>    <span class="c1"># Get all valid semantic version tags</span>
-</span><span id="L-964"><a href="#L-964"><span class="linenos"> 964</span></a>    <span class="n">versions</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-965"><a href="#L-965"><span class="linenos"> 965</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-966"><a href="#L-966"><span class="linenos"> 966</span></a>        <span class="n">tag_name</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-967"><a href="#L-967"><span class="linenos"> 967</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-968"><a href="#L-968"><span class="linenos"> 968</span></a>        <span class="p">)</span>  <span class="c1"># Remove &#39;v&#39; if needed</span>
-</span><span id="L-969"><a href="#L-969"><span class="linenos"> 969</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-970"><a href="#L-970"><span class="linenos"> 970</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-971"><a href="#L-971"><span class="linenos"> 971</span></a>
-</span><span id="L-972"><a href="#L-972"><span class="linenos"> 972</span></a>    <span class="c1"># Determine the next version</span>
-</span><span id="L-973"><a href="#L-973"><span class="linenos"> 973</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-974"><a href="#L-974"><span class="linenos"> 974</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-975"><a href="#L-975"><span class="linenos"> 975</span></a>    <span class="k">else</span><span class="p">:</span>
-</span><span id="L-976"><a href="#L-976"><span class="linenos"> 976</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-977"><a href="#L-977"><span class="linenos"> 977</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-978"><a href="#L-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_major</span><span class="p">()</span>
-</span><span id="L-979"><a href="#L-979"><span class="linenos"> 979</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-980"><a href="#L-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_minor</span><span class="p">()</span>
-</span><span id="L-981"><a href="#L-981"><span class="linenos"> 981</span></a>        <span class="k">else</span><span class="p">:</span>
-</span><span id="L-982"><a href="#L-982"><span class="linenos"> 982</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-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-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-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="c1"># Create the new tag</span>
-</span><span id="L-985"><a href="#L-985"><span class="linenos"> 985</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-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">return</span> <span class="n">new_version_str</span>
-</span><span id="L-988"><a href="#L-988"><span class="linenos"> 988</span></a>
-</span><span id="L-989"><a href="#L-989"><span class="linenos"> 989</span></a>
-</span><span id="L-990"><a href="#L-990"><span class="linenos"> 990</span></a><span class="k">def</span><span class="w"> </span><span class="nf">publish</span><span class="p">(</span>
-</span><span id="L-991"><a href="#L-991"><span class="linenos"> 991</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-992"><a href="#L-992"><span class="linenos"> 992</span></a><span class="p">):</span>
-</span><span id="L-993"><a href="#L-993"><span class="linenos"> 993</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-994"><a href="#L-994"><span class="linenos"> 994</span></a>
-</span><span id="L-995"><a href="#L-995"><span class="linenos"> 995</span></a>    <span class="c1"># Validate config</span>
-</span><span id="L-996"><a href="#L-996"><span class="linenos"> 996</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-997"><a href="#L-997"><span class="linenos"> 997</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-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="c1"># load git repo and set the branch</span>
-</span><span id="L-1000"><a href="#L-1000"><span class="linenos">1000</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-1001"><a href="#L-1001"><span class="linenos">1001</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-1002"><a href="#L-1002"><span class="linenos">1002</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-1003"><a href="#L-1003"><span class="linenos">1003</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-1004"><a href="#L-1004"><span class="linenos">1004</span></a>    <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1005"><a href="#L-1005"><span class="linenos">1005</span></a>        <span class="k">raise</span> <span class="ne">AttributeError</span><span class="p">(</span>
-</span><span id="L-1006"><a href="#L-1006"><span class="linenos">1006</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-1007"><a href="#L-1007"><span class="linenos">1007</span></a>        <span class="p">)</span>
-</span><span id="L-1008"><a href="#L-1008"><span class="linenos">1008</span></a>
-</span><span id="L-1009"><a href="#L-1009"><span class="linenos">1009</span></a>    <span class="c1"># check if any changes to publish</span>
-</span><span id="L-1010"><a href="#L-1010"><span class="linenos">1010</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-1011"><a href="#L-1011"><span class="linenos">1011</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-1012"><a href="#L-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="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-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="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-1015"><a href="#L-1015"><span class="linenos">1015</span></a>            <span class="k">return</span>
-</span><span id="L-1016"><a href="#L-1016"><span class="linenos">1016</span></a>
-</span><span id="L-1017"><a href="#L-1017"><span class="linenos">1017</span></a>    <span class="c1"># get next version</span>
-</span><span id="L-1018"><a href="#L-1018"><span class="linenos">1018</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-1019"><a href="#L-1019"><span class="linenos">1019</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-1020"><a href="#L-1020"><span class="linenos">1020</span></a>
-</span><span id="L-1021"><a href="#L-1021"><span class="linenos">1021</span></a>    <span class="c1"># Write version in configuration file</span>
-</span><span id="L-1022"><a href="#L-1022"><span class="linenos">1022</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-1023"><a href="#L-1023"><span class="linenos">1023</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-1024"><a href="#L-1024"><span class="linenos">1024</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-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="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-1027"><a href="#L-1027"><span class="linenos">1027</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-1028"><a href="#L-1028"><span class="linenos">1028</span></a>        <span class="n">yaml</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span>
-</span><span id="L-1029"><a href="#L-1029"><span class="linenos">1029</span></a>            <span class="n">config</span><span class="p">,</span>
-</span><span id="L-1030"><a href="#L-1030"><span class="linenos">1030</span></a>            <span class="n">file</span><span class="p">,</span>
-</span><span id="L-1031"><a href="#L-1031"><span class="linenos">1031</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-1032"><a href="#L-1032"><span class="linenos">1032</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-1033"><a href="#L-1033"><span class="linenos">1033</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-1034"><a href="#L-1034"><span class="linenos">1034</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-1035"><a href="#L-1035"><span class="linenos">1035</span></a>        <span class="p">)</span>
-</span><span id="L-1036"><a href="#L-1036"><span class="linenos">1036</span></a>
-</span><span id="L-1037"><a href="#L-1037"><span class="linenos">1037</span></a>    <span class="c1"># Add and commit changes to repo including version updates</span>
-</span><span id="L-1038"><a href="#L-1038"><span class="linenos">1038</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-1039"><a href="#L-1039"><span class="linenos">1039</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-1040"><a href="#L-1040"><span class="linenos">1040</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-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-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-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"># Add tag to the repo</span>
-</span><span id="L-1043"><a href="#L-1043"><span class="linenos">1043</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-1044"><a href="#L-1044"><span class="linenos">1044</span></a>
-</span><span id="L-1045"><a href="#L-1045"><span class="linenos">1045</span></a>    <span class="c1"># push to origin if a remote repo</span>
-</span><span id="L-1046"><a href="#L-1046"><span class="linenos">1046</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-1047"><a href="#L-1047"><span class="linenos">1047</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-1048"><a href="#L-1048"><span class="linenos">1048</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-1049"><a href="#L-1049"><span class="linenos">1049</span></a>
-</span><span id="L-1050"><a href="#L-1050"><span class="linenos">1050</span></a>    <span class="k">try</span><span class="p">:</span>
-</span><span id="L-1051"><a href="#L-1051"><span class="linenos">1051</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-1052"><a href="#L-1052"><span class="linenos">1052</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-1053"><a href="#L-1053"><span class="linenos">1053</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-1054"><a href="#L-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 main branch to remote repo&quot;</span><span class="p">)</span>
-</span><span id="L-1055"><a href="#L-1055"><span class="linenos">1055</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-1056"><a href="#L-1056"><span class="linenos">1056</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-1057"><a href="#L-1057"><span class="linenos">1057</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-1058"><a href="#L-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;Changes pushed to &#39;origin&#39;&quot;</span><span class="p">)</span>
-</span><span id="L-1059"><a href="#L-1059"><span class="linenos">1059</span></a>        <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1060"><a href="#L-1060"><span class="linenos">1060</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-1061"><a href="#L-1061"><span class="linenos">1061</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-1062"><a href="#L-1062"><span class="linenos">1062</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-1063"><a href="#L-1063"><span class="linenos">1063</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-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">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-1065"><a href="#L-1065"><span class="linenos">1065</span></a>        <span class="k">raise</span> <span class="n">e</span>
+</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="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-1068"><a href="#L-1068"><span class="linenos">1068</span></a>
-</span><span id="L-1069"><a href="#L-1069"><span class="linenos">1069</span></a>
-</span><span id="L-1070"><a href="#L-1070"><span class="linenos">1070</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-1071"><a href="#L-1071"><span class="linenos">1071</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-1072"><a href="#L-1072"><span class="linenos">1072</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-1073"><a href="#L-1073"><span class="linenos">1073</span></a>
-</span><span id="L-1074"><a href="#L-1074"><span class="linenos">1074</span></a>    <span class="c1"># validate configuration</span>
-</span><span id="L-1075"><a href="#L-1075"><span class="linenos">1075</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-1076"><a href="#L-1076"><span class="linenos">1076</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-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 class="c1"># load configuration</span>
-</span><span id="L-1079"><a href="#L-1079"><span class="linenos">1079</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-1080"><a href="#L-1080"><span class="linenos">1080</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-1081"><a href="#L-1081"><span class="linenos">1081</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-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="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-1084"><a href="#L-1084"><span class="linenos">1084</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-1085"><a href="#L-1085"><span class="linenos">1085</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-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="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-1088"><a href="#L-1088"><span class="linenos">1088</span></a>    <span class="c1"># check export directory exists and if not create it</span>
-</span><span id="L-1089"><a href="#L-1089"><span class="linenos">1089</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-1090"><a href="#L-1090"><span class="linenos">1090</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-1091"><a href="#L-1091"><span class="linenos">1091</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-1092"><a href="#L-1092"><span class="linenos">1092</span></a>
-</span><span id="L-1093"><a href="#L-1093"><span class="linenos">1093</span></a>    <span class="c1"># omop export db</span>
-</span><span id="L-1094"><a href="#L-1094"><span class="linenos">1094</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-1095"><a href="#L-1095"><span class="linenos">1095</span></a>        <span class="n">map_path</span><span class="p">,</span>
-</span><span id="L-1096"><a href="#L-1096"><span class="linenos">1096</span></a>        <span class="n">export_path</span><span class="p">,</span>
-</span><span id="L-1097"><a href="#L-1097"><span class="linenos">1097</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-1098"><a href="#L-1098"><span class="linenos">1098</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-1099"><a href="#L-1099"><span class="linenos">1099</span></a>    <span class="p">)</span>
-</span><span id="L-1100"><a href="#L-1100"><span class="linenos">1100</span></a>
-</span><span id="L-1101"><a href="#L-1101"><span class="linenos">1101</span></a>    <span class="c1"># write to tables</span>
-</span><span id="L-1102"><a href="#L-1102"><span class="linenos">1102</span></a>    <span class="c1"># export as csv</span>
-</span><span id="L-1103"><a href="#L-1103"><span class="linenos">1103</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-1104"><a href="#L-1104"><span class="linenos">1104</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-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="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-1107"><a href="#L-1107"><span class="linenos">1107</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-1108"><a href="#L-1108"><span class="linenos">1108</span></a>
-</span><span id="L-1109"><a href="#L-1109"><span class="linenos">1109</span></a>    <span class="c1"># Validate</span>
-</span><span id="L-1110"><a href="#L-1110"><span class="linenos">1110</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-1111"><a href="#L-1111"><span class="linenos">1111</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-1112"><a href="#L-1112"><span class="linenos">1112</span></a>
-</span><span id="L-1113"><a href="#L-1113"><span class="linenos">1113</span></a>    <span class="c1"># Check target directory exists</span>
-</span><span id="L-1114"><a href="#L-1114"><span class="linenos">1114</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-1115"><a href="#L-1115"><span class="linenos">1115</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-1116"><a href="#L-1116"><span class="linenos">1116</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-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"># Set copy directory</span>
-</span><span id="L-1119"><a href="#L-1119"><span class="linenos">1119</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-1120"><a href="#L-1120"><span class="linenos">1120</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-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="k">if</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="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-1124"><a href="#L-1124"><span class="linenos">1124</span></a>    <span class="p">):</span>  <span class="c1"># Check if it exists and is a directory</span>
-</span><span id="L-1125"><a href="#L-1125"><span class="linenos">1125</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-1126"><a href="#L-1126"><span class="linenos">1126</span></a>            <span class="n">copy_path</span><span class="p">,</span>
-</span><span id="L-1127"><a href="#L-1127"><span class="linenos">1127</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-1128"><a href="#L-1128"><span class="linenos">1128</span></a>        <span class="p">)</span>
-</span><span id="L-1129"><a href="#L-1129"><span class="linenos">1129</span></a>    <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1130"><a href="#L-1130"><span class="linenos">1130</span></a>        <span class="n">copy</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-1131"><a href="#L-1131"><span class="linenos">1131</span></a>
-</span><span id="L-1132"><a href="#L-1132"><span class="linenos">1132</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-1133"><a href="#L-1133"><span class="linenos">1133</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-1134"><a href="#L-1134"><span class="linenos">1134</span></a>        <span class="k">return</span>
+</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-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-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="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-1137"><a href="#L-1137"><span class="linenos">1137</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-1138"><a href="#L-1138"><span class="linenos">1138</span></a>
-</span><span id="L-1139"><a href="#L-1139"><span class="linenos">1139</span></a>    <span class="c1"># Check out the latest commit or specified version</span>
-</span><span id="L-1140"><a href="#L-1140"><span class="linenos">1140</span></a>    <span class="k">if</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="c1"># Checkout a specific version (e.g., branch, tag, or commit hash)</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;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-1143"><a href="#L-1143"><span class="linenos">1143</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-1144"><a href="#L-1144"><span class="linenos">1144</span></a>    <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1145"><a href="#L-1145"><span class="linenos">1145</span></a>        <span class="c1"># Checkout the latest commit (HEAD)</span>
-</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">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-1147"><a href="#L-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">checkout</span><span class="p">(</span><span class="s2">&quot;HEAD&quot;</span><span class="p">)</span>
-</span><span id="L-1148"><a href="#L-1148"><span class="linenos">1148</span></a>
-</span><span id="L-1149"><a href="#L-1149"><span class="linenos">1149</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-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-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="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-1152"><a href="#L-1152"><span class="linenos">1152</span></a>
-</span><span id="L-1153"><a href="#L-1153"><span class="linenos">1153</span></a>
-</span><span id="L-1154"><a href="#L-1154"><span class="linenos">1154</span></a><span class="c1"># Convert concept_sets list into dictionaries</span>
-</span><span id="L-1155"><a href="#L-1155"><span class="linenos">1155</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-1156"><a href="#L-1156"><span class="linenos">1156</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-1157"><a href="#L-1157"><span class="linenos">1157</span></a>    <span class="n">concepts_dict</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="L-1158"><a href="#L-1158"><span class="linenos">1158</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-1159"><a href="#L-1159"><span class="linenos">1159</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-1160"><a href="#L-1160"><span class="linenos">1160</span></a>    <span class="p">}</span>
-</span><span id="L-1161"><a href="#L-1161"><span class="linenos">1161</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-1162"><a href="#L-1162"><span class="linenos">1162</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-1163"><a href="#L-1163"><span class="linenos">1163</span></a>
-</span><span id="L-1164"><a href="#L-1164"><span class="linenos">1164</span></a>
-</span><span id="L-1165"><a href="#L-1165"><span class="linenos">1165</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-1166"><a href="#L-1166"><span class="linenos">1166</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="L-1167"><a href="#L-1167"><span class="linenos">1167</span></a><span class="sd">    Extracts clean keys from a DeepDiff dictionary.</span>
-</span><span id="L-1168"><a href="#L-1168"><span class="linenos">1168</span></a>
-</span><span id="L-1169"><a href="#L-1169"><span class="linenos">1169</span></a><span class="sd">    :param diff: DeepDiff result dictionary</span>
-</span><span id="L-1170"><a href="#L-1170"><span class="linenos">1170</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-1171"><a href="#L-1171"><span class="linenos">1171</span></a><span class="sd">    :return: A set of clean key names</span>
-</span><span id="L-1172"><a href="#L-1172"><span class="linenos">1172</span></a><span class="sd">    &quot;&quot;&quot;</span>
-</span><span id="L-1173"><a href="#L-1173"><span class="linenos">1173</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-1174"><a href="#L-1174"><span class="linenos">1174</span></a>
-</span><span id="L-1175"><a href="#L-1175"><span class="linenos">1175</span></a>
-</span><span id="L-1176"><a href="#L-1176"><span class="linenos">1176</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-1177"><a href="#L-1177"><span class="linenos">1177</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-1178"><a href="#L-1178"><span class="linenos">1178</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-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-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-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="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-1181"><a href="#L-1181"><span class="linenos">1181</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-1182"><a href="#L-1182"><span class="linenos">1182</span></a>
-</span><span id="L-1183"><a href="#L-1183"><span class="linenos">1183</span></a>    <span class="c1"># Check added and removed names</span>
-</span><span id="L-1184"><a href="#L-1184"><span class="linenos">1184</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-1185"><a href="#L-1185"><span class="linenos">1185</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-1186"><a href="#L-1186"><span class="linenos">1186</span></a>
-</span><span id="L-1187"><a href="#L-1187"><span class="linenos">1187</span></a>    <span class="c1"># find file path changes for unchanged names</span>
-</span><span id="L-1188"><a href="#L-1188"><span class="linenos">1188</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-1189"><a href="#L-1189"><span class="linenos">1189</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-1190"><a href="#L-1190"><span class="linenos">1190</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-1191"><a href="#L-1191"><span class="linenos">1191</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-1192"><a href="#L-1192"><span class="linenos">1192</span></a>    <span class="p">)</span>
-</span><span id="L-1193"><a href="#L-1193"><span class="linenos">1193</span></a>
-</span><span id="L-1194"><a href="#L-1194"><span class="linenos">1194</span></a>    <span class="c1"># Find renamed concepts (same file, different name)</span>
-</span><span id="L-1195"><a href="#L-1195"><span class="linenos">1195</span></a>    <span class="n">renamed_concepts</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="L-1196"><a href="#L-1196"><span class="linenos">1196</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-1197"><a href="#L-1197"><span class="linenos">1197</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-1198"><a href="#L-1198"><span class="linenos">1198</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-1199"><a href="#L-1199"><span class="linenos">1199</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-1200"><a href="#L-1200"><span class="linenos">1200</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-1201"><a href="#L-1201"><span class="linenos">1201</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-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"># Remove renamed concepts from added and removed sets</span>
-</span><span id="L-1204"><a href="#L-1204"><span class="linenos">1204</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-1205"><a href="#L-1205"><span class="linenos">1205</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-1206"><a href="#L-1206"><span class="linenos">1206</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-1207"><a href="#L-1207"><span class="linenos">1207</span></a>
-</span><span id="L-1208"><a href="#L-1208"><span class="linenos">1208</span></a>    <span class="c1"># generate config report</span>
-</span><span id="L-1209"><a href="#L-1209"><span class="linenos">1209</span></a>    <span class="k">if</span> <span class="n">added_names</span><span class="p">:</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;## Added Concepts</span><span class="se">\n</span><span class="s2">&quot;</span>
-</span><span id="L-1211"><a href="#L-1211"><span class="linenos">1211</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-1212"><a href="#L-1212"><span class="linenos">1212</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-1213"><a href="#L-1213"><span class="linenos">1213</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-1214"><a href="#L-1214"><span class="linenos">1214</span></a>
-</span><span id="L-1215"><a href="#L-1215"><span class="linenos">1215</span></a>    <span class="k">if</span> <span class="n">removed_names</span><span class="p">:</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;## Removed Concepts</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 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-1218"><a href="#L-1218"><span class="linenos">1218</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-1219"><a href="#L-1219"><span class="linenos">1219</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-1220"><a href="#L-1220"><span class="linenos">1220</span></a>
-</span><span id="L-1221"><a href="#L-1221"><span class="linenos">1221</span></a>    <span class="k">if</span> <span class="n">renamed_concepts</span><span class="p">:</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;## Renamed Concepts</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="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-1224"><a href="#L-1224"><span class="linenos">1224</span></a>            <span class="n">report</span> <span class="o">+=</span> <span class="p">(</span>
-</span><span id="L-1225"><a href="#L-1225"><span class="linenos">1225</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-1226"><a href="#L-1226"><span class="linenos">1226</span></a>            <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;</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><span id="L-1229"><a href="#L-1229"><span class="linenos">1229</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-1230"><a href="#L-1230"><span class="linenos">1230</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-1231"><a href="#L-1231"><span class="linenos">1231</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-1232"><a href="#L-1232"><span class="linenos">1232</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-1233"><a href="#L-1233"><span class="linenos">1233</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-1234"><a href="#L-1234"><span class="linenos">1234</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-1235"><a href="#L-1235"><span class="linenos">1235</span></a>            <span class="n">report</span> <span class="o">+=</span> <span class="p">(</span>
-</span><span id="L-1236"><a href="#L-1236"><span class="linenos">1236</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-1237"><a href="#L-1237"><span class="linenos">1237</span></a>            <span class="p">)</span>
-</span><span id="L-1238"><a href="#L-1238"><span class="linenos">1238</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-1239"><a href="#L-1239"><span class="linenos">1239</span></a>
-</span><span id="L-1240"><a href="#L-1240"><span class="linenos">1240</span></a>    <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span>
-</span><span id="L-1241"><a href="#L-1241"><span class="linenos">1241</span></a>        <span class="n">added_names</span>
-</span><span id="L-1242"><a href="#L-1242"><span class="linenos">1242</span></a>        <span class="ow">or</span> <span class="n">removed_names</span>
-</span><span id="L-1243"><a href="#L-1243"><span class="linenos">1243</span></a>        <span class="ow">or</span> <span class="n">renamed_concepts</span>
-</span><span id="L-1244"><a href="#L-1244"><span class="linenos">1244</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-1245"><a href="#L-1245"><span class="linenos">1245</span></a>    <span class="p">):</span>
-</span><span id="L-1246"><a href="#L-1246"><span class="linenos">1246</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-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-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-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">return</span> <span class="n">report</span>
-</span><span id="L-1249"><a href="#L-1249"><span class="linenos">1249</span></a>
-</span><span id="L-1250"><a href="#L-1250"><span class="linenos">1250</span></a>
-</span><span id="L-1251"><a href="#L-1251"><span class="linenos">1251</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-1252"><a href="#L-1252"><span class="linenos">1252</span></a>    <span class="n">old_output_files</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="L-1253"><a href="#L-1253"><span class="linenos">1253</span></a>        <span class="n">file</span><span class="o">.</span><span class="n">name</span>
-</span><span id="L-1254"><a href="#L-1254"><span class="linenos">1254</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-1255"><a href="#L-1255"><span class="linenos">1255</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-1256"><a href="#L-1256"><span class="linenos">1256</span></a>    <span class="p">]</span>
-</span><span id="L-1257"><a href="#L-1257"><span class="linenos">1257</span></a>    <span class="n">new_output_files</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="L-1258"><a href="#L-1258"><span class="linenos">1258</span></a>        <span class="n">file</span><span class="o">.</span><span class="n">name</span>
-</span><span id="L-1259"><a href="#L-1259"><span class="linenos">1259</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-1260"><a href="#L-1260"><span class="linenos">1260</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-1261"><a href="#L-1261"><span class="linenos">1261</span></a>    <span class="p">]</span>
-</span><span id="L-1262"><a href="#L-1262"><span class="linenos">1262</span></a>
-</span><span id="L-1263"><a href="#L-1263"><span class="linenos">1263</span></a>    <span class="c1"># Convert the lists to sets for easy comparison</span>
-</span><span id="L-1264"><a href="#L-1264"><span class="linenos">1264</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-1265"><a href="#L-1265"><span class="linenos">1265</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-1266"><a href="#L-1266"><span class="linenos">1266</span></a>
-</span><span id="L-1267"><a href="#L-1267"><span class="linenos">1267</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-1268"><a href="#L-1268"><span class="linenos">1268</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-1269"><a href="#L-1269"><span class="linenos">1269</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-1270"><a href="#L-1270"><span class="linenos">1270</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-1271"><a href="#L-1271"><span class="linenos">1271</span></a>    <span class="c1"># Outputs that are the intersection of old_output_set and new_output_set</span>
-</span><span id="L-1272"><a href="#L-1272"><span class="linenos">1272</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-1273"><a href="#L-1273"><span class="linenos">1273</span></a>
-</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;</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-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;This compares the coding translations files available.</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 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-1277"><a href="#L-1277"><span class="linenos">1277</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-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;- 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-1279"><a href="#L-1279"><span class="linenos">1279</span></a>
-</span><span id="L-1280"><a href="#L-1280"><span class="linenos">1280</span></a>    <span class="c1"># Step N: Compare common outputs between versions</span>
-</span><span id="L-1281"><a href="#L-1281"><span class="linenos">1281</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-1282"><a href="#L-1282"><span class="linenos">1282</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-1283"><a href="#L-1283"><span class="linenos">1283</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-1284"><a href="#L-1284"><span class="linenos">1284</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-1285"><a href="#L-1285"><span class="linenos">1285</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-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-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">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-1288"><a href="#L-1288"><span class="linenos">1288</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-1289"><a href="#L-1289"><span class="linenos">1289</span></a>
-</span><span id="L-1290"><a href="#L-1290"><span class="linenos">1290</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-1291"><a href="#L-1291"><span class="linenos">1291</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-1292"><a href="#L-1292"><span class="linenos">1292</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-1293"><a href="#L-1293"><span class="linenos">1293</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-1294"><a href="#L-1294"><span class="linenos">1294</span></a>
-</span><span id="L-1295"><a href="#L-1295"><span class="linenos">1295</span></a>        <span class="c1"># Check for added and removed concepts</span>
-</span><span id="L-1296"><a href="#L-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;- 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-1297"><a href="#L-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">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-1298"><a href="#L-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;- 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-1299"><a href="#L-1299"><span class="linenos">1299</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-1300"><a href="#L-1300"><span class="linenos">1300</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-1301"><a href="#L-1301"><span class="linenos">1301</span></a>
-</span><span id="L-1302"><a href="#L-1302"><span class="linenos">1302</span></a>        <span class="c1"># Check for changed concepts</span>
-</span><span id="L-1303"><a href="#L-1303"><span class="linenos">1303</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-1304"><a href="#L-1304"><span class="linenos">1304</span></a>        <span class="n">diff</span> <span class="o">=</span> <span class="n">diff</span><span class="p">[</span>
-</span><span id="L-1305"><a href="#L-1305"><span class="linenos">1305</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-1306"><a href="#L-1306"><span class="linenos">1306</span></a>        <span class="p">]</span>  <span class="c1"># get non-zero counts</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">\n</span><span class="s2">&quot;</span>
-</span><span id="L-1308"><a href="#L-1308"><span class="linenos">1308</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-1309"><a href="#L-1309"><span class="linenos">1309</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-1310"><a href="#L-1310"><span class="linenos">1310</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-1311"><a href="#L-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="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-1312"><a href="#L-1312"><span class="linenos">1312</span></a>        <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1313"><a href="#L-1313"><span class="linenos">1313</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-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-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">return</span> <span class="n">report</span>
-</span><span id="L-1316"><a href="#L-1316"><span class="linenos">1316</span></a>
-</span><span id="L-1317"><a href="#L-1317"><span class="linenos">1317</span></a>
-</span><span id="L-1318"><a href="#L-1318"><span class="linenos">1318</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-1319"><a href="#L-1319"><span class="linenos">1319</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-1320"><a href="#L-1320"><span class="linenos">1320</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-1321"><a href="#L-1321"><span class="linenos">1321</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-1322"><a href="#L-1322"><span class="linenos">1322</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-1323"><a href="#L-1323"><span class="linenos">1323</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-1324"><a href="#L-1324"><span class="linenos">1324</span></a><span class="p">):</span>
-</span><span id="L-1325"><a href="#L-1325"><span class="linenos">1325</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-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="c1"># validate phenotypes</span>
-</span><span id="L-1328"><a href="#L-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 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-1329"><a href="#L-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">old_phen_path</span><span class="o">.</span><span class="n">resolve</span><span class="p">()))</span>
-</span><span id="L-1330"><a href="#L-1330"><span class="linenos">1330</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-1331"><a href="#L-1331"><span class="linenos">1331</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-1332"><a href="#L-1332"><span class="linenos">1332</span></a>
-</span><span id="L-1333"><a href="#L-1333"><span class="linenos">1333</span></a>    <span class="c1"># get old and new config</span>
-</span><span id="L-1334"><a href="#L-1334"><span class="linenos">1334</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-1335"><a href="#L-1335"><span class="linenos">1335</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-1336"><a href="#L-1336"><span class="linenos">1336</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-1337"><a href="#L-1337"><span class="linenos">1337</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-1338"><a href="#L-1338"><span class="linenos">1338</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-1339"><a href="#L-1339"><span class="linenos">1339</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-1340"><a href="#L-1340"><span class="linenos">1340</span></a>
-</span><span id="L-1341"><a href="#L-1341"><span class="linenos">1341</span></a>    <span class="c1"># write report heading</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;# Phenotype Comparison Report</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;## Original phenotype</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;  - </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-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">old_version</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="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-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;## Changed phenotype:</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 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-1349"><a href="#L-1349"><span class="linenos">1349</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-1350"><a href="#L-1350"><span class="linenos">1350</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-1351"><a href="#L-1351"><span class="linenos">1351</span></a>
-</span><span id="L-1352"><a href="#L-1352"><span class="linenos">1352</span></a>    <span class="c1"># Step 1: check differences configuration files</span>
-</span><span id="L-1353"><a href="#L-1353"><span class="linenos">1353</span></a>    <span class="c1"># Convert list of dicts into a dict: {name: file}</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="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-1355"><a href="#L-1355"><span class="linenos">1355</span></a>
-</span><span id="L-1356"><a href="#L-1356"><span class="linenos">1356</span></a>    <span class="c1"># Step 2: check differences between map files</span>
-</span><span id="L-1357"><a href="#L-1357"><span class="linenos">1357</span></a>    <span class="c1"># List files from output directories</span>
-</span><span id="L-1358"><a href="#L-1358"><span class="linenos">1358</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-1359"><a href="#L-1359"><span class="linenos">1359</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-1360"><a href="#L-1360"><span class="linenos">1360</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-1361"><a href="#L-1361"><span class="linenos">1361</span></a>
-</span><span id="L-1362"><a href="#L-1362"><span class="linenos">1362</span></a>    <span class="c1"># initialise report file</span>
-</span><span id="L-1363"><a href="#L-1363"><span class="linenos">1363</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-1364"><a href="#L-1364"><span class="linenos">1364</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-1365"><a href="#L-1365"><span class="linenos">1365</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-1366"><a href="#L-1366"><span class="linenos">1366</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-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-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-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="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-1369"><a href="#L-1369"><span class="linenos">1369</span></a>
-</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="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-1372"><a href="#L-1372"><span class="linenos">1372</span></a>    <span class="c1"># make tmp directory .acmc</span>
-</span><span id="L-1373"><a href="#L-1373"><span class="linenos">1373</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-1374"><a href="#L-1374"><span class="linenos">1374</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-1375"><a href="#L-1375"><span class="linenos">1375</span></a>
-</span><span id="L-1376"><a href="#L-1376"><span class="linenos">1376</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-1377"><a href="#L-1377"><span class="linenos">1377</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-1378"><a href="#L-1378"><span class="linenos">1378</span></a>        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
-</span><span id="L-1379"><a href="#L-1379"><span class="linenos">1379</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-1380"><a href="#L-1380"><span class="linenos">1380</span></a>        <span class="p">)</span>
-</span><span id="L-1381"><a href="#L-1381"><span class="linenos">1381</span></a>
-</span><span id="L-1382"><a href="#L-1382"><span class="linenos">1382</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-1383"><a href="#L-1383"><span class="linenos">1383</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-1384"><a href="#L-1384"><span class="linenos">1384</span></a>        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
-</span><span id="L-1385"><a href="#L-1385"><span class="linenos">1385</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-1386"><a href="#L-1386"><span class="linenos">1386</span></a>        <span class="p">)</span>
-</span><span id="L-1387"><a href="#L-1387"><span class="linenos">1387</span></a>
-</span><span id="L-1388"><a href="#L-1388"><span class="linenos">1388</span></a>    <span class="k">try</span><span class="p">:</span>
-</span><span id="L-1389"><a href="#L-1389"><span class="linenos">1389</span></a>        <span class="c1"># Create the directory</span>
-</span><span id="L-1390"><a href="#L-1390"><span class="linenos">1390</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-1391"><a href="#L-1391"><span class="linenos">1391</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-1392"><a href="#L-1392"><span class="linenos">1392</span></a>
-</span><span id="L-1393"><a href="#L-1393"><span class="linenos">1393</span></a>        <span class="c1"># Create temporary directories</span>
-</span><span id="L-1394"><a href="#L-1394"><span class="linenos">1394</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-1395"><a href="#L-1395"><span class="linenos">1395</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-1396"><a href="#L-1396"><span class="linenos">1396</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-1397"><a href="#L-1397"><span class="linenos">1397</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-1398"><a href="#L-1398"><span class="linenos">1398</span></a>
-</span><span id="L-1399"><a href="#L-1399"><span class="linenos">1399</span></a>        <span class="c1"># checkout changed</span>
-</span><span id="L-1400"><a href="#L-1400"><span class="linenos">1400</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-1401"><a href="#L-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><span id="L-1402"><a href="#L-1402"><span class="linenos">1402</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-1403"><a href="#L-1403"><span class="linenos">1403</span></a>            <span class="p">)</span>
-</span><span id="L-1404"><a href="#L-1404"><span class="linenos">1404</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-1405"><a href="#L-1405"><span class="linenos">1405</span></a>        <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1406"><a href="#L-1406"><span class="linenos">1406</span></a>            <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span>
-</span><span id="L-1407"><a href="#L-1407"><span class="linenos">1407</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-1408"><a href="#L-1408"><span class="linenos">1408</span></a>            <span class="p">)</span>
-</span><span id="L-1409"><a href="#L-1409"><span class="linenos">1409</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-1410"><a href="#L-1410"><span class="linenos">1410</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-1411"><a href="#L-1411"><span class="linenos">1411</span></a>
-</span><span id="L-1412"><a href="#L-1412"><span class="linenos">1412</span></a>        <span class="c1"># checkout old</span>
-</span><span id="L-1413"><a href="#L-1413"><span class="linenos">1413</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-1414"><a href="#L-1414"><span class="linenos">1414</span></a>            <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span>
-</span><span id="L-1415"><a href="#L-1415"><span class="linenos">1415</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-1416"><a href="#L-1416"><span class="linenos">1416</span></a>            <span class="p">)</span>
-</span><span id="L-1417"><a href="#L-1417"><span class="linenos">1417</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-1418"><a href="#L-1418"><span class="linenos">1418</span></a>        <span class="k">else</span><span class="p">:</span>
-</span><span id="L-1419"><a href="#L-1419"><span class="linenos">1419</span></a>            <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span>
-</span><span id="L-1420"><a href="#L-1420"><span class="linenos">1420</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-1421"><a href="#L-1421"><span class="linenos">1421</span></a>            <span class="p">)</span>
-</span><span id="L-1422"><a href="#L-1422"><span class="linenos">1422</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-1423"><a href="#L-1423"><span class="linenos">1423</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-1424"><a href="#L-1424"><span class="linenos">1424</span></a>
-</span><span id="L-1425"><a href="#L-1425"><span class="linenos">1425</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-1426"><a href="#L-1426"><span class="linenos">1426</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-1427"><a href="#L-1427"><span class="linenos">1427</span></a>        <span class="c1"># diff old with new</span>
-</span><span id="L-1428"><a href="#L-1428"><span class="linenos">1428</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-1429"><a href="#L-1429"><span class="linenos">1429</span></a>
-</span><span id="L-1430"><a href="#L-1430"><span class="linenos">1430</span></a>    <span class="k">finally</span><span class="p">:</span>
-</span><span id="L-1431"><a href="#L-1431"><span class="linenos">1431</span></a>        <span class="c1"># clean up tmp directory</span>
-</span><span id="L-1432"><a href="#L-1432"><span class="linenos">1432</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-1433"><a href="#L-1433"><span class="linenos">1433</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-1434"><a href="#L-1434"><span class="linenos">1434</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-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-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-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></pre></div>
 
 
@@ -1910,7 +1907,7 @@
                     <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;opcs4&#39;, &#39;snomed&#39;, &#39;icd10&#39;, &#39;read3&#39;, &#39;atc&#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;read2&#39;, &#39;read3&#39;, &#39;snomed&#39;, &#39;icd10&#39;, &#39;opcs4&#39;, &#39;atc&#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>
@@ -2103,104 +2100,102 @@
 <div class="attr function">
             
         <span class="def">def</span>
-        <span class="name">fork</span><span class="signature pdoc-code multiline">(<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">upstream_url</span><span class="p">:</span> <span class="nb">str</span>,</span><span class="param">	<span class="n">upstream_version</span><span class="p">:</span> <span class="nb">str</span>,</span><span class="param">	<span class="n">new_origin_url</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="kc">None</span></span><span class="return-annotation">):</span></span>
+        <span class="name">fork</span><span class="signature pdoc-code multiline">(<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">upstream_url</span><span class="p">:</span> <span class="nb">str</span>,</span><span class="param">	<span class="n">upstream_version</span><span class="p">:</span> <span class="nb">str</span>,</span><span class="param">	<span class="n">new_origin_url</span><span class="p">:</span> <span class="nb">str</span></span><span class="return-annotation">):</span></span>
 
                 <label class="view-source-button" for="fork-view-source"><span>View Source</span></label>
 
     </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><span id="fork-204"><a href="#fork-204"><span class="linenos">204</span></a>    <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="o">=</span> <span class="kc">None</span>
-</span><span id="fork-205"><a href="#fork-205"><span class="linenos">205</span></a><span class="p">):</span>
-</span><span id="fork-206"><a href="#fork-206"><span class="linenos">206</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-207"><a href="#fork-207"><span class="linenos">207</span></a>
-</span><span id="fork-208"><a href="#fork-208"><span class="linenos">208</span></a><span class="sd">    Args:</span>
-</span><span id="fork-209"><a href="#fork-209"><span class="linenos">209</span></a><span class="sd">        phen_dir (str): local directory path where the upstream repo is to be cloned</span>
-</span><span id="fork-210"><a href="#fork-210"><span class="linenos">210</span></a><span class="sd">        upstream_url (str): url to the upstream repo</span>
-</span><span id="fork-211"><a href="#fork-211"><span class="linenos">211</span></a><span class="sd">        upstream_version (str): version in the upstream repo to clone</span>
-</span><span id="fork-212"><a href="#fork-212"><span class="linenos">212</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-213"><a href="#fork-213"><span class="linenos">213</span></a>
-</span><span id="fork-214"><a href="#fork-214"><span class="linenos">214</span></a><span class="sd">    Raises:</span>
-</span><span id="fork-215"><a href="#fork-215"><span class="linenos">215</span></a><span class="sd">        ValueError: if the specified version is not in the upstream repo</span>
-</span><span id="fork-216"><a href="#fork-216"><span class="linenos">216</span></a><span class="sd">        ValueError: if the upstream repo is not a valid phenotype repo</span>
-</span><span id="fork-217"><a href="#fork-217"><span class="linenos">217</span></a><span class="sd">        ValueError: if there&#39;s any other problems with Git</span>
-</span><span id="fork-218"><a href="#fork-218"><span class="linenos">218</span></a><span class="sd">    &quot;&quot;&quot;</span>
-</span><span id="fork-219"><a href="#fork-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><span id="fork-220"><a href="#fork-220"><span class="linenos">220</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-221"><a href="#fork-221"><span class="linenos">221</span></a>    <span class="p">)</span>
-</span><span id="fork-222"><a href="#fork-222"><span class="linenos">222</span></a>
-</span><span id="fork-223"><a href="#fork-223"><span class="linenos">223</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-224"><a href="#fork-224"><span class="linenos">224</span></a>    <span class="c1"># check if directory already exists and ask user if they want to recreate it</span>
-</span><span id="fork-225"><a href="#fork-225"><span class="linenos">225</span></a>    <span class="k">if</span> <span class="p">(</span>
-</span><span id="fork-226"><a href="#fork-226"><span class="linenos">226</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-227"><a href="#fork-227"><span class="linenos">227</span></a>    <span class="p">):</span>  <span class="c1"># Check if it exists and is a directory</span>
-</span><span id="fork-228"><a href="#fork-228"><span class="linenos">228</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-229"><a href="#fork-229"><span class="linenos">229</span></a>            <span class="n">phen_path</span><span class="p">,</span>
-</span><span id="fork-230"><a href="#fork-230"><span class="linenos">230</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-231"><a href="#fork-231"><span class="linenos">231</span></a>        <span class="p">)</span>
-</span><span id="fork-232"><a href="#fork-232"><span class="linenos">232</span></a>    <span class="k">else</span><span class="p">:</span>
-</span><span id="fork-233"><a href="#fork-233"><span class="linenos">233</span></a>        <span class="n">configure</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="fork-234"><a href="#fork-234"><span class="linenos">234</span></a>
-</span><span id="fork-235"><a href="#fork-235"><span class="linenos">235</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-236"><a href="#fork-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;Exiting, phenotype not initiatised&quot;</span><span class="p">)</span>
-</span><span id="fork-237"><a href="#fork-237"><span class="linenos">237</span></a>        <span class="k">return</span>
-</span><span id="fork-238"><a href="#fork-238"><span class="linenos">238</span></a>
-</span><span id="fork-239"><a href="#fork-239"><span class="linenos">239</span></a>    <span class="k">try</span><span class="p">:</span>
-</span><span id="fork-240"><a href="#fork-240"><span class="linenos">240</span></a>        <span class="c1"># Clone repo</span>
-</span><span id="fork-241"><a href="#fork-241"><span class="linenos">241</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-242"><a href="#fork-242"><span class="linenos">242</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-243"><a href="#fork-243"><span class="linenos">243</span></a>
-</span><span id="fork-244"><a href="#fork-244"><span class="linenos">244</span></a>        <span class="c1"># Fetch all branches and tags</span>
-</span><span id="fork-245"><a href="#fork-245"><span class="linenos">245</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-246"><a href="#fork-246"><span class="linenos">246</span></a>
-</span><span id="fork-247"><a href="#fork-247"><span class="linenos">247</span></a>        <span class="c1"># Check if the version exists</span>
-</span><span id="fork-248"><a href="#fork-248"><span class="linenos">248</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-249"><a href="#fork-249"><span class="linenos">249</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-250"><a href="#fork-250"><span class="linenos">250</span></a>            <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
-</span><span id="fork-251"><a href="#fork-251"><span class="linenos">251</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-252"><a href="#fork-252"><span class="linenos">252</span></a>            <span class="p">)</span>
-</span><span id="fork-253"><a href="#fork-253"><span class="linenos">253</span></a>
-</span><span id="fork-254"><a href="#fork-254"><span class="linenos">254</span></a>        <span class="c1"># Checkout the specified version</span>
-</span><span id="fork-255"><a href="#fork-255"><span class="linenos">255</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-256"><a href="#fork-256"><span class="linenos">256</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-257"><a href="#fork-257"><span class="linenos">257</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-258"><a href="#fork-258"><span class="linenos">258</span></a>
-</span><span id="fork-259"><a href="#fork-259"><span class="linenos">259</span></a>        <span class="c1"># Check if &#39;config.yaml&#39; exists in the root directory</span>
-</span><span id="fork-260"><a href="#fork-260"><span class="linenos">260</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.yaml&quot;</span>
-</span><span id="fork-261"><a href="#fork-261"><span class="linenos">261</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-262"><a href="#fork-262"><span class="linenos">262</span></a>            <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
-</span><span id="fork-263"><a href="#fork-263"><span class="linenos">263</span></a>                <span class="sa">f</span><span class="s2">&quot;The forked repository is not a valid ACMC repo because &#39;config.yaml&#39; is missing in the root directory.&quot;</span>
-</span><span id="fork-264"><a href="#fork-264"><span class="linenos">264</span></a>            <span class="p">)</span>
-</span><span id="fork-265"><a href="#fork-265"><span class="linenos">265</span></a>
-</span><span id="fork-266"><a href="#fork-266"><span class="linenos">266</span></a>        <span class="c1"># Validate the phenotype is compatible with the acmc tool</span>
-</span><span id="fork-267"><a href="#fork-267"><span class="linenos">267</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-268"><a href="#fork-268"><span class="linenos">268</span></a>
-</span><span id="fork-269"><a href="#fork-269"><span class="linenos">269</span></a>        <span class="c1"># Delete each tag locally</span>
-</span><span id="fork-270"><a href="#fork-270"><span class="linenos">270</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-271"><a href="#fork-271"><span class="linenos">271</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-272"><a href="#fork-272"><span class="linenos">272</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-273"><a href="#fork-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;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-274"><a href="#fork-274"><span class="linenos">274</span></a>
-</span><span id="fork-275"><a href="#fork-275"><span class="linenos">275</span></a>        <span class="c1"># Add upstream remote</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">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-277"><a href="#fork-277"><span class="linenos">277</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-278"><a href="#fork-278"><span class="linenos">278</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-279"><a href="#fork-279"><span class="linenos">279</span></a>
-</span><span id="fork-280"><a href="#fork-280"><span class="linenos">280</span></a>        <span class="c1"># Optionally set a new origin remote</span>
-</span><span id="fork-281"><a href="#fork-281"><span class="linenos">281</span></a>        <span class="k">if</span> <span class="n">new_origin_url</span><span class="p">:</span>
-</span><span id="fork-282"><a href="#fork-282"><span class="linenos">282</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-283"><a href="#fork-283"><span class="linenos">283</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-284"><a href="#fork-284"><span class="linenos">284</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-285"><a href="#fork-285"><span class="linenos">285</span></a>
-</span><span id="fork-286"><a href="#fork-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;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-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;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-288"><a href="#fork-288"><span class="linenos">288</span></a>        <span class="k">if</span> <span class="n">new_origin_url</span><span class="p">:</span>
-</span><span id="fork-289"><a href="#fork-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;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-290"><a href="#fork-290"><span class="linenos">290</span></a>
-</span><span id="fork-291"><a href="#fork-291"><span class="linenos">291</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-292"><a href="#fork-292"><span class="linenos">292</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-293"><a href="#fork-293"><span class="linenos">293</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-294"><a href="#fork-294"><span class="linenos">294</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-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.yaml&#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.yaml&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.yaml&#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>
 </span></pre></div>
 
 
@@ -2231,134 +2226,135 @@
 
     </div>
     <a class="headerlink" href="#init"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="init-297"><a href="#init-297"><span class="linenos">297</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-298"><a href="#init-298"><span class="linenos">298</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-299"><a href="#init-299"><span class="linenos">299</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-300"><a href="#init-300"><span class="linenos">300</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-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"># check if directory already exists and ask user if they want to recreate it</span>
-</span><span id="init-303"><a href="#init-303"><span class="linenos">303</span></a>    <span class="k">if</span> <span class="p">(</span>
-</span><span id="init-304"><a href="#init-304"><span class="linenos">304</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-305"><a href="#init-305"><span class="linenos">305</span></a>    <span class="p">):</span>  <span class="c1"># Check if it exists and is a directory</span>
-</span><span id="init-306"><a href="#init-306"><span class="linenos">306</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-307"><a href="#init-307"><span class="linenos">307</span></a>            <span class="n">phen_path</span><span class="p">,</span>
-</span><span id="init-308"><a href="#init-308"><span class="linenos">308</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-309"><a href="#init-309"><span class="linenos">309</span></a>        <span class="p">)</span>
-</span><span id="init-310"><a href="#init-310"><span class="linenos">310</span></a>    <span class="k">else</span><span class="p">:</span>
-</span><span id="init-311"><a href="#init-311"><span class="linenos">311</span></a>        <span class="n">configure</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="init-312"><a href="#init-312"><span class="linenos">312</span></a>
-</span><span id="init-313"><a href="#init-313"><span class="linenos">313</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-314"><a href="#init-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;Exiting, phenotype not initiatised&quot;</span><span class="p">)</span>
-</span><span id="init-315"><a href="#init-315"><span class="linenos">315</span></a>        <span class="k">return</span>
-</span><span id="init-316"><a href="#init-316"><span class="linenos">316</span></a>
-</span><span id="init-317"><a href="#init-317"><span class="linenos">317</span></a>    <span class="c1"># Initialise repo from local or remote</span>
-</span><span id="init-318"><a href="#init-318"><span class="linenos">318</span></a>    <span class="n">repo</span><span class="p">:</span> <span class="n">Repo</span>
-</span><span id="init-319"><a href="#init-319"><span class="linenos">319</span></a>    <span class="c1"># if remote then clone the repo otherwise init a local repo</span>
-</span><span id="init-320"><a href="#init-320"><span class="linenos">320</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-321"><a href="#init-321"><span class="linenos">321</span></a>        <span class="c1"># add PAT token to the URL</span>
-</span><span id="init-322"><a href="#init-322"><span class="linenos">322</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-323"><a href="#init-323"><span class="linenos">323</span></a>
-</span><span id="init-324"><a href="#init-324"><span class="linenos">324</span></a>        <span class="c1"># clone the repo</span>
-</span><span id="init-325"><a href="#init-325"><span class="linenos">325</span></a>        <span class="n">repo</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-326"><a href="#init-326"><span class="linenos">326</span></a>        <span class="n">repo</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-327"><a href="#init-327"><span class="linenos">327</span></a>
-</span><span id="init-328"><a href="#init-328"><span class="linenos">328</span></a>        <span class="c1"># open repo</span>
-</span><span id="init-329"><a href="#init-329"><span class="linenos">329</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-330"><a href="#init-330"><span class="linenos">330</span></a>        <span class="c1"># check if there are any commits (new repo has no commits)</span>
-</span><span id="init-331"><a href="#init-331"><span class="linenos">331</span></a>        <span class="k">if</span> <span class="p">(</span>
-</span><span id="init-332"><a href="#init-332"><span class="linenos">332</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-333"><a href="#init-333"><span class="linenos">333</span></a>        <span class="p">):</span>  <span class="c1"># Handle detached HEAD (e.g., after init)</span>
-</span><span id="init-334"><a href="#init-334"><span class="linenos">334</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-335"><a href="#init-335"><span class="linenos">335</span></a>            <span class="n">commit_count</span> <span class="o">=</span> <span class="mi">0</span>
-</span><span id="init-336"><a href="#init-336"><span class="linenos">336</span></a>        <span class="k">else</span><span class="p">:</span>
-</span><span id="init-337"><a href="#init-337"><span class="linenos">337</span></a>            <span class="c1"># Get the total number of commits in the default branch</span>
-</span><span id="init-338"><a href="#init-338"><span class="linenos">338</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-339"><a href="#init-339"><span class="linenos">339</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-340"><a href="#init-340"><span class="linenos">340</span></a>    <span class="k">else</span><span class="p">:</span>
-</span><span id="init-341"><a href="#init-341"><span class="linenos">341</span></a>        <span class="c1"># local repo, create the directories and init</span>
-</span><span id="init-342"><a href="#init-342"><span class="linenos">342</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-343"><a href="#init-343"><span class="linenos">343</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-344"><a href="#init-344"><span class="linenos">344</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-345"><a href="#init-345"><span class="linenos">345</span></a>        <span class="n">commit_count</span> <span class="o">=</span> <span class="mi">0</span>
-</span><span id="init-346"><a href="#init-346"><span class="linenos">346</span></a>
-</span><span id="init-347"><a href="#init-347"><span class="linenos">347</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-348"><a href="#init-348"><span class="linenos">348</span></a>    <span class="c1"># initialise empty repos</span>
-</span><span id="init-349"><a href="#init-349"><span class="linenos">349</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-350"><a href="#init-350"><span class="linenos">350</span></a>        <span class="c1"># create initial commit</span>
-</span><span id="init-351"><a href="#init-351"><span class="linenos">351</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-352"><a href="#init-352"><span class="linenos">352</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-353"><a href="#init-353"><span class="linenos">353</span></a>            <span class="n">file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span>
-</span><span id="init-354"><a href="#init-354"><span class="linenos">354</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-355"><a href="#init-355"><span class="linenos">355</span></a>            <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">add</span><span class="p">([</span><span class="n">initial_file_path</span><span class="p">])</span>
-</span><span id="init-357"><a href="#init-357"><span class="linenos">357</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-358"><a href="#init-358"><span class="linenos">358</span></a>        <span class="n">commit_count</span> <span class="o">=</span> <span class="mi">1</span>
-</span><span id="init-359"><a href="#init-359"><span class="linenos">359</span></a>
-</span><span id="init-360"><a href="#init-360"><span class="linenos">360</span></a>    <span class="c1"># Checkout the phens default branch, creating it if it does not exist</span>
-</span><span id="init-361"><a href="#init-361"><span class="linenos">361</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-362"><a href="#init-362"><span class="linenos">362</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-363"><a href="#init-363"><span class="linenos">363</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-364"><a href="#init-364"><span class="linenos">364</span></a>    <span class="k">else</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">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-366"><a href="#init-366"><span class="linenos">366</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-367"><a href="#init-367"><span class="linenos">367</span></a>
-</span><span id="init-368"><a href="#init-368"><span class="linenos">368</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-369"><a href="#init-369"><span class="linenos">369</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-370"><a href="#init-370"><span class="linenos">370</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-371"><a href="#init-371"><span class="linenos">371</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-372"><a href="#init-372"><span class="linenos">372</span></a>        <span class="k">return</span>
-</span><span id="init-373"><a href="#init-373"><span class="linenos">373</span></a>
-</span><span id="init-374"><a href="#init-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 class="s2">&quot;Creating phen directory structure and config files&quot;</span><span class="p">)</span>
-</span><span id="init-375"><a href="#init-375"><span class="linenos">375</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-376"><a href="#init-376"><span class="linenos">376</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-377"><a href="#init-377"><span class="linenos">377</span></a>
-</span><span id="init-378"><a href="#init-378"><span class="linenos">378</span></a>    <span class="c1"># create empty phen config file</span>
-</span><span id="init-379"><a href="#init-379"><span class="linenos">379</span></a>    <span class="n">config</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="init-380"><a href="#init-380"><span class="linenos">380</span></a>        <span class="s2">&quot;phenotype&quot;</span><span class="p">:</span> <span class="p">{</span>
-</span><span id="init-381"><a href="#init-381"><span class="linenos">381</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-382"><a href="#init-382"><span class="linenos">382</span></a>            <span class="s2">&quot;omop&quot;</span><span class="p">:</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_id&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_name&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="s2">&quot;vocabulary_reference&quot;</span><span class="p">:</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
-</span><span id="init-386"><a href="#init-386"><span class="linenos">386</span></a>            <span class="p">},</span>
-</span><span id="init-387"><a href="#init-387"><span class="linenos">387</span></a>            <span class="s2">&quot;translate&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="s2">&quot;concept_sets&quot;</span><span class="p">:</span> <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 class="p">}</span>
-</span><span id="init-391"><a href="#init-391"><span class="linenos">391</span></a>
-</span><span id="init-392"><a href="#init-392"><span class="linenos">392</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-393"><a href="#init-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="init-394"><a href="#init-394"><span class="linenos">394</span></a>            <span class="n">config</span><span class="p">,</span>
-</span><span id="init-395"><a href="#init-395"><span class="linenos">395</span></a>            <span class="n">file</span><span class="p">,</span>
-</span><span id="init-396"><a href="#init-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="init-397"><a href="#init-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="init-398"><a href="#init-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="init-399"><a href="#init-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="init-400"><a href="#init-400"><span class="linenos">400</span></a>        <span class="p">)</span>
-</span><span id="init-401"><a href="#init-401"><span class="linenos">401</span></a>
-</span><span id="init-402"><a href="#init-402"><span class="linenos">402</span></a>    <span class="c1"># add git ignore</span>
-</span><span id="init-403"><a href="#init-403"><span class="linenos">403</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-404"><a href="#init-404"><span class="linenos">404</span></a><span class="s2">*.db</span>
-</span><span id="init-405"><a href="#init-405"><span class="linenos">405</span></a><span class="s2">*.sqlite3</span>
-</span><span id="init-406"><a href="#init-406"><span class="linenos">406</span></a><span class="s2"> </span>
-</span><span id="init-407"><a href="#init-407"><span class="linenos">407</span></a><span class="s2"># Ignore SQLite journal and metadata files</span>
-</span><span id="init-408"><a href="#init-408"><span class="linenos">408</span></a><span class="s2">*.db-journal</span>
-</span><span id="init-409"><a href="#init-409"><span class="linenos">409</span></a><span class="s2">*.sqlite3-journal</span>
-</span><span id="init-410"><a href="#init-410"><span class="linenos">410</span></a>
-</span><span id="init-411"><a href="#init-411"><span class="linenos">411</span></a><span class="s2"># python</span>
-</span><span id="init-412"><a href="#init-412"><span class="linenos">412</span></a><span class="s2">.ipynb_checkpoints</span>
-</span><span id="init-413"><a href="#init-413"><span class="linenos">413</span></a><span class="s2"> &quot;&quot;&quot;</span>
-</span><span id="init-414"><a href="#init-414"><span class="linenos">414</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-415"><a href="#init-415"><span class="linenos">415</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-416"><a href="#init-416"><span class="linenos">416</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-417"><a href="#init-417"><span class="linenos">417</span></a>
-</span><span id="init-418"><a href="#init-418"><span class="linenos">418</span></a>    <span class="c1"># add to git repo and commit</span>
-</span><span id="init-419"><a href="#init-419"><span class="linenos">419</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-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="n">phen_path</span> <span class="o">/</span> <span class="n">d</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">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-422"><a href="#init-422"><span class="linenos">422</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-423"><a href="#init-423"><span class="linenos">423</span></a>
-</span><span id="init-424"><a href="#init-424"><span class="linenos">424</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>
+            <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>
 
 
@@ -2378,117 +2374,117 @@
 
     </div>
     <a class="headerlink" href="#validate"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="validate-427"><a href="#validate-427"><span class="linenos">427</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-428"><a href="#validate-428"><span class="linenos">428</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-429"><a href="#validate-429"><span class="linenos">429</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-430"><a href="#validate-430"><span class="linenos">430</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-431"><a href="#validate-431"><span class="linenos">431</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-432"><a href="#validate-432"><span class="linenos">432</span></a>        <span class="k">raise</span> <span class="ne">NotADirectoryError</span><span class="p">(</span>
-</span><span id="validate-433"><a href="#validate-433"><span class="linenos">433</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-434"><a href="#validate-434"><span class="linenos">434</span></a>        <span class="p">)</span>
-</span><span id="validate-435"><a href="#validate-435"><span class="linenos">435</span></a>
-</span><span id="validate-436"><a href="#validate-436"><span class="linenos">436</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-437"><a href="#validate-437"><span class="linenos">437</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-438"><a href="#validate-438"><span class="linenos">438</span></a>        <span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span>
-</span><span id="validate-439"><a href="#validate-439"><span class="linenos">439</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-440"><a href="#validate-440"><span class="linenos">440</span></a>        <span class="p">)</span>
-</span><span id="validate-441"><a href="#validate-441"><span class="linenos">441</span></a>
-</span><span id="validate-442"><a href="#validate-442"><span class="linenos">442</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-443"><a href="#validate-443"><span class="linenos">443</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-444"><a href="#validate-444"><span class="linenos">444</span></a>        <span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span>
-</span><span id="validate-445"><a href="#validate-445"><span class="linenos">445</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-446"><a href="#validate-446"><span class="linenos">446</span></a>        <span class="p">)</span>
-</span><span id="validate-447"><a href="#validate-447"><span class="linenos">447</span></a>
-</span><span id="validate-448"><a href="#validate-448"><span class="linenos">448</span></a>    <span class="c1"># Calidate the directory is a git repo</span>
-</span><span id="validate-449"><a href="#validate-449"><span class="linenos">449</span></a>    <span class="k">try</span><span class="p">:</span>
-</span><span id="validate-450"><a href="#validate-450"><span class="linenos">450</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-451"><a href="#validate-451"><span class="linenos">451</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-452"><a href="#validate-452"><span class="linenos">452</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-453"><a href="#validate-453"><span class="linenos">453</span></a>
-</span><span id="validate-454"><a href="#validate-454"><span class="linenos">454</span></a>    <span class="c1"># Load configuration File</span>
-</span><span id="validate-455"><a href="#validate-455"><span class="linenos">455</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;.yaml&quot;</span><span class="p">:</span>
-</span><span id="validate-456"><a href="#validate-456"><span class="linenos">456</span></a>        <span class="k">try</span><span class="p">:</span>
-</span><span id="validate-457"><a href="#validate-457"><span class="linenos">457</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-458"><a href="#validate-458"><span class="linenos">458</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-459"><a href="#validate-459"><span class="linenos">459</span></a>
-</span><span id="validate-460"><a href="#validate-460"><span class="linenos">460</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-461"><a href="#validate-461"><span class="linenos">461</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-462"><a href="#validate-462"><span class="linenos">462</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-463"><a href="#validate-463"><span class="linenos">463</span></a>            <span class="k">else</span><span class="p">:</span>
-</span><span id="validate-464"><a href="#validate-464"><span class="linenos">464</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-465"><a href="#validate-465"><span class="linenos">465</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-466"><a href="#validate-466"><span class="linenos">466</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-467"><a href="#validate-467"><span class="linenos">467</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-468"><a href="#validate-468"><span class="linenos">468</span></a>            <span class="k">raise</span> <span class="n">e</span>
-</span><span id="validate-469"><a href="#validate-469"><span class="linenos">469</span></a>    <span class="k">else</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">Exception</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;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-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"># initiatise</span>
-</span><span id="validate-475"><a href="#validate-475"><span class="linenos">475</span></a>    <span class="n">validation_errors</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="validate-476"><a href="#validate-476"><span class="linenos">476</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-477"><a href="#validate-477"><span class="linenos">477</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-478"><a href="#validate-478"><span class="linenos">478</span></a>
-</span><span id="validate-479"><a href="#validate-479"><span class="linenos">479</span></a>    <span class="c1"># check the version number is of the format vn.n.n</span>
-</span><span id="validate-480"><a href="#validate-480"><span class="linenos">480</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-481"><a href="#validate-481"><span class="linenos">481</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-482"><a href="#validate-482"><span class="linenos">482</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-483"><a href="#validate-483"><span class="linenos">483</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-484"><a href="#validate-484"><span class="linenos">484</span></a>        <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="c1"># create a list of all the concept set names defined in the concept set configuration</span>
-</span><span id="validate-487"><a href="#validate-487"><span class="linenos">487</span></a>    <span class="n">concept_set_names</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="validate-488"><a href="#validate-488"><span class="linenos">488</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-489"><a href="#validate-489"><span class="linenos">489</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-490"><a href="#validate-490"><span class="linenos">490</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-491"><a href="#validate-491"><span class="linenos">491</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-492"><a href="#validate-492"><span class="linenos">492</span></a>            <span class="p">)</span>
-</span><span id="validate-493"><a href="#validate-493"><span class="linenos">493</span></a>        <span class="k">else</span><span class="p">:</span>
-</span><span id="validate-494"><a href="#validate-494"><span class="linenos">494</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-495"><a href="#validate-495"><span class="linenos">495</span></a>
-</span><span id="validate-496"><a href="#validate-496"><span class="linenos">496</span></a>    <span class="c1"># check codes definition</span>
-</span><span id="validate-497"><a href="#validate-497"><span class="linenos">497</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-498"><a href="#validate-498"><span class="linenos">498</span></a>        <span class="c1"># check concepte code file exists</span>
-</span><span id="validate-499"><a href="#validate-499"><span class="linenos">499</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-500"><a href="#validate-500"><span class="linenos">500</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-501"><a href="#validate-501"><span class="linenos">501</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-502"><a href="#validate-502"><span class="linenos">502</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-503"><a href="#validate-503"><span class="linenos">503</span></a>            <span class="p">)</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 concepte code file is not empty</span>
-</span><span id="validate-506"><a href="#validate-506"><span class="linenos">506</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-507"><a href="#validate-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="validate-508"><a href="#validate-508"><span class="linenos">508</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-509"><a href="#validate-509"><span class="linenos">509</span></a>            <span class="p">)</span>
-</span><span id="validate-510"><a href="#validate-510"><span class="linenos">510</span></a>
-</span><span id="validate-511"><a href="#validate-511"><span class="linenos">511</span></a>        <span class="c1"># check code file type is supported</span>
-</span><span id="validate-512"><a href="#validate-512"><span class="linenos">512</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-513"><a href="#validate-513"><span class="linenos">513</span></a>            <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
-</span><span id="validate-514"><a href="#validate-514"><span class="linenos">514</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-515"><a href="#validate-515"><span class="linenos">515</span></a>            <span class="p">)</span>
-</span><span id="validate-516"><a href="#validate-516"><span class="linenos">516</span></a>
-</span><span id="validate-517"><a href="#validate-517"><span class="linenos">517</span></a>        <span class="c1"># check columns specified are a supported medical coding type</span>
-</span><span id="validate-518"><a href="#validate-518"><span class="linenos">518</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-519"><a href="#validate-519"><span class="linenos">519</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-520"><a href="#validate-520"><span class="linenos">520</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-521"><a href="#validate-521"><span class="linenos">521</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-522"><a href="#validate-522"><span class="linenos">522</span></a>                <span class="p">)</span>
-</span><span id="validate-523"><a href="#validate-523"><span class="linenos">523</span></a>
-</span><span id="validate-524"><a href="#validate-524"><span class="linenos">524</span></a>        <span class="c1"># check the actions are supported</span>
-</span><span id="validate-525"><a href="#validate-525"><span class="linenos">525</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-526"><a href="#validate-526"><span class="linenos">526</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-527"><a href="#validate-527"><span class="linenos">527</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-528"><a href="#validate-528"><span class="linenos">528</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-529"><a href="#validate-529"><span class="linenos">529</span></a>
-</span><span id="validate-530"><a href="#validate-530"><span class="linenos">530</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-531"><a href="#validate-531"><span class="linenos">531</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-532"><a href="#validate-532"><span class="linenos">532</span></a>        <span class="k">raise</span> <span class="n">PhenValidationException</span><span class="p">(</span>
-</span><span id="validate-533"><a href="#validate-533"><span class="linenos">533</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-534"><a href="#validate-534"><span class="linenos">534</span></a>            <span class="n">validation_errors</span><span class="p">,</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="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-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;.yaml&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>
 </span></pre></div>
 
 
@@ -2508,27 +2504,27 @@
 
     </div>
     <a class="headerlink" href="#read_table_file"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="read_table_file-540"><a href="#read_table_file-540"><span class="linenos">540</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-541"><a href="#read_table_file-541"><span class="linenos">541</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;</span>
-</span><span id="read_table_file-542"><a href="#read_table_file-542"><span class="linenos">542</span></a><span class="sd">    Load Code List File</span>
-</span><span id="read_table_file-543"><a href="#read_table_file-543"><span class="linenos">543</span></a><span class="sd">    &quot;&quot;&quot;</span>
-</span><span id="read_table_file-544"><a href="#read_table_file-544"><span class="linenos">544</span></a>
-</span><span id="read_table_file-545"><a href="#read_table_file-545"><span class="linenos">545</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-546"><a href="#read_table_file-546"><span class="linenos">546</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-547"><a href="#read_table_file-547"><span class="linenos">547</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-548"><a href="#read_table_file-548"><span class="linenos">548</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-549"><a href="#read_table_file-549"><span class="linenos">549</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-550"><a href="#read_table_file-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">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-551"><a href="#read_table_file-551"><span class="linenos">551</span></a>        <span class="k">else</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="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-553"><a href="#read_table_file-553"><span class="linenos">553</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-554"><a href="#read_table_file-554"><span class="linenos">554</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-555"><a href="#read_table_file-555"><span class="linenos">555</span></a>    <span class="k">else</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="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
-</span><span id="read_table_file-557"><a href="#read_table_file-557"><span class="linenos">557</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-558"><a href="#read_table_file-558"><span class="linenos">558</span></a>        <span class="p">)</span>
-</span><span id="read_table_file-559"><a href="#read_table_file-559"><span class="linenos">559</span></a>
-</span><span id="read_table_file-560"><a href="#read_table_file-560"><span class="linenos">560</span></a>    <span class="k">return</span> <span class="n">df</span>
+            <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>
 
 
@@ -2548,29 +2544,29 @@
 
     </div>
     <a class="headerlink" href="#process_actions"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="process_actions-563"><a href="#process_actions-563"><span class="linenos">563</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-564"><a href="#process_actions-564"><span class="linenos">564</span></a>    <span class="c1"># Perform Structural Changes to file before preprocessing</span>
-</span><span id="process_actions-565"><a href="#process_actions-565"><span class="linenos">565</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-566"><a href="#process_actions-566"><span class="linenos">566</span></a>    <span class="k">if</span> <span class="p">(</span>
-</span><span id="process_actions-567"><a href="#process_actions-567"><span class="linenos">567</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-568"><a href="#process_actions-568"><span class="linenos">568</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-569"><a href="#process_actions-569"><span class="linenos">569</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-570"><a href="#process_actions-570"><span class="linenos">570</span></a>    <span class="p">):</span>
-</span><span id="process_actions-571"><a href="#process_actions-571"><span class="linenos">571</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-572"><a href="#process_actions-572"><span class="linenos">572</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-573"><a href="#process_actions-573"><span class="linenos">573</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-574"><a href="#process_actions-574"><span class="linenos">574</span></a>            <span class="s2">&quot;Action: Splitting&quot;</span><span class="p">,</span>
-</span><span id="process_actions-575"><a href="#process_actions-575"><span class="linenos">575</span></a>            <span class="n">split_col</span><span class="p">,</span>
-</span><span id="process_actions-576"><a href="#process_actions-576"><span class="linenos">576</span></a>            <span class="s2">&quot;column into:&quot;</span><span class="p">,</span>
-</span><span id="process_actions-577"><a href="#process_actions-577"><span class="linenos">577</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-578"><a href="#process_actions-578"><span class="linenos">578</span></a>        <span class="p">)</span>
-</span><span id="process_actions-579"><a href="#process_actions-579"><span class="linenos">579</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-580"><a href="#process_actions-580"><span class="linenos">580</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-581"><a href="#process_actions-581"><span class="linenos">581</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-582"><a href="#process_actions-582"><span class="linenos">582</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-583"><a href="#process_actions-583"><span class="linenos">583</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-584"><a href="#process_actions-584"><span class="linenos">584</span></a>
-</span><span id="process_actions-585"><a href="#process_actions-585"><span class="linenos">585</span></a>    <span class="k">return</span> <span class="n">df</span>
+            <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>
 
 
@@ -2588,46 +2584,46 @@
 
     </div>
     <a class="headerlink" href="#preprocess_source_concepts"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="preprocess_source_concepts-589"><a href="#preprocess_source_concepts-589"><span class="linenos">589</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-590"><a href="#preprocess_source_concepts-590"><span class="linenos">590</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-591"><a href="#preprocess_source_concepts-591"><span class="linenos">591</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-592"><a href="#preprocess_source_concepts-592"><span class="linenos">592</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-593"><a href="#preprocess_source_concepts-593"><span class="linenos">593</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-594"><a href="#preprocess_source_concepts-594"><span class="linenos">594</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-595"><a href="#preprocess_source_concepts-595"><span class="linenos">595</span></a>
-</span><span id="preprocess_source_concepts-596"><a href="#preprocess_source_concepts-596"><span class="linenos">596</span></a>    <span class="c1"># remove unnamed columns due to extra commas, missing headers, or incorrect parsing</span>
-</span><span id="preprocess_source_concepts-597"><a href="#preprocess_source_concepts-597"><span class="linenos">597</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-598"><a href="#preprocess_source_concepts-598"><span class="linenos">598</span></a>
-</span><span id="preprocess_source_concepts-599"><a href="#preprocess_source_concepts-599"><span class="linenos">599</span></a>    <span class="c1"># Preprocess codes</span>
-</span><span id="preprocess_source_concepts-600"><a href="#preprocess_source_concepts-600"><span class="linenos">600</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-601"><a href="#preprocess_source_concepts-601"><span class="linenos">601</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-602"><a href="#preprocess_source_concepts-602"><span class="linenos">602</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-603"><a href="#preprocess_source_concepts-603"><span class="linenos">603</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-604"><a href="#preprocess_source_concepts-604"><span class="linenos">604</span></a>
-</span><span id="preprocess_source_concepts-605"><a href="#preprocess_source_concepts-605"><span class="linenos">605</span></a>        <span class="c1"># get codes by column name</span>
-</span><span id="preprocess_source_concepts-606"><a href="#preprocess_source_concepts-606"><span class="linenos">606</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-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">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-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">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-609"><a href="#preprocess_source_concepts-609"><span class="linenos">609</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-610"><a href="#preprocess_source_concepts-610"><span class="linenos">610</span></a>
-</span><span id="preprocess_source_concepts-611"><a href="#preprocess_source_concepts-611"><span class="linenos">611</span></a>        <span class="c1"># process codes, validating them using parser and returning the errors</span>
-</span><span id="preprocess_source_concepts-612"><a href="#preprocess_source_concepts-612"><span class="linenos">612</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-613"><a href="#preprocess_source_concepts-613"><span class="linenos">613</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-614"><a href="#preprocess_source_concepts-614"><span class="linenos">614</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-615"><a href="#preprocess_source_concepts-615"><span class="linenos">615</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-616"><a href="#preprocess_source_concepts-616"><span class="linenos">616</span></a>
-</span><span id="preprocess_source_concepts-617"><a href="#preprocess_source_concepts-617"><span class="linenos">617</span></a>        <span class="c1"># add processed codes to df</span>
-</span><span id="preprocess_source_concepts-618"><a href="#preprocess_source_concepts-618"><span class="linenos">618</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-619"><a href="#preprocess_source_concepts-619"><span class="linenos">619</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-620"><a href="#preprocess_source_concepts-620"><span class="linenos">620</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-621"><a href="#preprocess_source_concepts-621"><span class="linenos">621</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-622"><a href="#preprocess_source_concepts-622"><span class="linenos">622</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-623"><a href="#preprocess_source_concepts-623"><span class="linenos">623</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-624"><a href="#preprocess_source_concepts-624"><span class="linenos">624</span></a>        <span class="p">)</span>
-</span><span id="preprocess_source_concepts-625"><a href="#preprocess_source_concepts-625"><span class="linenos">625</span></a>
-</span><span id="preprocess_source_concepts-626"><a href="#preprocess_source_concepts-626"><span class="linenos">626</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-627"><a href="#preprocess_source_concepts-627"><span class="linenos">627</span></a>
-</span><span id="preprocess_source_concepts-628"><a href="#preprocess_source_concepts-628"><span class="linenos">628</span></a>    <span class="k">return</span> <span class="n">out</span><span class="p">,</span> <span class="n">code_errors</span>
+            <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>
 
 
@@ -2647,8 +2643,8 @@
 
     </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-631"><a href="#get_code_type_from_col_name-631"><span class="linenos">631</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-632"><a href="#get_code_type_from_col_name-632"><span class="linenos">632</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>
+            <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>
 
 
@@ -2666,69 +2662,68 @@
 
     </div>
     <a class="headerlink" href="#translate_codes"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="translate_codes-636"><a href="#translate_codes-636"><span class="linenos">636</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-637"><a href="#translate_codes-637"><span class="linenos">637</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-638"><a href="#translate_codes-638"><span class="linenos">638</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-639"><a href="#translate_codes-639"><span class="linenos">639</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-640"><a href="#translate_codes-640"><span class="linenos">640</span></a>
-</span><span id="translate_codes-641"><a href="#translate_codes-641"><span class="linenos">641</span></a>    <span class="c1"># codes = pd.DataFrame([], dtype=str)</span>
-</span><span id="translate_codes-642"><a href="#translate_codes-642"><span class="linenos">642</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-643"><a href="#translate_codes-643"><span class="linenos">643</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-644"><a href="#translate_codes-644"><span class="linenos">644</span></a>    <span class="p">)</span>
-</span><span id="translate_codes-645"><a href="#translate_codes-645"><span class="linenos">645</span></a>    <span class="c1"># Convert codes to target type</span>
-</span><span id="translate_codes-646"><a href="#translate_codes-646"><span class="linenos">646</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-647"><a href="#translate_codes-647"><span class="linenos">647</span></a>
-</span><span id="translate_codes-648"><a href="#translate_codes-648"><span class="linenos">648</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-649"><a href="#translate_codes-649"><span class="linenos">649</span></a>
-</span><span id="translate_codes-650"><a href="#translate_codes-650"><span class="linenos">650</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-651"><a href="#translate_codes-651"><span class="linenos">651</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-652"><a href="#translate_codes-652"><span class="linenos">652</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-653"><a href="#translate_codes-653"><span class="linenos">653</span></a>                <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;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-655"><a href="#translate_codes-655"><span class="linenos">655</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-656"><a href="#translate_codes-656"><span class="linenos">656</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-657"><a href="#translate_codes-657"><span class="linenos">657</span></a>                <span class="p">}</span>
-</span><span id="translate_codes-658"><a href="#translate_codes-658"><span class="linenos">658</span></a>            <span class="p">)</span>
-</span><span id="translate_codes-659"><a href="#translate_codes-659"><span class="linenos">659</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-660"><a href="#translate_codes-660"><span class="linenos">660</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-661"><a href="#translate_codes-661"><span class="linenos">661</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-662"><a href="#translate_codes-662"><span class="linenos">662</span></a>            <span class="p">)</span>
-</span><span id="translate_codes-663"><a href="#translate_codes-663"><span class="linenos">663</span></a>        <span class="k">else</span><span class="p">:</span>
-</span><span id="translate_codes-664"><a href="#translate_codes-664"><span class="linenos">664</span></a>            <span class="c1"># get the translation filename using source to target code types</span>
-</span><span id="translate_codes-665"><a href="#translate_codes-665"><span class="linenos">665</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-666"><a href="#translate_codes-666"><span class="linenos">666</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-667"><a href="#translate_codes-667"><span class="linenos">667</span></a>
-</span><span id="translate_codes-668"><a href="#translate_codes-668"><span class="linenos">668</span></a>            <span class="c1"># do the mapping if it exists</span>
-</span><span id="translate_codes-669"><a href="#translate_codes-669"><span class="linenos">669</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-670"><a href="#translate_codes-670"><span class="linenos">670</span></a>                <span class="c1"># get mapping</span>
-</span><span id="translate_codes-671"><a href="#translate_codes-671"><span class="linenos">671</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-672"><a href="#translate_codes-672"><span class="linenos">672</span></a>
-</span><span id="translate_codes-673"><a href="#translate_codes-673"><span class="linenos">673</span></a>                <span class="c1"># do mapping</span>
-</span><span id="translate_codes-674"><a href="#translate_codes-674"><span class="linenos">674</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-675"><a href="#translate_codes-675"><span class="linenos">675</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-676"><a href="#translate_codes-676"><span class="linenos">676</span></a>                <span class="p">)</span>
-</span><span id="translate_codes-677"><a href="#translate_codes-677"><span class="linenos">677</span></a>
-</span><span id="translate_codes-678"><a href="#translate_codes-678"><span class="linenos">678</span></a>                <span class="c1"># normalise the output</span>
-</span><span id="translate_codes-679"><a href="#translate_codes-679"><span class="linenos">679</span></a>                <span class="n">translated_df</span><span class="o">.</span><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;CONCEPT&quot;</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">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-681"><a href="#translate_codes-681"><span class="linenos">681</span></a>
-</span><span id="translate_codes-682"><a href="#translate_codes-682"><span class="linenos">682</span></a>                <span class="c1"># add to list of codes</span>
-</span><span id="translate_codes-683"><a href="#translate_codes-683"><span class="linenos">683</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-684"><a href="#translate_codes-684"><span class="linenos">684</span></a>
-</span><span id="translate_codes-685"><a href="#translate_codes-685"><span class="linenos">685</span></a>            <span class="k">else</span><span class="p">:</span>
-</span><span id="translate_codes-686"><a href="#translate_codes-686"><span class="linenos">686</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-687"><a href="#translate_codes-687"><span class="linenos">687</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-688"><a href="#translate_codes-688"><span class="linenos">688</span></a>                <span class="p">)</span>
+            <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>
+</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="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-691"><a href="#translate_codes-691"><span class="linenos">691</span></a>
-</span><span id="translate_codes-692"><a href="#translate_codes-692"><span class="linenos">692</span></a>    <span class="c1"># added concept set type to output if any translations</span>
-</span><span id="translate_codes-693"><a href="#translate_codes-693"><span class="linenos">693</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-694"><a href="#translate_codes-694"><span class="linenos">694</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-695"><a href="#translate_codes-695"><span class="linenos">695</span></a>    <span class="k">else</span><span class="p">:</span>
-</span><span id="translate_codes-696"><a href="#translate_codes-696"><span class="linenos">696</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-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="k">return</span> <span class="n">codes</span>
+</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></pre></div>
 
 
@@ -2748,16 +2743,16 @@
 
     </div>
     <a class="headerlink" href="#sql_row_exist"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="sql_row_exist-701"><a href="#sql_row_exist-701"><span class="linenos">701</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-702"><a href="#sql_row_exist-702"><span class="linenos">702</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-703"><a href="#sql_row_exist-703"><span class="linenos">703</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-704"><a href="#sql_row_exist-704"><span class="linenos">704</span></a>    <span class="c1"># Execute and check if a result exists</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">conn</span><span class="o">.</span><span class="n">cursor</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">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-707"><a href="#sql_row_exist-707"><span class="linenos">707</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-708"><a href="#sql_row_exist-708"><span class="linenos">708</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-709"><a href="#sql_row_exist-709"><span class="linenos">709</span></a>
-</span><span id="sql_row_exist-710"><a href="#sql_row_exist-710"><span class="linenos">710</span></a>    <span class="k">return</span> <span class="n">exists</span>
+            <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>
 
 
@@ -2775,22 +2770,22 @@
 
     </div>
     <a class="headerlink" href="#write_code_errors"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="write_code_errors-713"><a href="#write_code_errors-713"><span class="linenos">713</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-714"><a href="#write_code_errors-714"><span class="linenos">714</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-715"><a href="#write_code_errors-715"><span class="linenos">715</span></a>        <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="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;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-718"><a href="#write_code_errors-718"><span class="linenos">718</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-719"><a href="#write_code_errors-719"><span class="linenos">719</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-720"><a href="#write_code_errors-720"><span class="linenos">720</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-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="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-723"><a href="#write_code_errors-723"><span class="linenos">723</span></a>        <span class="p">]</span>
-</span><span id="write_code_errors-724"><a href="#write_code_errors-724"><span class="linenos">724</span></a>    <span class="p">)</span>
-</span><span id="write_code_errors-725"><a href="#write_code_errors-725"><span class="linenos">725</span></a>
-</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">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-727"><a href="#write_code_errors-727"><span class="linenos">727</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-728"><a href="#write_code_errors-728"><span class="linenos">728</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>
+            <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>
 
 
@@ -2808,43 +2803,43 @@
 
     </div>
     <a class="headerlink" href="#write_vocab_version"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="write_vocab_version-731"><a href="#write_vocab_version-731"><span class="linenos">731</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-732"><a href="#write_vocab_version-732"><span class="linenos">732</span></a>    <span class="c1"># write the vocab version files</span>
-</span><span id="write_vocab_version-733"><a href="#write_vocab_version-733"><span class="linenos">733</span></a>
-</span><span id="write_vocab_version-734"><a href="#write_vocab_version-734"><span class="linenos">734</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-735"><a href="#write_vocab_version-735"><span class="linenos">735</span></a>        <span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span>
-</span><span id="write_vocab_version-736"><a href="#write_vocab_version-736"><span class="linenos">736</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-737"><a href="#write_vocab_version-737"><span class="linenos">737</span></a>        <span class="p">)</span>
-</span><span id="write_vocab_version-738"><a href="#write_vocab_version-738"><span class="linenos">738</span></a>
-</span><span id="write_vocab_version-739"><a href="#write_vocab_version-739"><span class="linenos">739</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-740"><a href="#write_vocab_version-740"><span class="linenos">740</span></a>        <span class="k">raise</span> <span class="ne">FileNotFoundError</span><span class="p">(</span>
-</span><span id="write_vocab_version-741"><a href="#write_vocab_version-741"><span class="linenos">741</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-742"><a href="#write_vocab_version-742"><span class="linenos">742</span></a>        <span class="p">)</span>
-</span><span id="write_vocab_version-743"><a href="#write_vocab_version-743"><span class="linenos">743</span></a>
-</span><span id="write_vocab_version-744"><a href="#write_vocab_version-744"><span class="linenos">744</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-745"><a href="#write_vocab_version-745"><span class="linenos">745</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-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">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-748"><a href="#write_vocab_version-748"><span class="linenos">748</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-749"><a href="#write_vocab_version-749"><span class="linenos">749</span></a>
-</span><span id="write_vocab_version-750"><a href="#write_vocab_version-750"><span class="linenos">750</span></a>    <span class="c1"># Create the combined YAML structure</span>
-</span><span id="write_vocab_version-751"><a href="#write_vocab_version-751"><span class="linenos">751</span></a>    <span class="n">version_data</span> <span class="o">=</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;versions&quot;</span><span class="p">:</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;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-754"><a href="#write_vocab_version-754"><span class="linenos">754</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-755"><a href="#write_vocab_version-755"><span class="linenos">755</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-756"><a href="#write_vocab_version-756"><span class="linenos">756</span></a>        <span class="p">}</span>
-</span><span id="write_vocab_version-757"><a href="#write_vocab_version-757"><span class="linenos">757</span></a>    <span class="p">}</span>
-</span><span id="write_vocab_version-758"><a href="#write_vocab_version-758"><span class="linenos">758</span></a>
-</span><span id="write_vocab_version-759"><a href="#write_vocab_version-759"><span class="linenos">759</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-760"><a href="#write_vocab_version-760"><span class="linenos">760</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-761"><a href="#write_vocab_version-761"><span class="linenos">761</span></a>            <span class="n">version_data</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">file</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">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-764"><a href="#write_vocab_version-764"><span class="linenos">764</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-765"><a href="#write_vocab_version-765"><span class="linenos">765</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-766"><a href="#write_vocab_version-766"><span class="linenos">766</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-767"><a href="#write_vocab_version-767"><span class="linenos">767</span></a>        <span class="p">)</span>
+            <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>
+</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></pre></div>
 
 
@@ -2862,36 +2857,36 @@
 
     </div>
     <a class="headerlink" href="#map"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="map-770"><a href="#map-770"><span class="linenos">770</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-771"><a href="#map-771"><span class="linenos">771</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-772"><a href="#map-772"><span class="linenos">772</span></a>
-</span><span id="map-773"><a href="#map-773"><span class="linenos">773</span></a>    <span class="c1"># Validate configuration</span>
-</span><span id="map-774"><a href="#map-774"><span class="linenos">774</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-775"><a href="#map-775"><span class="linenos">775</span></a>
-</span><span id="map-776"><a href="#map-776"><span class="linenos">776</span></a>    <span class="c1"># initialise paths</span>
-</span><span id="map-777"><a href="#map-777"><span class="linenos">777</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-778"><a href="#map-778"><span class="linenos">778</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-779"><a href="#map-779"><span class="linenos">779</span></a>
-</span><span id="map-780"><a href="#map-780"><span class="linenos">780</span></a>    <span class="c1"># load configuration</span>
-</span><span id="map-781"><a href="#map-781"><span class="linenos">781</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-782"><a href="#map-782"><span class="linenos">782</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-783"><a href="#map-783"><span class="linenos">783</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-784"><a href="#map-784"><span class="linenos">784</span></a>
-</span><span id="map-785"><a href="#map-785"><span class="linenos">785</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-786"><a href="#map-786"><span class="linenos">786</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-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="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-789"><a href="#map-789"><span class="linenos">789</span></a>        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
-</span><span id="map-790"><a href="#map-790"><span class="linenos">790</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-791"><a href="#map-791"><span class="linenos">791</span></a>        <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="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-794"><a href="#map-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">target_code_type</span><span class="p">)</span>
-</span><span id="map-795"><a href="#map-795"><span class="linenos">795</span></a>    <span class="k">else</span><span class="p">:</span>
-</span><span id="map-796"><a href="#map-796"><span class="linenos">796</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-797"><a href="#map-797"><span class="linenos">797</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-798"><a href="#map-798"><span class="linenos">798</span></a>
-</span><span id="map-799"><a href="#map-799"><span class="linenos">799</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>
+            <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>
 
 
@@ -2909,163 +2904,162 @@
 
     </div>
     <a class="headerlink" href="#map_target_code_type"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="map_target_code_type-802"><a href="#map_target_code_type-802"><span class="linenos">802</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-803"><a href="#map_target_code_type-803"><span class="linenos">803</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-804"><a href="#map_target_code_type-804"><span class="linenos">804</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-805"><a href="#map_target_code_type-805"><span class="linenos">805</span></a>    <span class="c1"># Create output dataframe</span>
-</span><span id="map_target_code_type-806"><a href="#map_target_code_type-806"><span class="linenos">806</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-807"><a href="#map_target_code_type-807"><span class="linenos">807</span></a>    <span class="n">code_errors</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="map_target_code_type-808"><a href="#map_target_code_type-808"><span class="linenos">808</span></a>
-</span><span id="map_target_code_type-809"><a href="#map_target_code_type-809"><span class="linenos">809</span></a>    <span class="c1"># Process each folder in codes section</span>
-</span><span id="map_target_code_type-810"><a href="#map_target_code_type-810"><span class="linenos">810</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-811"><a href="#map_target_code_type-811"><span class="linenos">811</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-812"><a href="#map_target_code_type-812"><span class="linenos">812</span></a>
-</span><span id="map_target_code_type-813"><a href="#map_target_code_type-813"><span class="linenos">813</span></a>        <span class="c1"># Load code file</span>
-</span><span id="map_target_code_type-814"><a href="#map_target_code_type-814"><span class="linenos">814</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-815"><a href="#map_target_code_type-815"><span class="linenos">815</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-816"><a href="#map_target_code_type-816"><span class="linenos">816</span></a>
-</span><span id="map_target_code_type-817"><a href="#map_target_code_type-817"><span class="linenos">817</span></a>        <span class="c1"># process structural actions</span>
-</span><span id="map_target_code_type-818"><a href="#map_target_code_type-818"><span class="linenos">818</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-819"><a href="#map_target_code_type-819"><span class="linenos">819</span></a>
-</span><span id="map_target_code_type-820"><a href="#map_target_code_type-820"><span class="linenos">820</span></a>        <span class="c1"># preprocessing and validate of source concepts</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">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-822"><a href="#map_target_code_type-822"><span class="linenos">822</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-823"><a href="#map_target_code_type-823"><span class="linenos">823</span></a>            <span class="n">df</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="n">concept_set</span><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 class="n">codes_file_path</span><span class="p">,</span>
-</span><span id="map_target_code_type-826"><a href="#map_target_code_type-826"><span class="linenos">826</span></a>        <span class="p">)</span>
-</span><span id="map_target_code_type-827"><a href="#map_target_code_type-827"><span class="linenos">827</span></a>
-</span><span id="map_target_code_type-828"><a href="#map_target_code_type-828"><span class="linenos">828</span></a>        <span class="c1"># create df with just the source code columns</span>
-</span><span id="map_target_code_type-829"><a href="#map_target_code_type-829"><span class="linenos">829</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-830"><a href="#map_target_code_type-830"><span class="linenos">830</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-831"><a href="#map_target_code_type-831"><span class="linenos">831</span></a>
-</span><span id="map_target_code_type-832"><a href="#map_target_code_type-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="n">source_df</span><span class="o">.</span><span class="n">columns</span><span class="p">)</span>
-</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="n">source_df</span><span class="o">.</span><span class="n">head</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><span id="map_target_code_type-835"><a href="#map_target_code_type-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 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-836"><a href="#map_target_code_type-836"><span class="linenos">836</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-837"><a href="#map_target_code_type-837"><span class="linenos">837</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-838"><a href="#map_target_code_type-838"><span class="linenos">838</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-839"><a href="#map_target_code_type-839"><span class="linenos">839</span></a>
-</span><span id="map_target_code_type-840"><a href="#map_target_code_type-840"><span class="linenos">840</span></a>        <span class="c1"># Map source concepts codes to target codes</span>
-</span><span id="map_target_code_type-841"><a href="#map_target_code_type-841"><span class="linenos">841</span></a>        <span class="c1"># if processing a source coding list with categorical data</span>
-</span><span id="map_target_code_type-842"><a href="#map_target_code_type-842"><span class="linenos">842</span></a>        <span class="k">if</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="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-844"><a href="#map_target_code_type-844"><span class="linenos">844</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-845"><a href="#map_target_code_type-845"><span class="linenos">845</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-846"><a href="#map_target_code_type-846"><span class="linenos">846</span></a>        <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">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-848"><a href="#map_target_code_type-848"><span class="linenos">848</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-849"><a href="#map_target_code_type-849"><span class="linenos">849</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-850"><a href="#map_target_code_type-850"><span class="linenos">850</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-851"><a href="#map_target_code_type-851"><span class="linenos">851</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-852"><a href="#map_target_code_type-852"><span class="linenos">852</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-853"><a href="#map_target_code_type-853"><span class="linenos">853</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-854"><a href="#map_target_code_type-854"><span class="linenos">854</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-855"><a href="#map_target_code_type-855"><span class="linenos">855</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-856"><a href="#map_target_code_type-856"><span class="linenos">856</span></a>                        <span class="n">source_df</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="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-858"><a href="#map_target_code_type-858"><span class="linenos">858</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-859"><a href="#map_target_code_type-859"><span class="linenos">859</span></a>                    <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">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-861"><a href="#map_target_code_type-861"><span class="linenos">861</span></a>        <span class="k">else</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="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-863"><a href="#map_target_code_type-863"><span class="linenos">863</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-864"><a href="#map_target_code_type-864"><span class="linenos">864</span></a>                <span class="n">source_df</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="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-866"><a href="#map_target_code_type-866"><span class="linenos">866</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-867"><a href="#map_target_code_type-867"><span class="linenos">867</span></a>            <span class="p">)</span>
-</span><span id="map_target_code_type-868"><a href="#map_target_code_type-868"><span class="linenos">868</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-869"><a href="#map_target_code_type-869"><span class="linenos">869</span></a>
-</span><span id="map_target_code_type-870"><a href="#map_target_code_type-870"><span class="linenos">870</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-871"><a href="#map_target_code_type-871"><span class="linenos">871</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-872"><a href="#map_target_code_type-872"><span class="linenos">872</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-873"><a href="#map_target_code_type-873"><span class="linenos">873</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-874"><a href="#map_target_code_type-874"><span class="linenos">874</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-875"><a href="#map_target_code_type-875"><span class="linenos">875</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-876"><a href="#map_target_code_type-876"><span class="linenos">876</span></a>
-</span><span id="map_target_code_type-877"><a href="#map_target_code_type-877"><span class="linenos">877</span></a>    <span class="c1"># Check there is output from processing</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">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-879"><a href="#map_target_code_type-879"><span class="linenos">879</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-880"><a href="#map_target_code_type-880"><span class="linenos">880</span></a>        <span class="k">raise</span> <span class="ne">Exception</span><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 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-882"><a href="#map_target_code_type-882"><span class="linenos">882</span></a>        <span class="p">)</span>
-</span><span id="map_target_code_type-883"><a href="#map_target_code_type-883"><span class="linenos">883</span></a>
-</span><span id="map_target_code_type-884"><a href="#map_target_code_type-884"><span class="linenos">884</span></a>    <span class="c1"># final processing</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">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-886"><a href="#map_target_code_type-886"><span class="linenos">886</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-887"><a href="#map_target_code_type-887"><span class="linenos">887</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-888"><a href="#map_target_code_type-888"><span class="linenos">888</span></a>
-</span><span id="map_target_code_type-889"><a href="#map_target_code_type-889"><span class="linenos">889</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-890"><a href="#map_target_code_type-890"><span class="linenos">890</span></a>    <span class="c1"># added metadata</span>
-</span><span id="map_target_code_type-891"><a href="#map_target_code_type-891"><span class="linenos">891</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-892"><a href="#map_target_code_type-892"><span class="linenos">892</span></a>    <span class="n">result_list</span> <span class="o">=</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="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-894"><a href="#map_target_code_type-894"><span class="linenos">894</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-895"><a href="#map_target_code_type-895"><span class="linenos">895</span></a>
-</span><span id="map_target_code_type-896"><a href="#map_target_code_type-896"><span class="linenos">896</span></a>        <span class="c1"># Filter output based on the current source_concept_type</span>
-</span><span id="map_target_code_type-897"><a href="#map_target_code_type-897"><span class="linenos">897</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-898"><a href="#map_target_code_type-898"><span class="linenos">898</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-899"><a href="#map_target_code_type-899"><span class="linenos">899</span></a>
-</span><span id="map_target_code_type-900"><a href="#map_target_code_type-900"><span class="linenos">900</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-901"><a href="#map_target_code_type-901"><span class="linenos">901</span></a>        <span class="n">remove_types</span> <span class="o">=</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="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-903"><a href="#map_target_code_type-903"><span class="linenos">903</span></a>        <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="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-905"><a href="#map_target_code_type-905"><span class="linenos">905</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-906"><a href="#map_target_code_type-906"><span class="linenos">906</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-907"><a href="#map_target_code_type-907"><span class="linenos">907</span></a>        <span class="p">)</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">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-909"><a href="#map_target_code_type-909"><span class="linenos">909</span></a>
-</span><span id="map_target_code_type-910"><a href="#map_target_code_type-910"><span class="linenos">910</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-911"><a href="#map_target_code_type-911"><span class="linenos">911</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-912"><a href="#map_target_code_type-912"><span class="linenos">912</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-913"><a href="#map_target_code_type-913"><span class="linenos">913</span></a>
-</span><span id="map_target_code_type-914"><a href="#map_target_code_type-914"><span class="linenos">914</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-915"><a href="#map_target_code_type-915"><span class="linenos">915</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-916"><a href="#map_target_code_type-916"><span class="linenos">916</span></a>        <span class="p">)</span>
+            <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"># Append the result to the result_list</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">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-920"><a href="#map_target_code_type-920"><span class="linenos">920</span></a>
-</span><span id="map_target_code_type-921"><a href="#map_target_code_type-921"><span class="linenos">921</span></a>    <span class="c1"># Concatenate all the results into a single DataFrame</span>
-</span><span id="map_target_code_type-922"><a href="#map_target_code_type-922"><span class="linenos">922</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-923"><a href="#map_target_code_type-923"><span class="linenos">923</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-924"><a href="#map_target_code_type-924"><span class="linenos">924</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-925"><a href="#map_target_code_type-925"><span class="linenos">925</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-926"><a href="#map_target_code_type-926"><span class="linenos">926</span></a>    <span class="p">)</span>
-</span><span id="map_target_code_type-927"><a href="#map_target_code_type-927"><span class="linenos">927</span></a>
-</span><span id="map_target_code_type-928"><a href="#map_target_code_type-928"><span class="linenos">928</span></a>    <span class="c1"># Save output to map directory</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">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-930"><a href="#map_target_code_type-930"><span class="linenos">930</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-931"><a href="#map_target_code_type-931"><span class="linenos">931</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-932"><a href="#map_target_code_type-932"><span class="linenos">932</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-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"># save concept sets as separate files</span>
-</span><span id="map_target_code_type-935"><a href="#map_target_code_type-935"><span class="linenos">935</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-936"><a href="#map_target_code_type-936"><span class="linenos">936</span></a>
-</span><span id="map_target_code_type-937"><a href="#map_target_code_type-937"><span class="linenos">937</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-938"><a href="#map_target_code_type-938"><span class="linenos">938</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-939"><a href="#map_target_code_type-939"><span class="linenos">939</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-940"><a href="#map_target_code_type-940"><span class="linenos">940</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-941"><a href="#map_target_code_type-941"><span class="linenos">941</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-942"><a href="#map_target_code_type-942"><span class="linenos">942</span></a>    <span class="k">else</span><span class="p">:</span>
-</span><span id="map_target_code_type-943"><a href="#map_target_code_type-943"><span class="linenos">943</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-944"><a href="#map_target_code_type-944"><span class="linenos">944</span></a>
-</span><span id="map_target_code_type-945"><a href="#map_target_code_type-945"><span class="linenos">945</span></a>    <span class="c1"># write each concept as a separate file</span>
-</span><span id="map_target_code_type-946"><a href="#map_target_code_type-946"><span class="linenos">946</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-947"><a href="#map_target_code_type-947"><span class="linenos">947</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-948"><a href="#map_target_code_type-948"><span class="linenos">948</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-949"><a href="#map_target_code_type-949"><span class="linenos">949</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-950"><a href="#map_target_code_type-950"><span class="linenos">950</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-951"><a href="#map_target_code_type-951"><span class="linenos">951</span></a>        <span class="p">)</span>  <span class="c1"># sort cols alphabetically</span>
-</span><span id="map_target_code_type-952"><a href="#map_target_code_type-952"><span class="linenos">952</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-953"><a href="#map_target_code_type-953"><span class="linenos">953</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-954"><a href="#map_target_code_type-954"><span class="linenos">954</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-955"><a href="#map_target_code_type-955"><span class="linenos">955</span></a>
-</span><span id="map_target_code_type-956"><a href="#map_target_code_type-956"><span class="linenos">956</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-957"><a href="#map_target_code_type-957"><span class="linenos">957</span></a>
-</span><span id="map_target_code_type-958"><a href="#map_target_code_type-958"><span class="linenos">958</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="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>
 
 
@@ -3083,34 +3077,34 @@
 
     </div>
     <a class="headerlink" href="#generate_version_tag"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="generate_version_tag-961"><a href="#generate_version_tag-961"><span class="linenos">961</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-962"><a href="#generate_version_tag-962"><span class="linenos">962</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-963"><a href="#generate_version_tag-963"><span class="linenos">963</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-964"><a href="#generate_version_tag-964"><span class="linenos">964</span></a>    <span class="c1"># Get all valid semantic version tags</span>
-</span><span id="generate_version_tag-965"><a href="#generate_version_tag-965"><span class="linenos">965</span></a>    <span class="n">versions</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="generate_version_tag-966"><a href="#generate_version_tag-966"><span class="linenos">966</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-967"><a href="#generate_version_tag-967"><span class="linenos">967</span></a>        <span class="n">tag_name</span> <span class="o">=</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">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-969"><a href="#generate_version_tag-969"><span class="linenos">969</span></a>        <span class="p">)</span>  <span class="c1"># Remove &#39;v&#39; if needed</span>
-</span><span id="generate_version_tag-970"><a href="#generate_version_tag-970"><span class="linenos">970</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-971"><a href="#generate_version_tag-971"><span class="linenos">971</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-972"><a href="#generate_version_tag-972"><span class="linenos">972</span></a>
-</span><span id="generate_version_tag-973"><a href="#generate_version_tag-973"><span class="linenos">973</span></a>    <span class="c1"># Determine the next version</span>
-</span><span id="generate_version_tag-974"><a href="#generate_version_tag-974"><span class="linenos">974</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-975"><a href="#generate_version_tag-975"><span class="linenos">975</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-976"><a href="#generate_version_tag-976"><span class="linenos">976</span></a>    <span class="k">else</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="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-978"><a href="#generate_version_tag-978"><span class="linenos">978</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-979"><a href="#generate_version_tag-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_major</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="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-981"><a href="#generate_version_tag-981"><span class="linenos">981</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-982"><a href="#generate_version_tag-982"><span class="linenos">982</span></a>        <span class="k">else</span><span class="p">:</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</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>
+            <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="c1"># Create the new tag</span>
-</span><span id="generate_version_tag-986"><a href="#generate_version_tag-986"><span class="linenos">986</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-987"><a href="#generate_version_tag-987"><span class="linenos">987</span></a>
-</span><span id="generate_version_tag-988"><a href="#generate_version_tag-988"><span class="linenos">988</span></a>    <span class="k">return</span> <span class="n">new_version_str</span>
+</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>
 </span></pre></div>
 
 
@@ -3128,84 +3122,84 @@
 
     </div>
     <a class="headerlink" href="#publish"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="publish-991"><a href="#publish-991"><span class="linenos"> 991</span></a><span class="k">def</span><span class="w"> </span><span class="nf">publish</span><span class="p">(</span>
-</span><span id="publish-992"><a href="#publish-992"><span class="linenos"> 992</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-993"><a href="#publish-993"><span class="linenos"> 993</span></a><span class="p">):</span>
-</span><span id="publish-994"><a href="#publish-994"><span class="linenos"> 994</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-995"><a href="#publish-995"><span class="linenos"> 995</span></a>
-</span><span id="publish-996"><a href="#publish-996"><span class="linenos"> 996</span></a>    <span class="c1"># Validate config</span>
-</span><span id="publish-997"><a href="#publish-997"><span class="linenos"> 997</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-998"><a href="#publish-998"><span class="linenos"> 998</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-999"><a href="#publish-999"><span class="linenos"> 999</span></a>
-</span><span id="publish-1000"><a href="#publish-1000"><span class="linenos">1000</span></a>    <span class="c1"># load git repo and set the branch</span>
-</span><span id="publish-1001"><a href="#publish-1001"><span class="linenos">1001</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-1002"><a href="#publish-1002"><span class="linenos">1002</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-1003"><a href="#publish-1003"><span class="linenos">1003</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-1004"><a href="#publish-1004"><span class="linenos">1004</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-1005"><a href="#publish-1005"><span class="linenos">1005</span></a>    <span class="k">else</span><span class="p">:</span>
-</span><span id="publish-1006"><a href="#publish-1006"><span class="linenos">1006</span></a>        <span class="k">raise</span> <span class="ne">AttributeError</span><span class="p">(</span>
-</span><span id="publish-1007"><a href="#publish-1007"><span class="linenos">1007</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-1008"><a href="#publish-1008"><span class="linenos">1008</span></a>        <span class="p">)</span>
-</span><span id="publish-1009"><a href="#publish-1009"><span class="linenos">1009</span></a>
-</span><span id="publish-1010"><a href="#publish-1010"><span class="linenos">1010</span></a>    <span class="c1"># check if any changes to publish</span>
-</span><span id="publish-1011"><a href="#publish-1011"><span class="linenos">1011</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-1012"><a href="#publish-1012"><span class="linenos">1012</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-1013"><a href="#publish-1013"><span class="linenos">1013</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-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="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-1016"><a href="#publish-1016"><span class="linenos">1016</span></a>            <span class="k">return</span>
-</span><span id="publish-1017"><a href="#publish-1017"><span class="linenos">1017</span></a>
-</span><span id="publish-1018"><a href="#publish-1018"><span class="linenos">1018</span></a>    <span class="c1"># get next version</span>
-</span><span id="publish-1019"><a href="#publish-1019"><span class="linenos">1019</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-1020"><a href="#publish-1020"><span class="linenos">1020</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-1021"><a href="#publish-1021"><span class="linenos">1021</span></a>
-</span><span id="publish-1022"><a href="#publish-1022"><span class="linenos">1022</span></a>    <span class="c1"># Write version in configuration file</span>
-</span><span id="publish-1023"><a href="#publish-1023"><span class="linenos">1023</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-1024"><a href="#publish-1024"><span class="linenos">1024</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-1025"><a href="#publish-1025"><span class="linenos">1025</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-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="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-1028"><a href="#publish-1028"><span class="linenos">1028</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-1029"><a href="#publish-1029"><span class="linenos">1029</span></a>        <span class="n">yaml</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span>
-</span><span id="publish-1030"><a href="#publish-1030"><span class="linenos">1030</span></a>            <span class="n">config</span><span class="p">,</span>
-</span><span id="publish-1031"><a href="#publish-1031"><span class="linenos">1031</span></a>            <span class="n">file</span><span class="p">,</span>
-</span><span id="publish-1032"><a href="#publish-1032"><span class="linenos">1032</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-1033"><a href="#publish-1033"><span class="linenos">1033</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-1034"><a href="#publish-1034"><span class="linenos">1034</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-1035"><a href="#publish-1035"><span class="linenos">1035</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-1036"><a href="#publish-1036"><span class="linenos">1036</span></a>        <span class="p">)</span>
-</span><span id="publish-1037"><a href="#publish-1037"><span class="linenos">1037</span></a>
-</span><span id="publish-1038"><a href="#publish-1038"><span class="linenos">1038</span></a>    <span class="c1"># Add and commit changes to repo including version updates</span>
-</span><span id="publish-1039"><a href="#publish-1039"><span class="linenos">1039</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-1040"><a href="#publish-1040"><span class="linenos">1040</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-1041"><a href="#publish-1041"><span class="linenos">1041</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>
+            <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>
+</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"># Add tag to the repo</span>
-</span><span id="publish-1044"><a href="#publish-1044"><span class="linenos">1044</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-1045"><a href="#publish-1045"><span class="linenos">1045</span></a>
-</span><span id="publish-1046"><a href="#publish-1046"><span class="linenos">1046</span></a>    <span class="c1"># push to origin if a remote repo</span>
-</span><span id="publish-1047"><a href="#publish-1047"><span class="linenos">1047</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-1048"><a href="#publish-1048"><span class="linenos">1048</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-1049"><a href="#publish-1049"><span class="linenos">1049</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-1050"><a href="#publish-1050"><span class="linenos">1050</span></a>
-</span><span id="publish-1051"><a href="#publish-1051"><span class="linenos">1051</span></a>    <span class="k">try</span><span class="p">:</span>
-</span><span id="publish-1052"><a href="#publish-1052"><span class="linenos">1052</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-1053"><a href="#publish-1053"><span class="linenos">1053</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-1054"><a href="#publish-1054"><span class="linenos">1054</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-1055"><a href="#publish-1055"><span class="linenos">1055</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-1056"><a href="#publish-1056"><span class="linenos">1056</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-1057"><a href="#publish-1057"><span class="linenos">1057</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-1058"><a href="#publish-1058"><span class="linenos">1058</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-1059"><a href="#publish-1059"><span class="linenos">1059</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-1060"><a href="#publish-1060"><span class="linenos">1060</span></a>        <span class="k">else</span><span class="p">:</span>
-</span><span id="publish-1061"><a href="#publish-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="s2">&quot;Remote &#39;origin&#39; is not set&quot;</span><span class="p">)</span>
-</span><span id="publish-1062"><a href="#publish-1062"><span class="linenos">1062</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-1063"><a href="#publish-1063"><span class="linenos">1063</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-1064"><a href="#publish-1064"><span class="linenos">1064</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-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">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-1066"><a href="#publish-1066"><span class="linenos">1066</span></a>        <span class="k">raise</span> <span class="n">e</span>
-</span><span id="publish-1067"><a href="#publish-1067"><span class="linenos">1067</span></a>
-</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">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-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></pre></div>
 
 
@@ -3225,40 +3219,40 @@
 
     </div>
     <a class="headerlink" href="#export"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="export-1071"><a href="#export-1071"><span class="linenos">1071</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-1072"><a href="#export-1072"><span class="linenos">1072</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-1073"><a href="#export-1073"><span class="linenos">1073</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-1074"><a href="#export-1074"><span class="linenos">1074</span></a>
-</span><span id="export-1075"><a href="#export-1075"><span class="linenos">1075</span></a>    <span class="c1"># validate configuration</span>
-</span><span id="export-1076"><a href="#export-1076"><span class="linenos">1076</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-1077"><a href="#export-1077"><span class="linenos">1077</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-1078"><a href="#export-1078"><span class="linenos">1078</span></a>
-</span><span id="export-1079"><a href="#export-1079"><span class="linenos">1079</span></a>    <span class="c1"># load configuration</span>
-</span><span id="export-1080"><a href="#export-1080"><span class="linenos">1080</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-1081"><a href="#export-1081"><span class="linenos">1081</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-1082"><a href="#export-1082"><span class="linenos">1082</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-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="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-1085"><a href="#export-1085"><span class="linenos">1085</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-1086"><a href="#export-1086"><span class="linenos">1086</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-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="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-1089"><a href="#export-1089"><span class="linenos">1089</span></a>    <span class="c1"># check export directory exists and if not create it</span>
-</span><span id="export-1090"><a href="#export-1090"><span class="linenos">1090</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-1091"><a href="#export-1091"><span class="linenos">1091</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-1092"><a href="#export-1092"><span class="linenos">1092</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-1093"><a href="#export-1093"><span class="linenos">1093</span></a>
-</span><span id="export-1094"><a href="#export-1094"><span class="linenos">1094</span></a>    <span class="c1"># omop export db</span>
-</span><span id="export-1095"><a href="#export-1095"><span class="linenos">1095</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-1096"><a href="#export-1096"><span class="linenos">1096</span></a>        <span class="n">map_path</span><span class="p">,</span>
-</span><span id="export-1097"><a href="#export-1097"><span class="linenos">1097</span></a>        <span class="n">export_path</span><span class="p">,</span>
-</span><span id="export-1098"><a href="#export-1098"><span class="linenos">1098</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-1099"><a href="#export-1099"><span class="linenos">1099</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-1100"><a href="#export-1100"><span class="linenos">1100</span></a>    <span class="p">)</span>
-</span><span id="export-1101"><a href="#export-1101"><span class="linenos">1101</span></a>
-</span><span id="export-1102"><a href="#export-1102"><span class="linenos">1102</span></a>    <span class="c1"># write to tables</span>
-</span><span id="export-1103"><a href="#export-1103"><span class="linenos">1103</span></a>    <span class="c1"># export as csv</span>
-</span><span id="export-1104"><a href="#export-1104"><span class="linenos">1104</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-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>
 </span></pre></div>
 
 
@@ -3278,52 +3272,52 @@
 
     </div>
     <a class="headerlink" href="#copy"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="copy-1107"><a href="#copy-1107"><span class="linenos">1107</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-1108"><a href="#copy-1108"><span class="linenos">1108</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-1109"><a href="#copy-1109"><span class="linenos">1109</span></a>
-</span><span id="copy-1110"><a href="#copy-1110"><span class="linenos">1110</span></a>    <span class="c1"># Validate</span>
-</span><span id="copy-1111"><a href="#copy-1111"><span class="linenos">1111</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-1112"><a href="#copy-1112"><span class="linenos">1112</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-1113"><a href="#copy-1113"><span class="linenos">1113</span></a>
-</span><span id="copy-1114"><a href="#copy-1114"><span class="linenos">1114</span></a>    <span class="c1"># Check target directory exists</span>
-</span><span id="copy-1115"><a href="#copy-1115"><span class="linenos">1115</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-1116"><a href="#copy-1116"><span class="linenos">1116</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-1117"><a href="#copy-1117"><span class="linenos">1117</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-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"># Set copy directory</span>
-</span><span id="copy-1120"><a href="#copy-1120"><span class="linenos">1120</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-1121"><a href="#copy-1121"><span class="linenos">1121</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-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="k">if</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="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-1125"><a href="#copy-1125"><span class="linenos">1125</span></a>    <span class="p">):</span>  <span class="c1"># Check if it exists and is a directory</span>
-</span><span id="copy-1126"><a href="#copy-1126"><span class="linenos">1126</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-1127"><a href="#copy-1127"><span class="linenos">1127</span></a>            <span class="n">copy_path</span><span class="p">,</span>
-</span><span id="copy-1128"><a href="#copy-1128"><span class="linenos">1128</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-1129"><a href="#copy-1129"><span class="linenos">1129</span></a>        <span class="p">)</span>
-</span><span id="copy-1130"><a href="#copy-1130"><span class="linenos">1130</span></a>    <span class="k">else</span><span class="p">:</span>
-</span><span id="copy-1131"><a href="#copy-1131"><span class="linenos">1131</span></a>        <span class="n">copy</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="copy-1132"><a href="#copy-1132"><span class="linenos">1132</span></a>
-</span><span id="copy-1133"><a href="#copy-1133"><span class="linenos">1133</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-1134"><a href="#copy-1134"><span class="linenos">1134</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-1135"><a href="#copy-1135"><span class="linenos">1135</span></a>        <span class="k">return</span>
+            <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="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-1138"><a href="#copy-1138"><span class="linenos">1138</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-1139"><a href="#copy-1139"><span class="linenos">1139</span></a>
-</span><span id="copy-1140"><a href="#copy-1140"><span class="linenos">1140</span></a>    <span class="c1"># Check out the latest commit or specified version</span>
-</span><span id="copy-1141"><a href="#copy-1141"><span class="linenos">1141</span></a>    <span class="k">if</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="c1"># Checkout a specific version (e.g., branch, tag, or commit hash)</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;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-1144"><a href="#copy-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="n">version</span><span class="p">)</span>
-</span><span id="copy-1145"><a href="#copy-1145"><span class="linenos">1145</span></a>    <span class="k">else</span><span class="p">:</span>
-</span><span id="copy-1146"><a href="#copy-1146"><span class="linenos">1146</span></a>        <span class="c1"># Checkout the latest commit (HEAD)</span>
-</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">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-1148"><a href="#copy-1148"><span class="linenos">1148</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-1149"><a href="#copy-1149"><span class="linenos">1149</span></a>
-</span><span id="copy-1150"><a href="#copy-1150"><span class="linenos">1150</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-1151"><a href="#copy-1151"><span class="linenos">1151</span></a>
-</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;Phenotype copied successfully&quot;</span><span class="p">)</span>
+</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>
+</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></pre></div>
 
 
@@ -3343,14 +3337,14 @@
 
     </div>
     <a class="headerlink" href="#extract_concepts"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="extract_concepts-1156"><a href="#extract_concepts-1156"><span class="linenos">1156</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-1157"><a href="#extract_concepts-1157"><span class="linenos">1157</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-1158"><a href="#extract_concepts-1158"><span class="linenos">1158</span></a>    <span class="n">concepts_dict</span> <span class="o">=</span> <span class="p">{</span>
-</span><span id="extract_concepts-1159"><a href="#extract_concepts-1159"><span class="linenos">1159</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-1160"><a href="#extract_concepts-1160"><span class="linenos">1160</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-1161"><a href="#extract_concepts-1161"><span class="linenos">1161</span></a>    <span class="p">}</span>
-</span><span id="extract_concepts-1162"><a href="#extract_concepts-1162"><span class="linenos">1162</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-1163"><a href="#extract_concepts-1163"><span class="linenos">1163</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-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>
 </span></pre></div>
 
 
@@ -3370,15 +3364,15 @@
 
     </div>
     <a class="headerlink" href="#extract_clean_deepdiff_keys"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="extract_clean_deepdiff_keys-1166"><a href="#extract_clean_deepdiff_keys-1166"><span class="linenos">1166</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-1167"><a href="#extract_clean_deepdiff_keys-1167"><span class="linenos">1167</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;</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">    Extracts clean keys from a DeepDiff dictionary.</span>
-</span><span id="extract_clean_deepdiff_keys-1169"><a href="#extract_clean_deepdiff_keys-1169"><span class="linenos">1169</span></a>
-</span><span id="extract_clean_deepdiff_keys-1170"><a href="#extract_clean_deepdiff_keys-1170"><span class="linenos">1170</span></a><span class="sd">    :param diff: DeepDiff result dictionary</span>
-</span><span id="extract_clean_deepdiff_keys-1171"><a href="#extract_clean_deepdiff_keys-1171"><span class="linenos">1171</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-1172"><a href="#extract_clean_deepdiff_keys-1172"><span class="linenos">1172</span></a><span class="sd">    :return: A set of clean key names</span>
-</span><span id="extract_clean_deepdiff_keys-1173"><a href="#extract_clean_deepdiff_keys-1173"><span class="linenos">1173</span></a><span class="sd">    &quot;&quot;&quot;</span>
-</span><span id="extract_clean_deepdiff_keys-1174"><a href="#extract_clean_deepdiff_keys-1174"><span class="linenos">1174</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>
+            <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>
 
 
@@ -3402,79 +3396,79 @@
 
     </div>
     <a class="headerlink" href="#diff_config"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="diff_config-1177"><a href="#diff_config-1177"><span class="linenos">1177</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-1178"><a href="#diff_config-1178"><span class="linenos">1178</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-1179"><a href="#diff_config-1179"><span class="linenos">1179</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>
+            <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="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-1182"><a href="#diff_config-1182"><span class="linenos">1182</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-1183"><a href="#diff_config-1183"><span class="linenos">1183</span></a>
-</span><span id="diff_config-1184"><a href="#diff_config-1184"><span class="linenos">1184</span></a>    <span class="c1"># Check added and removed names</span>
-</span><span id="diff_config-1185"><a href="#diff_config-1185"><span class="linenos">1185</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-1186"><a href="#diff_config-1186"><span class="linenos">1186</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-1187"><a href="#diff_config-1187"><span class="linenos">1187</span></a>
-</span><span id="diff_config-1188"><a href="#diff_config-1188"><span class="linenos">1188</span></a>    <span class="c1"># find file path changes for unchanged names</span>
-</span><span id="diff_config-1189"><a href="#diff_config-1189"><span class="linenos">1189</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-1190"><a href="#diff_config-1190"><span class="linenos">1190</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-1191"><a href="#diff_config-1191"><span class="linenos">1191</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-1192"><a href="#diff_config-1192"><span class="linenos">1192</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-1193"><a href="#diff_config-1193"><span class="linenos">1193</span></a>    <span class="p">)</span>
-</span><span id="diff_config-1194"><a href="#diff_config-1194"><span class="linenos">1194</span></a>
-</span><span id="diff_config-1195"><a href="#diff_config-1195"><span class="linenos">1195</span></a>    <span class="c1"># Find renamed concepts (same file, different name)</span>
-</span><span id="diff_config-1196"><a href="#diff_config-1196"><span class="linenos">1196</span></a>    <span class="n">renamed_concepts</span> <span class="o">=</span> <span class="p">[]</span>
-</span><span id="diff_config-1197"><a href="#diff_config-1197"><span class="linenos">1197</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-1198"><a href="#diff_config-1198"><span class="linenos">1198</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-1199"><a href="#diff_config-1199"><span class="linenos">1199</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-1200"><a href="#diff_config-1200"><span class="linenos">1200</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-1201"><a href="#diff_config-1201"><span class="linenos">1201</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-1202"><a href="#diff_config-1202"><span class="linenos">1202</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-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"># Remove renamed concepts from added and removed sets</span>
-</span><span id="diff_config-1205"><a href="#diff_config-1205"><span class="linenos">1205</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-1206"><a href="#diff_config-1206"><span class="linenos">1206</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-1207"><a href="#diff_config-1207"><span class="linenos">1207</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-1208"><a href="#diff_config-1208"><span class="linenos">1208</span></a>
-</span><span id="diff_config-1209"><a href="#diff_config-1209"><span class="linenos">1209</span></a>    <span class="c1"># generate config report</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">added_names</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">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-1212"><a href="#diff_config-1212"><span class="linenos">1212</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-1213"><a href="#diff_config-1213"><span class="linenos">1213</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-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;</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><span id="diff_config-1216"><a href="#diff_config-1216"><span class="linenos">1216</span></a>    <span class="k">if</span> <span class="n">removed_names</span><span class="p">:</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;## Removed Concepts</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 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-1219"><a href="#diff_config-1219"><span class="linenos">1219</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-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;</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><span id="diff_config-1222"><a href="#diff_config-1222"><span class="linenos">1222</span></a>    <span class="k">if</span> <span class="n">renamed_concepts</span><span class="p">:</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;## Renamed Concepts</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="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-1225"><a href="#diff_config-1225"><span class="linenos">1225</span></a>            <span class="n">report</span> <span class="o">+=</span> <span class="p">(</span>
-</span><span id="diff_config-1226"><a href="#diff_config-1226"><span class="linenos">1226</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-1227"><a href="#diff_config-1227"><span class="linenos">1227</span></a>            <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;</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><span id="diff_config-1230"><a href="#diff_config-1230"><span class="linenos">1230</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-1231"><a href="#diff_config-1231"><span class="linenos">1231</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-1232"><a href="#diff_config-1232"><span class="linenos">1232</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-1233"><a href="#diff_config-1233"><span class="linenos">1233</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-1234"><a href="#diff_config-1234"><span class="linenos">1234</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-1235"><a href="#diff_config-1235"><span class="linenos">1235</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-1236"><a href="#diff_config-1236"><span class="linenos">1236</span></a>            <span class="n">report</span> <span class="o">+=</span> <span class="p">(</span>
-</span><span id="diff_config-1237"><a href="#diff_config-1237"><span class="linenos">1237</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-1238"><a href="#diff_config-1238"><span class="linenos">1238</span></a>            <span class="p">)</span>
-</span><span id="diff_config-1239"><a href="#diff_config-1239"><span class="linenos">1239</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-1240"><a href="#diff_config-1240"><span class="linenos">1240</span></a>
-</span><span id="diff_config-1241"><a href="#diff_config-1241"><span class="linenos">1241</span></a>    <span class="k">if</span> <span class="ow">not</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">added_names</span>
-</span><span id="diff_config-1243"><a href="#diff_config-1243"><span class="linenos">1243</span></a>        <span class="ow">or</span> <span class="n">removed_names</span>
-</span><span id="diff_config-1244"><a href="#diff_config-1244"><span class="linenos">1244</span></a>        <span class="ow">or</span> <span class="n">renamed_concepts</span>
-</span><span id="diff_config-1245"><a href="#diff_config-1245"><span class="linenos">1245</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-1246"><a href="#diff_config-1246"><span class="linenos">1246</span></a>    <span class="p">):</span>
-</span><span id="diff_config-1247"><a href="#diff_config-1247"><span class="linenos">1247</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-1248"><a href="#diff_config-1248"><span class="linenos">1248</span></a>
-</span><span id="diff_config-1249"><a href="#diff_config-1249"><span class="linenos">1249</span></a>    <span class="k">return</span> <span class="n">report</span>
+</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>
+</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></pre></div>
 
 
@@ -3492,71 +3486,71 @@
 
     </div>
     <a class="headerlink" href="#diff_map_files"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="diff_map_files-1252"><a href="#diff_map_files-1252"><span class="linenos">1252</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-1253"><a href="#diff_map_files-1253"><span class="linenos">1253</span></a>    <span class="n">old_output_files</span> <span class="o">=</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="n">file</span><span class="o">.</span><span class="n">name</span>
-</span><span id="diff_map_files-1255"><a href="#diff_map_files-1255"><span class="linenos">1255</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-1256"><a href="#diff_map_files-1256"><span class="linenos">1256</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-1257"><a href="#diff_map_files-1257"><span class="linenos">1257</span></a>    <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="n">new_output_files</span> <span class="o">=</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="n">file</span><span class="o">.</span><span class="n">name</span>
-</span><span id="diff_map_files-1260"><a href="#diff_map_files-1260"><span class="linenos">1260</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-1261"><a href="#diff_map_files-1261"><span class="linenos">1261</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-1262"><a href="#diff_map_files-1262"><span class="linenos">1262</span></a>    <span class="p">]</span>
-</span><span id="diff_map_files-1263"><a href="#diff_map_files-1263"><span class="linenos">1263</span></a>
-</span><span id="diff_map_files-1264"><a href="#diff_map_files-1264"><span class="linenos">1264</span></a>    <span class="c1"># Convert the lists to sets for easy comparison</span>
-</span><span id="diff_map_files-1265"><a href="#diff_map_files-1265"><span class="linenos">1265</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-1266"><a href="#diff_map_files-1266"><span class="linenos">1266</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-1267"><a href="#diff_map_files-1267"><span class="linenos">1267</span></a>
-</span><span id="diff_map_files-1268"><a href="#diff_map_files-1268"><span class="linenos">1268</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-1269"><a href="#diff_map_files-1269"><span class="linenos">1269</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-1270"><a href="#diff_map_files-1270"><span class="linenos">1270</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-1271"><a href="#diff_map_files-1271"><span class="linenos">1271</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-1272"><a href="#diff_map_files-1272"><span class="linenos">1272</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-1273"><a href="#diff_map_files-1273"><span class="linenos">1273</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-1274"><a href="#diff_map_files-1274"><span class="linenos">1274</span></a>
-</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;</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-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;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-1277"><a href="#diff_map_files-1277"><span class="linenos">1277</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-1278"><a href="#diff_map_files-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;- 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-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;- 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-1280"><a href="#diff_map_files-1280"><span class="linenos">1280</span></a>
-</span><span id="diff_map_files-1281"><a href="#diff_map_files-1281"><span class="linenos">1281</span></a>    <span class="c1"># Step N: Compare common outputs between versions</span>
-</span><span id="diff_map_files-1282"><a href="#diff_map_files-1282"><span class="linenos">1282</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-1283"><a href="#diff_map_files-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;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-1284"><a href="#diff_map_files-1284"><span class="linenos">1284</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-1285"><a href="#diff_map_files-1285"><span class="linenos">1285</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-1286"><a href="#diff_map_files-1286"><span class="linenos">1286</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>
+            <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">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-1289"><a href="#diff_map_files-1289"><span class="linenos">1289</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-1290"><a href="#diff_map_files-1290"><span class="linenos">1290</span></a>
-</span><span id="diff_map_files-1291"><a href="#diff_map_files-1291"><span class="linenos">1291</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-1292"><a href="#diff_map_files-1292"><span class="linenos">1292</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-1293"><a href="#diff_map_files-1293"><span class="linenos">1293</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-1294"><a href="#diff_map_files-1294"><span class="linenos">1294</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-1295"><a href="#diff_map_files-1295"><span class="linenos">1295</span></a>
-</span><span id="diff_map_files-1296"><a href="#diff_map_files-1296"><span class="linenos">1296</span></a>        <span class="c1"># Check for added and removed concepts</span>
-</span><span id="diff_map_files-1297"><a href="#diff_map_files-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;- 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-1298"><a href="#diff_map_files-1298"><span class="linenos">1298</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-1299"><a href="#diff_map_files-1299"><span class="linenos">1299</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-1300"><a href="#diff_map_files-1300"><span class="linenos">1300</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-1301"><a href="#diff_map_files-1301"><span class="linenos">1301</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-1302"><a href="#diff_map_files-1302"><span class="linenos">1302</span></a>
-</span><span id="diff_map_files-1303"><a href="#diff_map_files-1303"><span class="linenos">1303</span></a>        <span class="c1"># Check for changed concepts</span>
-</span><span id="diff_map_files-1304"><a href="#diff_map_files-1304"><span class="linenos">1304</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-1305"><a href="#diff_map_files-1305"><span class="linenos">1305</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-1306"><a href="#diff_map_files-1306"><span class="linenos">1306</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-1307"><a href="#diff_map_files-1307"><span class="linenos">1307</span></a>        <span class="p">]</span>  <span class="c1"># get non-zero counts</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">\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="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-1310"><a href="#diff_map_files-1310"><span class="linenos">1310</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-1311"><a href="#diff_map_files-1311"><span class="linenos">1311</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-1312"><a href="#diff_map_files-1312"><span class="linenos">1312</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-1313"><a href="#diff_map_files-1313"><span class="linenos">1313</span></a>        <span class="k">else</span><span class="p">:</span>
-</span><span id="diff_map_files-1314"><a href="#diff_map_files-1314"><span class="linenos">1314</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-1315"><a href="#diff_map_files-1315"><span class="linenos">1315</span></a>
-</span><span id="diff_map_files-1316"><a href="#diff_map_files-1316"><span class="linenos">1316</span></a>    <span class="k">return</span> <span class="n">report</span>
+</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>
+</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></pre></div>
 
 
@@ -3574,57 +3568,57 @@
 
     </div>
     <a class="headerlink" href="#diff_phen"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="diff_phen-1319"><a href="#diff_phen-1319"><span class="linenos">1319</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-1320"><a href="#diff_phen-1320"><span class="linenos">1320</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-1321"><a href="#diff_phen-1321"><span class="linenos">1321</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-1322"><a href="#diff_phen-1322"><span class="linenos">1322</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-1323"><a href="#diff_phen-1323"><span class="linenos">1323</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-1324"><a href="#diff_phen-1324"><span class="linenos">1324</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-1325"><a href="#diff_phen-1325"><span class="linenos">1325</span></a><span class="p">):</span>
-</span><span id="diff_phen-1326"><a href="#diff_phen-1326"><span class="linenos">1326</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-1327"><a href="#diff_phen-1327"><span class="linenos">1327</span></a>
-</span><span id="diff_phen-1328"><a href="#diff_phen-1328"><span class="linenos">1328</span></a>    <span class="c1"># validate phenotypes</span>
-</span><span id="diff_phen-1329"><a href="#diff_phen-1329"><span class="linenos">1329</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-1330"><a href="#diff_phen-1330"><span class="linenos">1330</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-1331"><a href="#diff_phen-1331"><span class="linenos">1331</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-1332"><a href="#diff_phen-1332"><span class="linenos">1332</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-1333"><a href="#diff_phen-1333"><span class="linenos">1333</span></a>
-</span><span id="diff_phen-1334"><a href="#diff_phen-1334"><span class="linenos">1334</span></a>    <span class="c1"># get old and new config</span>
-</span><span id="diff_phen-1335"><a href="#diff_phen-1335"><span class="linenos">1335</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-1336"><a href="#diff_phen-1336"><span class="linenos">1336</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-1337"><a href="#diff_phen-1337"><span class="linenos">1337</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-1338"><a href="#diff_phen-1338"><span class="linenos">1338</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-1339"><a href="#diff_phen-1339"><span class="linenos">1339</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-1340"><a href="#diff_phen-1340"><span class="linenos">1340</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-1341"><a href="#diff_phen-1341"><span class="linenos">1341</span></a>
-</span><span id="diff_phen-1342"><a href="#diff_phen-1342"><span class="linenos">1342</span></a>    <span class="c1"># write report heading</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;# Phenotype Comparison Report</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;## Original phenotype</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;  - </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-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">old_version</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="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-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;## Changed phenotype:</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 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-1350"><a href="#diff_phen-1350"><span class="linenos">1350</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-1351"><a href="#diff_phen-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;  - </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-1352"><a href="#diff_phen-1352"><span class="linenos">1352</span></a>
-</span><span id="diff_phen-1353"><a href="#diff_phen-1353"><span class="linenos">1353</span></a>    <span class="c1"># Step 1: check differences configuration files</span>
-</span><span id="diff_phen-1354"><a href="#diff_phen-1354"><span class="linenos">1354</span></a>    <span class="c1"># Convert list of dicts into a dict: {name: file}</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="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-1356"><a href="#diff_phen-1356"><span class="linenos">1356</span></a>
-</span><span id="diff_phen-1357"><a href="#diff_phen-1357"><span class="linenos">1357</span></a>    <span class="c1"># Step 2: check differences between map files</span>
-</span><span id="diff_phen-1358"><a href="#diff_phen-1358"><span class="linenos">1358</span></a>    <span class="c1"># List files from output directories</span>
-</span><span id="diff_phen-1359"><a href="#diff_phen-1359"><span class="linenos">1359</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-1360"><a href="#diff_phen-1360"><span class="linenos">1360</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-1361"><a href="#diff_phen-1361"><span class="linenos">1361</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-1362"><a href="#diff_phen-1362"><span class="linenos">1362</span></a>
-</span><span id="diff_phen-1363"><a href="#diff_phen-1363"><span class="linenos">1363</span></a>    <span class="c1"># initialise report file</span>
-</span><span id="diff_phen-1364"><a href="#diff_phen-1364"><span class="linenos">1364</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-1365"><a href="#diff_phen-1365"><span class="linenos">1365</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-1366"><a href="#diff_phen-1366"><span class="linenos">1366</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-1367"><a href="#diff_phen-1367"><span class="linenos">1367</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-1368"><a href="#diff_phen-1368"><span class="linenos">1368</span></a>
-</span><span id="diff_phen-1369"><a href="#diff_phen-1369"><span class="linenos">1369</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>
+            <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>
+</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></pre></div>
 
 
@@ -3644,70 +3638,70 @@
 
     </div>
     <a class="headerlink" href="#diff"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="diff-1372"><a href="#diff-1372"><span class="linenos">1372</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-1373"><a href="#diff-1373"><span class="linenos">1373</span></a>    <span class="c1"># make tmp directory .acmc</span>
-</span><span id="diff-1374"><a href="#diff-1374"><span class="linenos">1374</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-1375"><a href="#diff-1375"><span class="linenos">1375</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-1376"><a href="#diff-1376"><span class="linenos">1376</span></a>
-</span><span id="diff-1377"><a href="#diff-1377"><span class="linenos">1377</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-1378"><a href="#diff-1378"><span class="linenos">1378</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-1379"><a href="#diff-1379"><span class="linenos">1379</span></a>        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
-</span><span id="diff-1380"><a href="#diff-1380"><span class="linenos">1380</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-1381"><a href="#diff-1381"><span class="linenos">1381</span></a>        <span class="p">)</span>
-</span><span id="diff-1382"><a href="#diff-1382"><span class="linenos">1382</span></a>
-</span><span id="diff-1383"><a href="#diff-1383"><span class="linenos">1383</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-1384"><a href="#diff-1384"><span class="linenos">1384</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-1385"><a href="#diff-1385"><span class="linenos">1385</span></a>        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
-</span><span id="diff-1386"><a href="#diff-1386"><span class="linenos">1386</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-1387"><a href="#diff-1387"><span class="linenos">1387</span></a>        <span class="p">)</span>
-</span><span id="diff-1388"><a href="#diff-1388"><span class="linenos">1388</span></a>
-</span><span id="diff-1389"><a href="#diff-1389"><span class="linenos">1389</span></a>    <span class="k">try</span><span class="p">:</span>
-</span><span id="diff-1390"><a href="#diff-1390"><span class="linenos">1390</span></a>        <span class="c1"># Create the directory</span>
-</span><span id="diff-1391"><a href="#diff-1391"><span class="linenos">1391</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-1392"><a href="#diff-1392"><span class="linenos">1392</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-1393"><a href="#diff-1393"><span class="linenos">1393</span></a>
-</span><span id="diff-1394"><a href="#diff-1394"><span class="linenos">1394</span></a>        <span class="c1"># Create temporary directories</span>
-</span><span id="diff-1395"><a href="#diff-1395"><span class="linenos">1395</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-1396"><a href="#diff-1396"><span class="linenos">1396</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-1397"><a href="#diff-1397"><span class="linenos">1397</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-1398"><a href="#diff-1398"><span class="linenos">1398</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-1399"><a href="#diff-1399"><span class="linenos">1399</span></a>
-</span><span id="diff-1400"><a href="#diff-1400"><span class="linenos">1400</span></a>        <span class="c1"># checkout changed</span>
-</span><span id="diff-1401"><a href="#diff-1401"><span class="linenos">1401</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-1402"><a href="#diff-1402"><span class="linenos">1402</span></a>            <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span>
-</span><span id="diff-1403"><a href="#diff-1403"><span class="linenos">1403</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-1404"><a href="#diff-1404"><span class="linenos">1404</span></a>            <span class="p">)</span>
-</span><span id="diff-1405"><a href="#diff-1405"><span class="linenos">1405</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-1406"><a href="#diff-1406"><span class="linenos">1406</span></a>        <span class="k">else</span><span class="p">:</span>
-</span><span id="diff-1407"><a href="#diff-1407"><span class="linenos">1407</span></a>            <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span>
-</span><span id="diff-1408"><a href="#diff-1408"><span class="linenos">1408</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-1409"><a href="#diff-1409"><span class="linenos">1409</span></a>            <span class="p">)</span>
-</span><span id="diff-1410"><a href="#diff-1410"><span class="linenos">1410</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-1411"><a href="#diff-1411"><span class="linenos">1411</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-1412"><a href="#diff-1412"><span class="linenos">1412</span></a>
-</span><span id="diff-1413"><a href="#diff-1413"><span class="linenos">1413</span></a>        <span class="c1"># checkout old</span>
-</span><span id="diff-1414"><a href="#diff-1414"><span class="linenos">1414</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-1415"><a href="#diff-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="diff-1416"><a href="#diff-1416"><span class="linenos">1416</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-1417"><a href="#diff-1417"><span class="linenos">1417</span></a>            <span class="p">)</span>
-</span><span id="diff-1418"><a href="#diff-1418"><span class="linenos">1418</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-1419"><a href="#diff-1419"><span class="linenos">1419</span></a>        <span class="k">else</span><span class="p">:</span>
-</span><span id="diff-1420"><a href="#diff-1420"><span class="linenos">1420</span></a>            <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span>
-</span><span id="diff-1421"><a href="#diff-1421"><span class="linenos">1421</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-1422"><a href="#diff-1422"><span class="linenos">1422</span></a>            <span class="p">)</span>
-</span><span id="diff-1423"><a href="#diff-1423"><span class="linenos">1423</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-1424"><a href="#diff-1424"><span class="linenos">1424</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-1425"><a href="#diff-1425"><span class="linenos">1425</span></a>
-</span><span id="diff-1426"><a href="#diff-1426"><span class="linenos">1426</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-1427"><a href="#diff-1427"><span class="linenos">1427</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-1428"><a href="#diff-1428"><span class="linenos">1428</span></a>        <span class="c1"># diff old with new</span>
-</span><span id="diff-1429"><a href="#diff-1429"><span class="linenos">1429</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-1430"><a href="#diff-1430"><span class="linenos">1430</span></a>
-</span><span id="diff-1431"><a href="#diff-1431"><span class="linenos">1431</span></a>    <span class="k">finally</span><span class="p">:</span>
-</span><span id="diff-1432"><a href="#diff-1432"><span class="linenos">1432</span></a>        <span class="c1"># clean up tmp directory</span>
-</span><span id="diff-1433"><a href="#diff-1433"><span class="linenos">1433</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-1434"><a href="#diff-1434"><span class="linenos">1434</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-1435"><a href="#diff-1435"><span class="linenos">1435</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>
+            <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>
+</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></pre></div>
 
 
diff --git a/docs/api/acmc/trud.html b/docs/api/acmc/trud.html
index fdfb631c1f9f2d6a450caebfcfa5914bdcdfc827..46f4e0ea51f455ae042e472b90d18f15423899f6 100644
--- a/docs/api/acmc/trud.html
+++ b/docs/api/acmc/trud.html
@@ -151,394 +151,395 @@
 </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">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><span id="L-51"><a href="#L-51"><span class="linenos"> 51</span></a>    <span class="n">release_ordinal</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
-</span><span id="L-52"><a href="#L-52"><span class="linenos"> 52</span></a>    <span class="n">release</span><span class="p">:</span> <span class="nb">dict</span><span class="p">,</span>
-</span><span id="L-53"><a href="#L-53"><span class="linenos"> 53</span></a>    <span class="n">file_json_prefix</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
-</span><span id="L-54"><a href="#L-54"><span class="linenos"> 54</span></a>    <span class="n">file_type</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-</span><span id="L-55"><a href="#L-55"><span class="linenos"> 55</span></a><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Path</span><span class="p">:</span>
-</span><span id="L-56"><a href="#L-56"><span class="linenos"> 56</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-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"># check folder is a directory</span>
-</span><span id="L-59"><a href="#L-59"><span class="linenos"> 59</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-60"><a href="#L-60"><span class="linenos"> 60</span></a>        <span class="k">raise</span> <span class="ne">NotADirectoryError</span><span class="p">(</span>
-</span><span id="L-61"><a href="#L-61"><span class="linenos"> 61</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-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-64"><a href="#L-64"><span class="linenos"> 64</span></a>    <span class="n">file_type</span> <span class="o">=</span> <span class="n">file_type</span> <span class="ow">or</span> <span class="n">file_json_prefix</span>
-</span><span id="L-65"><a href="#L-65"><span class="linenos"> 65</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-66"><a href="#L-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="L-67"><a href="#L-67"><span class="linenos"> 67</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-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-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="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-70"><a href="#L-70"><span class="linenos"> 70</span></a>        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
-</span><span id="L-71"><a href="#L-71"><span class="linenos"> 71</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-72"><a href="#L-72"><span class="linenos"> 72</span></a>        <span class="p">)</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="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span>
-</span><span id="L-75"><a href="#L-75"><span class="linenos"> 75</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-76"><a href="#L-76"><span class="linenos"> 76</span></a>    <span class="p">)</span>
-</span><span id="L-77"><a href="#L-77"><span class="linenos"> 77</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-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">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-80"><a href="#L-80"><span class="linenos"> 80</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-81"><a href="#L-81"><span class="linenos"> 81</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-82"><a href="#L-82"><span class="linenos"> 82</span></a>    <span class="k">else</span><span class="p">:</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><span id="L-84"><a href="#L-84"><span class="linenos"> 84</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-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="n">response</span><span class="o">.</span><span class="n">raise_for_status</span><span class="p">()</span>
-</span><span id="L-87"><a href="#L-87"><span class="linenos"> 87</span></a>
-</span><span id="L-88"><a href="#L-88"><span class="linenos"> 88</span></a>    <span class="k">return</span> <span class="n">file_destination</span>
+</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-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-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><span id="L-91"><a href="#L-91"><span class="linenos"> 91</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-92"><a href="#L-92"><span class="linenos"> 92</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-93"><a href="#L-93"><span class="linenos"> 93</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-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="nb">hash</span><span class="p">)</span>
-</span><span id="L-95"><a href="#L-95"><span class="linenos"> 95</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-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="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-97"><a href="#L-97"><span class="linenos"> 97</span></a>    <span class="k">else</span><span class="p">:</span>
-</span><span id="L-98"><a href="#L-98"><span class="linenos"> 98</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-99"><a href="#L-99"><span class="linenos"> 99</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-100"><a href="#L-100"><span class="linenos">100</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-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><span id="L-103"><a href="#L-103"><span class="linenos">103</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-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-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="c1"># check folder is a directory</span>
-</span><span id="L-106"><a href="#L-106"><span class="linenos">106</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-107"><a href="#L-107"><span class="linenos">107</span></a>        <span class="k">raise</span> <span class="ne">NotADirectoryError</span><span class="p">(</span>
-</span><span id="L-108"><a href="#L-108"><span class="linenos">108</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-109"><a href="#L-109"><span class="linenos">109</span></a>        <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">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-112"><a href="#L-112"><span class="linenos">112</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-113"><a href="#L-113"><span class="linenos">113</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 class="k">def</span><span class="w"> </span><span class="nf">extract_icd10</span><span class="p">():</span>
-</span><span id="L-116"><a href="#L-116"><span class="linenos">116</span></a>    <span class="c1"># ICD10_edition5</span>
-</span><span id="L-117"><a href="#L-117"><span class="linenos">117</span></a>    <span class="n">file_path</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-118"><a href="#L-118"><span class="linenos">118</span></a>        <span class="n">DOWNLOADS_PATH</span>
-</span><span id="L-119"><a href="#L-119"><span class="linenos">119</span></a>        <span class="o">/</span> <span class="s2">&quot;ICD10_Edition5_XML_20160401&quot;</span>
-</span><span id="L-120"><a href="#L-120"><span class="linenos">120</span></a>        <span class="o">/</span> <span class="s2">&quot;Content&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;ICD10_Edition5_CodesAndTitlesAndMetadata_GB_20160401.xml&quot;</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="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-124"><a href="#L-124"><span class="linenos">124</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-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="o">.</span><span class="n">rename</span><span class="p">(</span>
-</span><span id="L-126"><a href="#L-126"><span class="linenos">126</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-127"><a href="#L-127"><span class="linenos">127</span></a>    <span class="p">)</span>
-</span><span id="L-128"><a href="#L-128"><span class="linenos">128</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-129"><a href="#L-129"><span class="linenos">129</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-130"><a href="#L-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 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-131"><a href="#L-131"><span class="linenos">131</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 class="k">def</span><span class="w"> </span><span class="nf">extract_opsc4</span><span class="p">():</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;OPCS410 Data files txt&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;OPCS410 CodesAndTitles Nov 2022 V1.0.txt&quot;</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><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_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-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="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-142"><a href="#L-142"><span class="linenos">142</span></a>
-</span><span id="L-143"><a href="#L-143"><span class="linenos">143</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-144"><a href="#L-144"><span class="linenos">144</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-145"><a href="#L-145"><span class="linenos">145</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-146"><a href="#L-146"><span class="linenos">146</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-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-148"><a href="#L-148"><span class="linenos">148</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-149"><a href="#L-149"><span class="linenos">149</span></a>    <span class="c1"># NHS Data Migrations</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 class="c1"># snomed only</span>
-</span><span id="L-152"><a href="#L-152"><span class="linenos">152</span></a>    <span class="n">file_path</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-153"><a href="#L-153"><span class="linenos">153</span></a>        <span class="n">DOWNLOADS_PATH</span>
-</span><span id="L-154"><a href="#L-154"><span class="linenos">154</span></a>        <span class="o">/</span> <span class="s2">&quot;Mapping Tables&quot;</span>
-</span><span id="L-155"><a href="#L-155"><span class="linenos">155</span></a>        <span class="o">/</span> <span class="s2">&quot;Updated&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;Clinically Assured&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;sctcremap_uk_20200401000001.txt&quot;</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="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-160"><a href="#L-160"><span class="linenos">160</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-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="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-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">drop_duplicates</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">astype</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><span id="L-165"><a href="#L-165"><span class="linenos">165</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-166"><a href="#L-166"><span class="linenos">166</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-167"><a href="#L-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;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-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 class="c1"># r2 -&gt; r3</span>
-</span><span id="L-170"><a href="#L-170"><span class="linenos">170</span></a>    <span class="n">file_path</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-171"><a href="#L-171"><span class="linenos">171</span></a>        <span class="n">DOWNLOADS_PATH</span>
-</span><span id="L-172"><a href="#L-172"><span class="linenos">172</span></a>        <span class="o">/</span> <span class="s2">&quot;Mapping Tables&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;Updated&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;Clinically Assured&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;rctctv3map_uk_20200401000001.txt&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="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-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="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-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">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-180"><a href="#L-180"><span class="linenos">180</span></a>
-</span><span id="L-181"><a href="#L-181"><span class="linenos">181</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">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-183"><a href="#L-183"><span class="linenos">183</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><span id="L-185"><a href="#L-185"><span class="linenos">185</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="n">file_path</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-187"><a href="#L-187"><span class="linenos">187</span></a>        <span class="n">DOWNLOADS_PATH</span>
-</span><span id="L-188"><a href="#L-188"><span class="linenos">188</span></a>        <span class="o">/</span> <span class="s2">&quot;Mapping Tables&quot;</span>
-</span><span id="L-189"><a href="#L-189"><span class="linenos">189</span></a>        <span class="o">/</span> <span class="s2">&quot;Updated&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;Clinically Assured&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;ctv3rctmap_uk_20200401000002.txt&quot;</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="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-194"><a href="#L-194"><span class="linenos">194</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-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="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-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">drop_duplicates</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="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-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="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-200"><a href="#L-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="L-201"><a href="#L-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="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="c1"># r2 -&gt; snomed</span>
-</span><span id="L-204"><a href="#L-204"><span class="linenos">204</span></a>    <span class="n">file_path</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-205"><a href="#L-205"><span class="linenos">205</span></a>        <span class="n">DOWNLOADS_PATH</span>
-</span><span id="L-206"><a href="#L-206"><span class="linenos">206</span></a>        <span class="o">/</span> <span class="s2">&quot;Mapping Tables&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;Updated&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;Clinically Assured&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;rcsctmap2_uk_20200401000001.txt&quot;</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="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-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="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-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">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-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="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">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-217"><a href="#L-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 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><span id="L-219"><a href="#L-219"><span class="linenos">219</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="n">file_path</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="L-221"><a href="#L-221"><span class="linenos">221</span></a>        <span class="n">DOWNLOADS_PATH</span>
-</span><span id="L-222"><a href="#L-222"><span class="linenos">222</span></a>        <span class="o">/</span> <span class="s2">&quot;Mapping Tables&quot;</span>
-</span><span id="L-223"><a href="#L-223"><span class="linenos">223</span></a>        <span class="o">/</span> <span class="s2">&quot;Updated&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;Clinically Assured&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;ctv3sctmap2_uk_20200401000001.txt&quot;</span>
-</span><span id="L-226"><a href="#L-226"><span class="linenos">226</span></a>    <span class="p">)</span>
-</span><span id="L-227"><a href="#L-227"><span class="linenos">227</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-228"><a href="#L-228"><span class="linenos">228</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-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="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-230"><a href="#L-230"><span class="linenos">230</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-231"><a href="#L-231"><span class="linenos">231</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-232"><a href="#L-232"><span class="linenos">232</span></a>
-</span><span id="L-233"><a href="#L-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;read3_to_snomed.parquet&quot;</span>
-</span><span id="L-234"><a href="#L-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="L-235"><a href="#L-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="L-236"><a href="#L-236"><span class="linenos">236</span></a>
+</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-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-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-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-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-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-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-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-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-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-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 class="k">def</span><span class="w"> </span><span class="nf">extract_nhs_read_browser</span><span class="p">():</span>
-</span><span id="L-239"><a href="#L-239"><span class="linenos">239</span></a>    <span class="c1"># r2 only</span>
-</span><span id="L-240"><a href="#L-240"><span class="linenos">240</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-241"><a href="#L-241"><span class="linenos">241</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-242"><a href="#L-242"><span class="linenos">242</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-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">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-244"><a href="#L-244"><span class="linenos">244</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-245"><a href="#L-245"><span class="linenos">245</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-246"><a href="#L-246"><span class="linenos">246</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-247"><a href="#L-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;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-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"># r2 -&gt; atc</span>
-</span><span id="L-250"><a href="#L-250"><span class="linenos">250</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-251"><a href="#L-251"><span class="linenos">251</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-252"><a href="#L-252"><span class="linenos">252</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-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="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-254"><a href="#L-254"><span class="linenos">254</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-255"><a href="#L-255"><span class="linenos">255</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-256"><a href="#L-256"><span class="linenos">256</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-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="c1"># r2 -&gt; icd10</span>
-</span><span id="L-259"><a href="#L-259"><span class="linenos">259</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-260"><a href="#L-260"><span class="linenos">260</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-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="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-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="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-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="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-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;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-265"><a href="#L-265"><span class="linenos">265</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-266"><a href="#L-266"><span class="linenos">266</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-267"><a href="#L-267"><span class="linenos">267</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-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"># r2 -&gt; opcs4</span>
-</span><span id="L-270"><a href="#L-270"><span class="linenos">270</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-271"><a href="#L-271"><span class="linenos">271</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-272"><a href="#L-272"><span class="linenos">272</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-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="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-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="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-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;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-276"><a href="#L-276"><span class="linenos">276</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-277"><a href="#L-277"><span class="linenos">277</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-278"><a href="#L-278"><span class="linenos">278</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-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="c1"># r3 only</span>
-</span><span id="L-281"><a href="#L-281"><span class="linenos">281</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-282"><a href="#L-282"><span class="linenos">282</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-283"><a href="#L-283"><span class="linenos">283</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-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">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-285"><a href="#L-285"><span class="linenos">285</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-286"><a href="#L-286"><span class="linenos">286</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-287"><a href="#L-287"><span class="linenos">287</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-288"><a href="#L-288"><span class="linenos">288</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-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="c1"># r3 -&gt; icd10</span>
-</span><span id="L-291"><a href="#L-291"><span class="linenos">291</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-292"><a href="#L-292"><span class="linenos">292</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-293"><a href="#L-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="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-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="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-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="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-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;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-297"><a href="#L-297"><span class="linenos">297</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-298"><a href="#L-298"><span class="linenos">298</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-299"><a href="#L-299"><span class="linenos">299</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-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"># r3 -&gt; icd9</span>
-</span><span id="L-302"><a href="#L-302"><span class="linenos">302</span></a>    <span class="c1"># dbf = simpledbf.Dbf5(&#39;build/maps/downloads/Standard/V3/ICD9V3.DBF&#39;)</span>
-</span><span id="L-303"><a href="#L-303"><span class="linenos">303</span></a>
-</span><span id="L-304"><a href="#L-304"><span class="linenos">304</span></a>    <span class="c1"># r3 -&gt; opcs4</span>
-</span><span id="L-305"><a href="#L-305"><span class="linenos">305</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-306"><a href="#L-306"><span class="linenos">306</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-307"><a href="#L-307"><span class="linenos">307</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-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="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-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="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-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;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-311"><a href="#L-311"><span class="linenos">311</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-312"><a href="#L-312"><span class="linenos">312</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-313"><a href="#L-313"><span class="linenos">313</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-314"><a href="#L-314"><span class="linenos">314</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-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 class="k">def</span><span class="w"> </span><span class="nf">create_map_directories</span><span class="p">():</span>
-</span><span id="L-317"><a href="#L-317"><span class="linenos">317</span></a><span class="w">    </span><span class="sd">&quot;&quot;&quot;Create map directories.&quot;&quot;&quot;</span>
-</span><span id="L-318"><a href="#L-318"><span class="linenos">318</span></a>
-</span><span id="L-319"><a href="#L-319"><span class="linenos">319</span></a>    <span class="c1"># Check if build directory exists</span>
-</span><span id="L-320"><a href="#L-320"><span class="linenos">320</span></a>    <span class="n">create_map_dirs</span> <span class="o">=</span> <span class="kc">False</span>
-</span><span id="L-321"><a href="#L-321"><span class="linenos">321</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-322"><a href="#L-322"><span class="linenos">322</span></a>        <span class="n">user_input</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="nb">input</span><span class="p">(</span>
-</span><span id="L-324"><a href="#L-324"><span class="linenos">324</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-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="o">.</span><span class="n">strip</span><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">lower</span><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="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-330"><a href="#L-330"><span class="linenos">330</span></a>            <span class="c1"># delete all build files</span>
-</span><span id="L-331"><a href="#L-331"><span class="linenos">331</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-332"><a href="#L-332"><span class="linenos">332</span></a>            <span class="n">create_map_dirs</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-333"><a href="#L-333"><span class="linenos">333</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-334"><a href="#L-334"><span class="linenos">334</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-335"><a href="#L-335"><span class="linenos">335</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-336"><a href="#L-336"><span class="linenos">336</span></a>    <span class="k">else</span><span class="p">:</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">True</span>
-</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="n">create_map_dirs</span><span class="p">:</span>
-</span><span id="L-340"><a href="#L-340"><span class="linenos">340</span></a>        <span class="c1"># create maps directories</span>
-</span><span id="L-341"><a href="#L-341"><span class="linenos">341</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-342"><a href="#L-342"><span class="linenos">342</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-343"><a href="#L-343"><span class="linenos">343</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-344"><a href="#L-344"><span class="linenos">344</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 class="k">def</span><span class="w"> </span><span class="nf">install</span><span class="p">():</span>
-</span><span id="L-347"><a href="#L-347"><span class="linenos">347</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-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"># get TRUD api key from environment variable</span>
-</span><span id="L-350"><a href="#L-350"><span class="linenos">350</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-351"><a href="#L-351"><span class="linenos">351</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-352"><a href="#L-352"><span class="linenos">352</span></a>        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
-</span><span id="L-353"><a href="#L-353"><span class="linenos">353</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-354"><a href="#L-354"><span class="linenos">354</span></a>        <span class="p">)</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="n">create_map_directories</span><span class="p">()</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="n">items_latest</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="L-359"><a href="#L-359"><span class="linenos">359</span></a>    <span class="n">items</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="L-360"><a href="#L-360"><span class="linenos">360</span></a>        <span class="p">{</span>
-</span><span id="L-361"><a href="#L-361"><span class="linenos">361</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-362"><a href="#L-362"><span class="linenos">362</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-363"><a href="#L-363"><span class="linenos">363</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-364"><a href="#L-364"><span class="linenos">364</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-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="s2">&quot;id&quot;</span><span class="p">:</span> <span class="mi">119</span><span class="p">,</span>
-</span><span id="L-368"><a href="#L-368"><span class="linenos">368</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-369"><a href="#L-369"><span class="linenos">369</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-370"><a href="#L-370"><span class="linenos">370</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-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="s2">&quot;id&quot;</span><span class="p">:</span> <span class="mi">9</span><span class="p">,</span>
-</span><span id="L-374"><a href="#L-374"><span class="linenos">374</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-375"><a href="#L-375"><span class="linenos">375</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-376"><a href="#L-376"><span class="linenos">376</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-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="p">{</span>
-</span><span id="L-379"><a href="#L-379"><span class="linenos">379</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-380"><a href="#L-380"><span class="linenos">380</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-381"><a href="#L-381"><span class="linenos">381</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-382"><a href="#L-382"><span class="linenos">382</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-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="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-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><span id="L-387"><a href="#L-387"><span class="linenos">387</span></a>    <span class="c1"># remove function from items to save versions</span>
-</span><span id="L-388"><a href="#L-388"><span class="linenos">388</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-389"><a href="#L-389"><span class="linenos">389</span></a>    <span class="c1"># save TRUD versions to file to main record of what was downloaded</span>
-</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">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-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">data</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"># Validate and process each item ID</span>
-</span><span id="L-401"><a href="#L-401"><span class="linenos">401</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-402"><a href="#L-402"><span class="linenos">402</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-403"><a href="#L-403"><span class="linenos">403</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-404"><a href="#L-404"><span class="linenos">404</span></a>
-</span><span id="L-405"><a href="#L-405"><span class="linenos">405</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-406"><a href="#L-406"><span class="linenos">406</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-407"><a href="#L-407"><span class="linenos">407</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-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="c1"># Process each release in reverse order</span>
-</span><span id="L-410"><a href="#L-410"><span class="linenos">410</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-411"><a href="#L-411"><span class="linenos">411</span></a>            <span class="c1"># Download archive file</span>
-</span><span id="L-412"><a href="#L-412"><span class="linenos">412</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-413"><a href="#L-413"><span class="linenos">413</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-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><span id="L-416"><a href="#L-416"><span class="linenos">416</span></a>            <span class="c1"># Optional files</span>
-</span><span id="L-417"><a href="#L-417"><span class="linenos">417</span></a>            <span class="c1"># if items.checksum:</span>
-</span><span id="L-418"><a href="#L-418"><span class="linenos">418</span></a>            <span class="c1">#     download_release_file(item[&quot;id&quot;], release_ordinal, release, &quot;checksum&quot;)</span>
-</span><span id="L-419"><a href="#L-419"><span class="linenos">419</span></a>            <span class="c1"># if items.signature:</span>
-</span><span id="L-420"><a href="#L-420"><span class="linenos">420</span></a>            <span class="c1">#     download_release_file(item[&quot;id&quot;], release_ordinal, release, &quot;signature&quot;)</span>
-</span><span id="L-421"><a href="#L-421"><span class="linenos">421</span></a>            <span class="c1"># if items.public_key:</span>
-</span><span id="L-422"><a href="#L-422"><span class="linenos">422</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-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="c1"># Verify Hash if available</span>
-</span><span id="L-425"><a href="#L-425"><span class="linenos">425</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-426"><a href="#L-426"><span class="linenos">426</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-427"><a href="#L-427"><span class="linenos">427</span></a>
-</span><span id="L-428"><a href="#L-428"><span class="linenos">428</span></a>            <span class="c1"># Unzip downloaded .zip</span>
-</span><span id="L-429"><a href="#L-429"><span class="linenos">429</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-430"><a href="#L-430"><span class="linenos">430</span></a>
-</span><span id="L-431"><a href="#L-431"><span class="linenos">431</span></a>            <span class="c1"># Extract Tables to parquet</span>
-</span><span id="L-432"><a href="#L-432"><span class="linenos">432</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-433"><a href="#L-433"><span class="linenos">433</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-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="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-436"><a href="#L-436"><span class="linenos">436</span></a>
-</span><span id="L-437"><a href="#L-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;TRUD installation completed&quot;</span><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 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-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></pre></div>
 
 
@@ -671,52 +672,54 @@
 <div class="attr function">
             
         <span class="def">def</span>
-        <span class="name">download_release_file</span><span class="signature pdoc-code multiline">(<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">release_ordinal</span><span class="p">:</span> <span class="nb">str</span>,</span><span class="param">	<span class="n">release</span><span class="p">:</span> <span class="nb">dict</span>,</span><span class="param">	<span class="n">file_json_prefix</span><span class="p">:</span> <span class="nb">str</span>,</span><span class="param">	<span class="n">file_type</span><span class="o">=</span><span class="kc">None</span></span><span class="return-annotation">) -> <span class="n">pathlib</span><span class="o">.</span><span class="n">Path</span>:</span></span>
+        <span class="name">download_release_file</span><span class="signature pdoc-code multiline">(<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">release_ordinal</span><span class="p">:</span> <span class="nb">str</span>,</span><span class="param">	<span class="n">release</span><span class="p">:</span> <span class="nb">dict</span>,</span><span class="param">	<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>
 
                 <label class="view-source-button" for="download_release_file-view-source"><span>View Source</span></label>
 
     </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><span id="download_release_file-52"><a href="#download_release_file-52"><span class="linenos">52</span></a>    <span class="n">release_ordinal</span><span class="p">:</span> <span class="nb">str</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="n">release</span><span class="p">:</span> <span class="nb">dict</span><span class="p">,</span>
-</span><span id="download_release_file-54"><a href="#download_release_file-54"><span class="linenos">54</span></a>    <span class="n">file_json_prefix</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
-</span><span id="download_release_file-55"><a href="#download_release_file-55"><span class="linenos">55</span></a>    <span class="n">file_type</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
-</span><span id="download_release_file-56"><a href="#download_release_file-56"><span class="linenos">56</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-57"><a href="#download_release_file-57"><span class="linenos">57</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-58"><a href="#download_release_file-58"><span class="linenos">58</span></a>
-</span><span id="download_release_file-59"><a href="#download_release_file-59"><span class="linenos">59</span></a>    <span class="c1"># check folder is a directory</span>
-</span><span id="download_release_file-60"><a href="#download_release_file-60"><span class="linenos">60</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-61"><a href="#download_release_file-61"><span class="linenos">61</span></a>        <span class="k">raise</span> <span class="ne">NotADirectoryError</span><span class="p">(</span>
-</span><span id="download_release_file-62"><a href="#download_release_file-62"><span class="linenos">62</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-63"><a href="#download_release_file-63"><span class="linenos">63</span></a>        <span class="p">)</span>
-</span><span id="download_release_file-64"><a href="#download_release_file-64"><span class="linenos">64</span></a>
-</span><span id="download_release_file-65"><a href="#download_release_file-65"><span class="linenos">65</span></a>    <span class="n">file_type</span> <span class="o">=</span> <span class="n">file_type</span> <span class="ow">or</span> <span class="n">file_json_prefix</span>
-</span><span id="download_release_file-66"><a href="#download_release_file-66"><span class="linenos">66</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-67"><a href="#download_release_file-67"><span class="linenos">67</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-68"><a href="#download_release_file-68"><span class="linenos">68</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-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="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-71"><a href="#download_release_file-71"><span class="linenos">71</span></a>        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
-</span><span id="download_release_file-72"><a href="#download_release_file-72"><span class="linenos">72</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-73"><a href="#download_release_file-73"><span class="linenos">73</span></a>        <span class="p">)</span>
-</span><span id="download_release_file-74"><a href="#download_release_file-74"><span class="linenos">74</span></a>
-</span><span id="download_release_file-75"><a href="#download_release_file-75"><span class="linenos">75</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-76"><a href="#download_release_file-76"><span class="linenos">76</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-77"><a href="#download_release_file-77"><span class="linenos">77</span></a>    <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="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-79"><a href="#download_release_file-79"><span class="linenos">79</span></a>
-</span><span id="download_release_file-80"><a href="#download_release_file-80"><span class="linenos">80</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-81"><a href="#download_release_file-81"><span class="linenos">81</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-82"><a href="#download_release_file-82"><span class="linenos">82</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-83"><a href="#download_release_file-83"><span class="linenos">83</span></a>    <span class="k">else</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">logger</span><span class="o">.</span><span class="n">error</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="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-86"><a href="#download_release_file-86"><span class="linenos">86</span></a>        <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="n">response</span><span class="o">.</span><span class="n">raise_for_status</span><span class="p">()</span>
-</span><span id="download_release_file-88"><a href="#download_release_file-88"><span class="linenos">88</span></a>
-</span><span id="download_release_file-89"><a href="#download_release_file-89"><span class="linenos">89</span></a>    <span class="k">return</span> <span class="n">file_destination</span>
+</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>
 </span></pre></div>
 
 
@@ -736,16 +739,16 @@
 
     </div>
     <a class="headerlink" href="#validate_download_hash"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="validate_download_hash-92"><a href="#validate_download_hash-92"><span class="linenos"> 92</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-93"><a href="#validate_download_hash-93"><span class="linenos"> 93</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-94"><a href="#validate_download_hash-94"><span class="linenos"> 94</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-95"><a href="#validate_download_hash-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="nb">hash</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="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-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="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-98"><a href="#validate_download_hash-98"><span class="linenos"> 98</span></a>    <span class="k">else</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">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-100"><a href="#validate_download_hash-100"><span class="linenos">100</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-101"><a href="#validate_download_hash-101"><span class="linenos">101</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-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>
 </span></pre></div>
 
 
@@ -763,16 +766,15 @@
 
     </div>
     <a class="headerlink" href="#unzip_download"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="unzip_download-104"><a href="#unzip_download-104"><span class="linenos">104</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-105"><a href="#unzip_download-105"><span class="linenos">105</span></a>
-</span><span id="unzip_download-106"><a href="#unzip_download-106"><span class="linenos">106</span></a>    <span class="c1"># check folder is a directory</span>
-</span><span id="unzip_download-107"><a href="#unzip_download-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="unzip_download-108"><a href="#unzip_download-108"><span class="linenos">108</span></a>        <span class="k">raise</span> <span class="ne">NotADirectoryError</span><span class="p">(</span>
-</span><span id="unzip_download-109"><a href="#unzip_download-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="unzip_download-110"><a href="#unzip_download-110"><span class="linenos">110</span></a>        <span class="p">)</span>
-</span><span id="unzip_download-111"><a href="#unzip_download-111"><span class="linenos">111</span></a>
-</span><span id="unzip_download-112"><a href="#unzip_download-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="unzip_download-113"><a href="#unzip_download-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>
+            <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>
 </span></pre></div>
 
 
@@ -790,22 +792,22 @@
 
     </div>
     <a class="headerlink" href="#extract_icd10"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="extract_icd10-116"><a href="#extract_icd10-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="extract_icd10-117"><a href="#extract_icd10-117"><span class="linenos">117</span></a>    <span class="c1"># ICD10_edition5</span>
-</span><span id="extract_icd10-118"><a href="#extract_icd10-118"><span class="linenos">118</span></a>    <span class="n">file_path</span> <span class="o">=</span> <span class="p">(</span>
-</span><span id="extract_icd10-119"><a href="#extract_icd10-119"><span class="linenos">119</span></a>        <span class="n">DOWNLOADS_PATH</span>
-</span><span id="extract_icd10-120"><a href="#extract_icd10-120"><span class="linenos">120</span></a>        <span class="o">/</span> <span class="s2">&quot;ICD10_Edition5_XML_20160401&quot;</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;Content&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;ICD10_Edition5_CodesAndTitlesAndMetadata_GB_20160401.xml&quot;</span>
-</span><span id="extract_icd10-123"><a href="#extract_icd10-123"><span class="linenos">123</span></a>    <span class="p">)</span>
-</span><span id="extract_icd10-124"><a href="#extract_icd10-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="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">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-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="o">.</span><span class="n">rename</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">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-128"><a href="#extract_icd10-128"><span class="linenos">128</span></a>    <span class="p">)</span>
-</span><span id="extract_icd10-129"><a href="#extract_icd10-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="extract_icd10-130"><a href="#extract_icd10-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="extract_icd10-131"><a href="#extract_icd10-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>
+            <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>
 </span></pre></div>
 
 
@@ -823,19 +825,19 @@
 
     </div>
     <a class="headerlink" href="#extract_opsc4"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="extract_opsc4-134"><a href="#extract_opsc4-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="extract_opsc4-135"><a href="#extract_opsc4-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_opsc4-136"><a href="#extract_opsc4-136"><span class="linenos">136</span></a>        <span class="n">DOWNLOADS_PATH</span>
-</span><span id="extract_opsc4-137"><a href="#extract_opsc4-137"><span class="linenos">137</span></a>        <span class="o">/</span> <span class="s2">&quot;OPCS410 Data files txt&quot;</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 CodesAndTitles Nov 2022 V1.0.txt&quot;</span>
-</span><span id="extract_opsc4-139"><a href="#extract_opsc4-139"><span class="linenos">139</span></a>    <span class="p">)</span>
-</span><span id="extract_opsc4-140"><a href="#extract_opsc4-140"><span class="linenos">140</span></a>
-</span><span id="extract_opsc4-141"><a href="#extract_opsc4-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="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">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-143"><a href="#extract_opsc4-143"><span class="linenos">143</span></a>
-</span><span id="extract_opsc4-144"><a href="#extract_opsc4-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="extract_opsc4-145"><a href="#extract_opsc4-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="extract_opsc4-146"><a href="#extract_opsc4-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>
+            <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>
 </span></pre></div>
 
 
@@ -853,94 +855,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-149"><a href="#extract_nhs_data_migrations-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="extract_nhs_data_migrations-150"><a href="#extract_nhs_data_migrations-150"><span class="linenos">150</span></a>    <span class="c1"># NHS Data Migrations</span>
-</span><span id="extract_nhs_data_migrations-151"><a href="#extract_nhs_data_migrations-151"><span class="linenos">151</span></a>
-</span><span id="extract_nhs_data_migrations-152"><a href="#extract_nhs_data_migrations-152"><span class="linenos">152</span></a>    <span class="c1"># snomed only</span>
-</span><span id="extract_nhs_data_migrations-153"><a href="#extract_nhs_data_migrations-153"><span class="linenos">153</span></a>    <span class="n">file_path</span> <span class="o">=</span> <span class="p">(</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">DOWNLOADS_PATH</span>
-</span><span id="extract_nhs_data_migrations-155"><a href="#extract_nhs_data_migrations-155"><span class="linenos">155</span></a>        <span class="o">/</span> <span class="s2">&quot;Mapping Tables&quot;</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;Updated&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;Clinically Assured&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;sctcremap_uk_20200401000001.txt&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="p">)</span>
-</span><span id="extract_nhs_data_migrations-160"><a href="#extract_nhs_data_migrations-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="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">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-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="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-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">drop_duplicates</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">astype</span><span class="p">(</span><span class="nb">str</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><span id="extract_nhs_data_migrations-166"><a href="#extract_nhs_data_migrations-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="extract_nhs_data_migrations-167"><a href="#extract_nhs_data_migrations-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="extract_nhs_data_migrations-168"><a href="#extract_nhs_data_migrations-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="extract_nhs_data_migrations-169"><a href="#extract_nhs_data_migrations-169"><span class="linenos">169</span></a>
-</span><span id="extract_nhs_data_migrations-170"><a href="#extract_nhs_data_migrations-170"><span class="linenos">170</span></a>    <span class="c1"># r2 -&gt; r3</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">file_path</span> <span class="o">=</span> <span class="p">(</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">DOWNLOADS_PATH</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;Mapping Tables&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;Updated&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;Clinically Assured&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;rctctv3map_uk_20200401000001.txt&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="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">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-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="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-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">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-181"><a href="#extract_nhs_data_migrations-181"><span class="linenos">181</span></a>
-</span><span id="extract_nhs_data_migrations-182"><a href="#extract_nhs_data_migrations-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="extract_nhs_data_migrations-183"><a href="#extract_nhs_data_migrations-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="extract_nhs_data_migrations-184"><a href="#extract_nhs_data_migrations-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="extract_nhs_data_migrations-185"><a href="#extract_nhs_data_migrations-185"><span class="linenos">185</span></a>
-</span><span id="extract_nhs_data_migrations-186"><a href="#extract_nhs_data_migrations-186"><span class="linenos">186</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="n">file_path</span> <span class="o">=</span> <span class="p">(</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">DOWNLOADS_PATH</span>
-</span><span id="extract_nhs_data_migrations-189"><a href="#extract_nhs_data_migrations-189"><span class="linenos">189</span></a>        <span class="o">/</span> <span class="s2">&quot;Mapping Tables&quot;</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;Updated&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;Clinically Assured&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;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="p">)</span>
-</span><span id="extract_nhs_data_migrations-194"><a href="#extract_nhs_data_migrations-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="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">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-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="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-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">drop_duplicates</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="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-199"><a href="#extract_nhs_data_migrations-199"><span class="linenos">199</span></a>
-</span><span id="extract_nhs_data_migrations-200"><a href="#extract_nhs_data_migrations-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="extract_nhs_data_migrations-201"><a href="#extract_nhs_data_migrations-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="extract_nhs_data_migrations-202"><a href="#extract_nhs_data_migrations-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="extract_nhs_data_migrations-203"><a href="#extract_nhs_data_migrations-203"><span class="linenos">203</span></a>
-</span><span id="extract_nhs_data_migrations-204"><a href="#extract_nhs_data_migrations-204"><span class="linenos">204</span></a>    <span class="c1"># r2 -&gt; snomed</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">file_path</span> <span class="o">=</span> <span class="p">(</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">DOWNLOADS_PATH</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;Mapping Tables&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;Updated&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;Clinically Assured&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;rcsctmap2_uk_20200401000001.txt&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="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">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-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="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-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">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-215"><a href="#extract_nhs_data_migrations-215"><span class="linenos">215</span></a>
-</span><span id="extract_nhs_data_migrations-216"><a href="#extract_nhs_data_migrations-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="extract_nhs_data_migrations-217"><a href="#extract_nhs_data_migrations-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="extract_nhs_data_migrations-218"><a href="#extract_nhs_data_migrations-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="extract_nhs_data_migrations-219"><a href="#extract_nhs_data_migrations-219"><span class="linenos">219</span></a>
-</span><span id="extract_nhs_data_migrations-220"><a href="#extract_nhs_data_migrations-220"><span class="linenos">220</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="n">file_path</span> <span class="o">=</span> <span class="p">(</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">DOWNLOADS_PATH</span>
-</span><span id="extract_nhs_data_migrations-223"><a href="#extract_nhs_data_migrations-223"><span class="linenos">223</span></a>        <span class="o">/</span> <span class="s2">&quot;Mapping Tables&quot;</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;Updated&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;Clinically Assured&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;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="p">)</span>
-</span><span id="extract_nhs_data_migrations-228"><a href="#extract_nhs_data_migrations-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="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">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-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="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-231"><a href="#extract_nhs_data_migrations-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="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="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-233"><a href="#extract_nhs_data_migrations-233"><span class="linenos">233</span></a>
-</span><span id="extract_nhs_data_migrations-234"><a href="#extract_nhs_data_migrations-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="extract_nhs_data_migrations-235"><a href="#extract_nhs_data_migrations-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="extract_nhs_data_migrations-236"><a href="#extract_nhs_data_migrations-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>
+            <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>
+</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-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-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-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-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-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-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-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-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-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></pre></div>
 
 
@@ -958,82 +960,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-239"><a href="#extract_nhs_read_browser-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="extract_nhs_read_browser-240"><a href="#extract_nhs_read_browser-240"><span class="linenos">240</span></a>    <span class="c1"># r2 only</span>
-</span><span id="extract_nhs_read_browser-241"><a href="#extract_nhs_read_browser-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="extract_nhs_read_browser-242"><a href="#extract_nhs_read_browser-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="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">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-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">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-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">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-246"><a href="#extract_nhs_read_browser-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="extract_nhs_read_browser-247"><a href="#extract_nhs_read_browser-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="extract_nhs_read_browser-248"><a href="#extract_nhs_read_browser-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="extract_nhs_read_browser-249"><a href="#extract_nhs_read_browser-249"><span class="linenos">249</span></a>
-</span><span id="extract_nhs_read_browser-250"><a href="#extract_nhs_read_browser-250"><span class="linenos">250</span></a>    <span class="c1"># r2 -&gt; atc</span>
-</span><span id="extract_nhs_read_browser-251"><a href="#extract_nhs_read_browser-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="extract_nhs_read_browser-252"><a href="#extract_nhs_read_browser-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="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">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-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="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-255"><a href="#extract_nhs_read_browser-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="extract_nhs_read_browser-256"><a href="#extract_nhs_read_browser-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="extract_nhs_read_browser-257"><a href="#extract_nhs_read_browser-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="extract_nhs_read_browser-258"><a href="#extract_nhs_read_browser-258"><span class="linenos">258</span></a>
-</span><span id="extract_nhs_read_browser-259"><a href="#extract_nhs_read_browser-259"><span class="linenos">259</span></a>    <span class="c1"># r2 -&gt; icd10</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">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-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">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-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="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-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="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-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="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-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;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-266"><a href="#extract_nhs_read_browser-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="extract_nhs_read_browser-267"><a href="#extract_nhs_read_browser-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="extract_nhs_read_browser-268"><a href="#extract_nhs_read_browser-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="extract_nhs_read_browser-269"><a href="#extract_nhs_read_browser-269"><span class="linenos">269</span></a>
-</span><span id="extract_nhs_read_browser-270"><a href="#extract_nhs_read_browser-270"><span class="linenos">270</span></a>    <span class="c1"># r2 -&gt; opcs4</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">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-272"><a href="#extract_nhs_read_browser-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="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">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-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="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-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="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-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;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-277"><a href="#extract_nhs_read_browser-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="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">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-279"><a href="#extract_nhs_read_browser-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="extract_nhs_read_browser-280"><a href="#extract_nhs_read_browser-280"><span class="linenos">280</span></a>
-</span><span id="extract_nhs_read_browser-281"><a href="#extract_nhs_read_browser-281"><span class="linenos">281</span></a>    <span class="c1"># r3 only</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">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-283"><a href="#extract_nhs_read_browser-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="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">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-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">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-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">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-287"><a href="#extract_nhs_read_browser-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="extract_nhs_read_browser-288"><a href="#extract_nhs_read_browser-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="extract_nhs_read_browser-289"><a href="#extract_nhs_read_browser-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="extract_nhs_read_browser-290"><a href="#extract_nhs_read_browser-290"><span class="linenos">290</span></a>
-</span><span id="extract_nhs_read_browser-291"><a href="#extract_nhs_read_browser-291"><span class="linenos">291</span></a>    <span class="c1"># r3 -&gt; icd10</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">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-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">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-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">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-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="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-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="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-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;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-298"><a href="#extract_nhs_read_browser-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="extract_nhs_read_browser-299"><a href="#extract_nhs_read_browser-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="extract_nhs_read_browser-300"><a href="#extract_nhs_read_browser-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="extract_nhs_read_browser-301"><a href="#extract_nhs_read_browser-301"><span class="linenos">301</span></a>
-</span><span id="extract_nhs_read_browser-302"><a href="#extract_nhs_read_browser-302"><span class="linenos">302</span></a>    <span class="c1"># r3 -&gt; icd9</span>
-</span><span id="extract_nhs_read_browser-303"><a href="#extract_nhs_read_browser-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="extract_nhs_read_browser-304"><a href="#extract_nhs_read_browser-304"><span class="linenos">304</span></a>
-</span><span id="extract_nhs_read_browser-305"><a href="#extract_nhs_read_browser-305"><span class="linenos">305</span></a>    <span class="c1"># r3 -&gt; opcs4</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">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-307"><a href="#extract_nhs_read_browser-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="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">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-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="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-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="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-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;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-312"><a href="#extract_nhs_read_browser-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="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">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-314"><a href="#extract_nhs_read_browser-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>
+            <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>
 </span></pre></div>
 
 
@@ -1051,34 +1053,34 @@
 
     </div>
     <a class="headerlink" href="#create_map_directories"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="create_map_directories-317"><a href="#create_map_directories-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="create_map_directories-318"><a href="#create_map_directories-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="create_map_directories-319"><a href="#create_map_directories-319"><span class="linenos">319</span></a>
-</span><span id="create_map_directories-320"><a href="#create_map_directories-320"><span class="linenos">320</span></a>    <span class="c1"># Check if build directory exists</span>
-</span><span id="create_map_directories-321"><a href="#create_map_directories-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="create_map_directories-322"><a href="#create_map_directories-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="create_map_directories-323"><a href="#create_map_directories-323"><span class="linenos">323</span></a>        <span class="n">user_input</span> <span class="o">=</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="nb">input</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="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-326"><a href="#create_map_directories-326"><span class="linenos">326</span></a>            <span class="p">)</span>
-</span><span id="create_map_directories-327"><a href="#create_map_directories-327"><span class="linenos">327</span></a>            <span class="o">.</span><span class="n">strip</span><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">lower</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="p">)</span>
-</span><span id="create_map_directories-330"><a href="#create_map_directories-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="create_map_directories-331"><a href="#create_map_directories-331"><span class="linenos">331</span></a>            <span class="c1"># delete all build files</span>
-</span><span id="create_map_directories-332"><a href="#create_map_directories-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="create_map_directories-333"><a href="#create_map_directories-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="create_map_directories-334"><a href="#create_map_directories-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="create_map_directories-335"><a href="#create_map_directories-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="create_map_directories-336"><a href="#create_map_directories-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="create_map_directories-337"><a href="#create_map_directories-337"><span class="linenos">337</span></a>    <span class="k">else</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="n">create_map_dirs</span> <span class="o">=</span> <span class="kc">True</span>
-</span><span id="create_map_directories-339"><a href="#create_map_directories-339"><span class="linenos">339</span></a>
-</span><span id="create_map_directories-340"><a href="#create_map_directories-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="create_map_directories-341"><a href="#create_map_directories-341"><span class="linenos">341</span></a>        <span class="c1"># create maps directories</span>
-</span><span id="create_map_directories-342"><a href="#create_map_directories-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="create_map_directories-343"><a href="#create_map_directories-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="create_map_directories-344"><a href="#create_map_directories-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>
+            <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>
 </span></pre></div>
 
 
@@ -1098,98 +1100,98 @@
 
     </div>
     <a class="headerlink" href="#install"></a>
-            <div class="pdoc-code codehilite"><pre><span></span><span id="install-347"><a href="#install-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="install-348"><a href="#install-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="install-349"><a href="#install-349"><span class="linenos">349</span></a>
-</span><span id="install-350"><a href="#install-350"><span class="linenos">350</span></a>    <span class="c1"># get TRUD api key from environment variable</span>
-</span><span id="install-351"><a href="#install-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="install-352"><a href="#install-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="install-353"><a href="#install-353"><span class="linenos">353</span></a>        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
-</span><span id="install-354"><a href="#install-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="install-355"><a href="#install-355"><span class="linenos">355</span></a>        <span class="p">)</span>
-</span><span id="install-356"><a href="#install-356"><span class="linenos">356</span></a>
-</span><span id="install-357"><a href="#install-357"><span class="linenos">357</span></a>    <span class="n">create_map_directories</span><span class="p">()</span>
-</span><span id="install-358"><a href="#install-358"><span class="linenos">358</span></a>
-</span><span id="install-359"><a href="#install-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="install-360"><a href="#install-360"><span class="linenos">360</span></a>    <span class="n">items</span> <span class="o">=</span> <span class="p">[</span>
-</span><span id="install-361"><a href="#install-361"><span class="linenos">361</span></a>        <span class="p">{</span>
-</span><span id="install-362"><a href="#install-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="install-363"><a href="#install-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="install-364"><a href="#install-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="install-365"><a href="#install-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="install-366"><a href="#install-366"><span class="linenos">366</span></a>        <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="s2">&quot;id&quot;</span><span class="p">:</span> <span class="mi">119</span><span class="p">,</span>
-</span><span id="install-369"><a href="#install-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="install-370"><a href="#install-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="install-371"><a href="#install-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="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 class="p">{</span>
-</span><span id="install-374"><a href="#install-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="install-375"><a href="#install-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="install-376"><a href="#install-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="install-377"><a href="#install-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="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="p">{</span>
-</span><span id="install-380"><a href="#install-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="install-381"><a href="#install-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="install-382"><a href="#install-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="install-383"><a href="#install-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="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="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-386"><a href="#install-386"><span class="linenos">386</span></a>    <span class="p">]</span>
-</span><span id="install-387"><a href="#install-387"><span class="linenos">387</span></a>
-</span><span id="install-388"><a href="#install-388"><span class="linenos">388</span></a>    <span class="c1"># remove function from items to save versions</span>
-</span><span id="install-389"><a href="#install-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="install-390"><a href="#install-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="install-391"><a href="#install-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="install-392"><a href="#install-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="install-393"><a href="#install-393"><span class="linenos">393</span></a>            <span class="n">data</span><span class="p">,</span>
-</span><span id="install-394"><a href="#install-394"><span class="linenos">394</span></a>            <span class="n">file</span><span class="p">,</span>
-</span><span id="install-395"><a href="#install-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="install-396"><a href="#install-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="install-397"><a href="#install-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="install-398"><a href="#install-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="install-399"><a href="#install-399"><span class="linenos">399</span></a>        <span class="p">)</span>
-</span><span id="install-400"><a href="#install-400"><span class="linenos">400</span></a>
-</span><span id="install-401"><a href="#install-401"><span class="linenos">401</span></a>    <span class="c1"># Validate and process each item ID</span>
-</span><span id="install-402"><a href="#install-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="install-403"><a href="#install-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="install-404"><a href="#install-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="install-405"><a href="#install-405"><span class="linenos">405</span></a>
-</span><span id="install-406"><a href="#install-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="install-407"><a href="#install-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="install-408"><a href="#install-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="install-409"><a href="#install-409"><span class="linenos">409</span></a>
-</span><span id="install-410"><a href="#install-410"><span class="linenos">410</span></a>        <span class="c1"># Process each release in reverse order</span>
-</span><span id="install-411"><a href="#install-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="install-412"><a href="#install-412"><span class="linenos">412</span></a>            <span class="c1"># Download archive file</span>
-</span><span id="install-413"><a href="#install-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="install-414"><a href="#install-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="install-415"><a href="#install-415"><span class="linenos">415</span></a>            <span class="p">)</span>
-</span><span id="install-416"><a href="#install-416"><span class="linenos">416</span></a>
-</span><span id="install-417"><a href="#install-417"><span class="linenos">417</span></a>            <span class="c1"># Optional files</span>
-</span><span id="install-418"><a href="#install-418"><span class="linenos">418</span></a>            <span class="c1"># if items.checksum:</span>
-</span><span id="install-419"><a href="#install-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="install-420"><a href="#install-420"><span class="linenos">420</span></a>            <span class="c1"># if items.signature:</span>
-</span><span id="install-421"><a href="#install-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="install-422"><a href="#install-422"><span class="linenos">422</span></a>            <span class="c1"># if items.public_key:</span>
-</span><span id="install-423"><a href="#install-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="install-424"><a href="#install-424"><span class="linenos">424</span></a>
-</span><span id="install-425"><a href="#install-425"><span class="linenos">425</span></a>            <span class="c1"># Verify Hash if available</span>
-</span><span id="install-426"><a href="#install-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="install-427"><a href="#install-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="install-428"><a href="#install-428"><span class="linenos">428</span></a>
-</span><span id="install-429"><a href="#install-429"><span class="linenos">429</span></a>            <span class="c1"># Unzip downloaded .zip</span>
-</span><span id="install-430"><a href="#install-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="install-431"><a href="#install-431"><span class="linenos">431</span></a>
-</span><span id="install-432"><a href="#install-432"><span class="linenos">432</span></a>            <span class="c1"># Extract Tables to parquet</span>
-</span><span id="install-433"><a href="#install-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="install-434"><a href="#install-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="install-435"><a href="#install-435"><span class="linenos">435</span></a>
-</span><span id="install-436"><a href="#install-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="install-437"><a href="#install-437"><span class="linenos">437</span></a>
-</span><span id="install-438"><a href="#install-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>
+            <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>
+</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></pre></div>
 
 
diff --git a/docs/api/search.js b/docs/api/search.js
index 22510e246394aa171c27e95be8d95726dff6c19f..90a3808430ea6128d38469645f9f0ea3647aba7b 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></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></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 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.yaml&#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.yaml&#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", "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", "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", "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", "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></p>\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></p>\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></p>\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></p>\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><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;opcs4&#x27;, &#x27;snomed&#x27;, &#x27;icd10&#x27;, &#x27;read3&#x27;, &#x27;atc&#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[[list], pandas.core.series.Series], typing.Callable[[list, pathlib.Path], NoneType]]]"}, "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.Icd10.trim_icd10": {"fullname": "acmc.parse.Icd10.trim_icd10", "modulename": "acmc.parse", "qualname": "Icd10.trim_icd10", "kind": "function", "doc": "<p></p>\n", "signature": "<span class=\"signature pdoc-code condensed\">(<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=\"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.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.yaml&#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.yaml&#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;opcs4&#x27;, &#x27;snomed&#x27;, &#x27;icd10&#x27;, &#x27;read3&#x27;, &#x27;atc&#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<p>Args:\n    path (Path): path of the directory to be deleted\n    msg (str): message to be displayed to the user</p>\n\n<p>Returns:\n    Boolean: True if deleted</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\">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<p>Args:\n    phen_dir (str): local directory path where the upstream repo is to be cloned\n    upstream_url (str): url to the upstream repo\n    upstream_version (str): version in the upstream repo to clone\n    new_origin_url (str, optional): url of the remote repo to set as the new origin. Defaults to None.</p>\n\n<p>Raises:\n    ValueError: if the specified version is not in the upstream repo\n    ValueError: if the upstream repo is not a valid phenotype repo\n    ValueError: if there's any other problems with Git</p>\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 class=\"o\">=</span> <span class=\"kc\">None</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<p>:param diff: DeepDiff result dictionary\n:param key_type: The type of change to extract (e.g., \"dictionary_item_added\", \"dictionary_item_removed\")\n:return: A set of clean key names</p>\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.yaml&#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.yaml&#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=\"param\">\t<span class=\"n\">file_type</span><span class=\"o\">=</span><span class=\"kc\">None</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": 3}, "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": 14}, "acmc.logging_config.set_log_level": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 17, "bases": 0, "doc": 10}, "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": 14}, "acmc.omop.write_version_file": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 16, "bases": 0, "doc": 11}, "acmc.omop.clear": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 22, "bases": 0, "doc": 7}, "acmc.omop.delete": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 22, "bases": 0, "doc": 7}, "acmc.omop.table_exists": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 35, "bases": 0, "doc": 3}, "acmc.omop.vocab_exists": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 35, "bases": 0, "doc": 3}, "acmc.omop.concept_set_exist": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 36, "bases": 0, "doc": 3}, "acmc.omop.export": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 66, "bases": 0, "doc": 3}, "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": 13, "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.Icd10.trim_icd10": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 49, "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": 45}, "acmc.phen.fork": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 62, "bases": 0, "doc": 120}, "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": 41}, "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": 74, "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": 149, "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}}, "i": {"docs": {}, "df": 0, "m": {"docs": {"acmc.parse.Icd10.trim_icd10": {"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.parse.Icd10.trim_icd10": {"tf": 1.4142135623730951}, "acmc.trud.extract_icd10": {"tf": 1}}, "df": 4}, "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.Icd10.trim_icd10": {"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": 149}}, "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.Icd10.trim_icd10": {"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": 36}}}}, "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}}, "i": {"docs": {}, "df": 0, "m": {"docs": {"acmc.parse.Icd10.trim_icd10": {"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.parse.Icd10.trim_icd10": {"tf": 1.4142135623730951}, "acmc.trud.extract_icd10": {"tf": 1}}, "df": 4}, "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, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "s": {"docs": {}, "df": 0, "t": {"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": 1}}, "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}}, "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}}}, "n": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "y": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "e": {"docs": {"acmc.parse.Proto.checks": {"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, "a": {"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.211102550927978}, "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.Icd10.trim_icd10": {"tf": 6.324555320336759}, "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.928203230275509}, "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": 7.54983443527075}, "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": 70, "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}, "acmc.phen.fork": {"tf": 1}, "acmc.trud.download_release_file": {"tf": 1}}, "df": 5}}}, "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.4142135623730951}, "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.parse.Icd10.trim_icd10": {"tf": 1.4142135623730951}, "acmc.phen.process_actions": {"tf": 1.4142135623730951}, "acmc.phen.preprocess_source_concepts": {"tf": 1.4142135623730951}, "acmc.phen.translate_codes": {"tf": 1.4142135623730951}}, "df": 7}}}}, "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}, "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.parse.Icd10.trim_icd10": {"tf": 1.4142135623730951}, "acmc.phen.process_actions": {"tf": 1.4142135623730951}, "acmc.phen.preprocess_source_concepts": {"tf": 1.4142135623730951}, "acmc.phen.translate_codes": {"tf": 1.4142135623730951}}, "df": 7}}}}}}}}, "i": {"docs": {}, "df": 0, "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}, "c": {"docs": {}, "df": 0, "t": {"docs": {"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": 7}}, "f": {"docs": {}, "df": 0, "f": {"docs": {"acmc.phen.extract_clean_deepdiff_keys": {"tf": 1}}, "df": 1}}}, "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.parse.Icd10.trim_icd10": {"tf": 1.4142135623730951}, "acmc.phen.process_actions": {"tf": 1.4142135623730951}, "acmc.phen.preprocess_source_concepts": {"tf": 1.4142135623730951}, "acmc.phen.translate_codes": {"tf": 1.4142135623730951}}, "df": 7}}}}}, "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}, "acmc.parse.Icd10.trim_icd10": {"tf": 1}}, "df": 6}}}, "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.parse.Icd10.trim_icd10": {"tf": 1.4142135623730951}, "acmc.phen.process_actions": {"tf": 1.4142135623730951}, "acmc.phen.preprocess_source_concepts": {"tf": 1.4142135623730951}, "acmc.phen.translate_codes": {"tf": 1.4142135623730951}}, "df": 7}}, "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}, "acmc.trud.download_release_file": {"tf": 1}}, "df": 6}}}, "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": 1.7320508075688772}, "acmc.logging_config.DEFAULT_LOG_FILE": {"tf": 1.7320508075688772}, "acmc.logging_config.setup_logger": {"tf": 1.4142135623730951}, "acmc.logging_config.set_log_level": {"tf": 1.4142135623730951}, "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": 1.4142135623730951}, "acmc.omop.write_version_file": {"tf": 1.4142135623730951}, "acmc.omop.clear": {"tf": 1.4142135623730951}, "acmc.omop.delete": {"tf": 1.4142135623730951}, "acmc.omop.table_exists": {"tf": 1.7320508075688772}, "acmc.omop.vocab_exists": {"tf": 1.7320508075688772}, "acmc.omop.concept_set_exist": {"tf": 1.7320508075688772}, "acmc.omop.export": {"tf": 1.7320508075688772}, "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.Icd10.trim_icd10": {"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": 2.8284271247461903}, "acmc.phen.fork": {"tf": 3.4641016151377544}, "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": 2.23606797749979}, "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": 149, "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.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": 4, "s": {"docs": {"acmc.logging_config.setup_logger": {"tf": 1}, "acmc.logging_config.set_log_level": {"tf": 1}, "acmc.phen.fork": {"tf": 1}}, "df": 3}}, "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}}, "t": {"docs": {}, "df": 0, "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}}}}}}, "r": {"docs": {"acmc.phen.check_delete_dir": {"tf": 1}, "acmc.phen.fork": {"tf": 2}}, "df": 2, "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": {"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}}}}}}}}}, "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}}}, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "g": {"docs": {"acmc.logging_config.set_log_level": {"tf": 1}}, "df": 1, "g": {"docs": {}, "df": 0, "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}}}}}}, "a": {"docs": {"acmc.logging_config.setup_logger": {"tf": 1}, "acmc.omop.install": {"tf": 1}, "acmc.omop.write_version_file": {"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": 19, "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}}, "c": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "c": {"docs": {"acmc.logging_config.set_log_level": {"tf": 1}}, "df": 1}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {"acmc.parse.InvalidCodesException": {"tf": 1}}, "df": 1}, "g": {"docs": {}, "df": 0, "s": {"docs": {"acmc.phen.check_delete_dir": {"tf": 1}, "acmc.phen.fork": {"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}}}, "l": {"docs": {}, "df": 0, "l": {"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.translate_codes": {"tf": 1}, "acmc.phen.publish": {"tf": 1}}, "df": 10, "o": {"docs": {}, "df": 0, "w": {"docs": {"acmc.parse.Proto.raise_exception": {"tf": 1}}, "df": 1}}}}, "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}}}}, "p": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"acmc.parse.Read2": {"tf": 1}}, "df": 1}}}}}, "i": {"docs": {"acmc.trud.get_releases": {"tf": 1}}, "df": 1}}, "t": {"docs": {"acmc.phen.fork": {"tf": 1}, "acmc.phen.export": {"tf": 1}, "acmc.phen.copy": {"tf": 1}}, "df": 3}}, "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}, "acmc.omop.write_version_file": {"tf": 1}, "acmc.omop.clear": {"tf": 1}, "acmc.omop.delete": {"tf": 1}}, "df": 8}}}, "f": {"docs": {"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": 14}, "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}}}}}, "t": {"docs": {}, "df": 0, "o": {"docs": {"acmc.logging_config.setup_logger": {"tf": 1}, "acmc.omop": {"tf": 1}, "acmc.omop.write_version_file": {"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.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": 17, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {"acmc.phen.construct_git_url": {"tf": 1}}, "df": 1}}}}, "h": {"docs": {}, "df": 0, "e": {"docs": {"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": 1}, "acmc.omop.write_version_file": {"tf": 1}, "acmc.omop.clear": {"tf": 1}, "acmc.omop.delete": {"tf": 1}, "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": 34, "m": {"docs": {"acmc.parse.Proto.process": {"tf": 1}}, "df": 1}, "r": {"docs": {}, "df": 0, "e": {"docs": {"acmc.phen.fork": {"tf": 1}}, "df": 1}}}, "i": {"docs": {}, "df": 0, "s": {"docs": {"acmc.omop": {"tf": 1}, "acmc.parse.Read2": {"tf": 1}, "acmc.phen": {"tf": 1}}, "df": 3}}, "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}}}, "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.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": 9}}, "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}}}}}}}}}, "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}}}, "a": {"docs": {}, "df": 0, "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}}}}}, "w": {"docs": {}, "df": 0, "o": {"docs": {"acmc.phen.diff_phen": {"tf": 1}}, "df": 1}}}, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"acmc.logging_config.setup_logger": {"tf": 1}, "acmc.omop.install": {"tf": 1}, "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": 9, "s": {"docs": {"acmc.omop.install": {"tf": 1}}, "df": 1}}}, "x": {"docs": {"acmc.parse.Proto.process": {"tf": 1}}, "df": 1}}, "o": {"docs": {}, "df": 0, "r": {"docs": {"acmc.logging_config.set_log_level": {"tf": 1}, "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": 6, "k": {"docs": {"acmc.main.phen_fork": {"tf": 1}}, "df": 1, "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}}}}, "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, "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}}}}}}}}}}}}, "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}}}}, "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.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": 7, "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.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": 12}, "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.fork": {"tf": 1.7320508075688772}, "acmc.phen.validate": {"tf": 1}}, "df": 11, "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}}}}}, "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}}}, "d": {"docs": {}, "df": 0, "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}}}}}}}}, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "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}}}}, "n": {"docs": {}, "df": 0, "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}}}}}}, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {"acmc.parse.Proto.raise_exception": {"tf": 1}}, "df": 1}}}}, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "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, "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}}}}}}}, "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}}}}}}}}, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {"acmc.phen.translate_codes": {"tf": 1}}, "df": 1, "s": {"docs": {"acmc.phen.extract_concepts": {"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}}, "df": 1}}, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {"acmc.parse.CodesError": {"tf": 1}, "acmc.parse.CodeTypeParser": {"tf": 1}}, "df": 2, "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, "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}}}}}}}, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "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}}}}}, "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, "/": {"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": {}, "df": 0, "s": {"docs": {"acmc.phen.fork": {"tf": 1}}, "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}}}}}}}}}, "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.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": 8}, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"acmc.trud.create_map_directories": {"tf": 1}}, "df": 1}}}}}}}}}, "s": {"docs": {}, "df": 0, "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}}}}}}}, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "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}, "acmc.omop.delete": {"tf": 1}}, "df": 3}}}}, "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.parse.Proto.raise_exception": {"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}}}}}}}}, "p": {"docs": {}, "df": 0, "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.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": 7, "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, "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": {"acmc.phen.extract_clean_deepdiff_keys": {"tf": 1.4142135623730951}}, "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": {"acmc.phen.construct_git_url": {"tf": 1}}, "df": 1, "h": {"docs": {"acmc.phen.check_delete_dir": {"tf": 1.7320508075688772}, "acmc.phen.fork": {"tf": 1}, "acmc.phen.extract_concepts": {"tf": 1}}, "df": 3}}}, "y": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"acmc.parse.Proto.raise_exception": {"tf": 1}}, "df": 1}}}}}}, "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.phen.fork": {"tf": 1.7320508075688772}}, "df": 1}}}}}}}}, "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": {}, "df": 0, "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}}, "df": 1}}}}}}, "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.write_version_file": {"tf": 1}, "acmc.phen.fork": {"tf": 2}, "acmc.phen.export": {"tf": 1}, "acmc.phen.copy": {"tf": 1}}, "df": 4, "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}}}}}}, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "p": {"docs": {"acmc.main.phen_map": {"tf": 1}, "acmc.trud.create_map_directories": {"tf": 1}}, "df": 2}, "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}}}}}}}, "o": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"acmc.omop": {"tf": 1.4142135623730951}, "acmc.phen": {"tf": 1.4142135623730951}}, "df": 2}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {"acmc.parse.Proto.raise_exception": {"tf": 1}}, "df": 1}}}, "e": {"docs": {}, "df": 0, "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}}}, "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}}}}}, "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}}}}, "a": {"docs": {}, "df": 0, "d": {"2": {"docs": {"acmc.parse.Read2": {"tf": 1.4142135623730951}}, "df": 1}, "docs": {}, "df": 0}}, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "n": {"docs": {"acmc.phen.extract_clean_deepdiff_keys": {"tf": 1}}, "df": 1, "s": {"docs": {"acmc.phen.check_delete_dir": {"tf": 1}, "acmc.phen.translate_codes": {"tf": 1}}, "df": 2}}}}, "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}}}}}}, "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, "d": {"docs": {"acmc.parse.InvalidCodesException": {"tf": 1}, "acmc.phen.PhenValidationException": {"tf": 1}}, "df": 2}, "s": {"docs": {"acmc.parse.Proto.raise_exception": {"tf": 1}, "acmc.phen.fork": {"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}}}}, "e": {"docs": {"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": 4, "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}}}}}}, "y": {"docs": {"acmc.parse.InvalidCodesException": {"tf": 1}, "acmc.phen.publish": {"tf": 1}}, "df": 2}, "o": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {"acmc.phen.check_delete_dir": {"tf": 1}}, "df": 1}}}}}}}, "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}}}}}, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {"acmc.parse.InvalidCodesException": {"tf": 1}, "acmc.parse.Read2": {"tf": 1}, "acmc.phen.PhenValidationException": {"tf": 1}}, "df": 3}, "r": {"docs": {}, "df": 0, "e": {"docs": {"acmc.phen.fork": {"tf": 1}}, "df": 1}}}, "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}}}}}, "e": {"docs": {"acmc.phen.extract_clean_deepdiff_keys": {"tf": 1}}, "df": 1, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"acmc.parse.CodesError": {"tf": 1}, "acmc.parse.CodeTypeParser": {"tf": 1}}, "df": 2, "s": {"docs": {"acmc.parse.Read2": {"tf": 1}, "acmc.phen.PhenValidationException": {"tf": 1}}, "df": 2}}}}}, "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.Proto.raise_exception": {"tf": 1.4142135623730951}, "acmc.phen.PhenValidationException": {"tf": 1}}, "df": 3}}}}}}}, "p": {"docs": {}, "df": 0, "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}}}}, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"acmc.phen.export": {"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}}}}}}}, "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}}}}, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"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_concepts": {"tf": 1.4142135623730951}}, "df": 9, "s": {"docs": {"acmc.phen.extract_clean_deepdiff_keys": {"tf": 1}}, "df": 1}}}}, "o": {"docs": {}, "df": 0, "t": {"docs": {"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": 12}, "n": {"docs": {}, "df": 0, "e": {"docs": {"acmc.phen.fork": {"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}}}, "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></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></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 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.yaml&#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.yaml&#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", "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", "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", "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", "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></p>\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></p>\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></p>\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></p>\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><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;read3&#x27;, &#x27;snomed&#x27;, &#x27;icd10&#x27;, &#x27;opcs4&#x27;, &#x27;atc&#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.yaml&#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.yaml&#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;read3&#x27;, &#x27;snomed&#x27;, &#x27;icd10&#x27;, &#x27;opcs4&#x27;, &#x27;atc&#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<p>Args:\n    path (Path): path of the directory to be deleted\n    msg (str): message to be displayed to the user</p>\n\n<p>Returns:\n    Boolean: True if deleted</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\">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<p>Args:\n    phen_dir (str): local directory path where the upstream repo is to be cloned\n    upstream_url (str): url to the upstream repo\n    upstream_version (str): version in the upstream repo to clone\n    new_origin_url (str, optional): url of the remote repo to set as the new origin. Defaults to None.</p>\n\n<p>Raises:\n    ValueError: if the specified version is not in the upstream repo\n    ValueError: if the upstream repo is not a valid phenotype repo\n    ValueError: if there's any other problems with Git</p>\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<p>:param diff: DeepDiff result dictionary\n:param key_type: The type of change to extract (e.g., \"dictionary_item_added\", \"dictionary_item_removed\")\n:return: A set of clean key names</p>\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.yaml&#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.yaml&#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": 3}, "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": 14}, "acmc.logging_config.set_log_level": {"qualname": 3, "fullname": 6, "annotation": 0, "default_value": 0, "signature": 17, "bases": 0, "doc": 10}, "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": 14}, "acmc.omop.write_version_file": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 16, "bases": 0, "doc": 11}, "acmc.omop.clear": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 22, "bases": 0, "doc": 7}, "acmc.omop.delete": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 22, "bases": 0, "doc": 7}, "acmc.omop.table_exists": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 35, "bases": 0, "doc": 3}, "acmc.omop.vocab_exists": {"qualname": 2, "fullname": 4, "annotation": 0, "default_value": 0, "signature": 35, "bases": 0, "doc": 3}, "acmc.omop.concept_set_exist": {"qualname": 3, "fullname": 5, "annotation": 0, "default_value": 0, "signature": 36, "bases": 0, "doc": 3}, "acmc.omop.export": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 66, "bases": 0, "doc": 3}, "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": 45}, "acmc.phen.fork": {"qualname": 1, "fullname": 3, "annotation": 0, "default_value": 0, "signature": 55, "bases": 0, "doc": 120}, "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": 41}, "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, "a": {"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.211102550927978}, "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}, "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}}}}}}}}, "i": {"docs": {}, "df": 0, "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}, "c": {"docs": {}, "df": 0, "t": {"docs": {"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": 7}}, "f": {"docs": {}, "df": 0, "f": {"docs": {"acmc.phen.extract_clean_deepdiff_keys": {"tf": 1}}, "df": 1}}}, "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": 1.7320508075688772}, "acmc.logging_config.DEFAULT_LOG_FILE": {"tf": 1.7320508075688772}, "acmc.logging_config.setup_logger": {"tf": 1.4142135623730951}, "acmc.logging_config.set_log_level": {"tf": 1.4142135623730951}, "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": 1.4142135623730951}, "acmc.omop.write_version_file": {"tf": 1.4142135623730951}, "acmc.omop.clear": {"tf": 1.4142135623730951}, "acmc.omop.delete": {"tf": 1.4142135623730951}, "acmc.omop.table_exists": {"tf": 1.7320508075688772}, "acmc.omop.vocab_exists": {"tf": 1.7320508075688772}, "acmc.omop.concept_set_exist": {"tf": 1.7320508075688772}, "acmc.omop.export": {"tf": 1.7320508075688772}, "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": 2.8284271247461903}, "acmc.phen.fork": {"tf": 3.4641016151377544}, "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": 2.23606797749979}, "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, "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.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": 4, "s": {"docs": {"acmc.logging_config.setup_logger": {"tf": 1}, "acmc.logging_config.set_log_level": {"tf": 1}, "acmc.phen.fork": {"tf": 1}}, "df": 3}}, "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}}, "t": {"docs": {}, "df": 0, "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}}}}}}, "r": {"docs": {"acmc.phen.check_delete_dir": {"tf": 1}, "acmc.phen.fork": {"tf": 2}}, "df": 2, "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": {"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}}}}}}}}}, "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}}}, "l": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "g": {"docs": {"acmc.logging_config.set_log_level": {"tf": 1}}, "df": 1, "g": {"docs": {}, "df": 0, "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}}}}}}, "a": {"docs": {"acmc.logging_config.setup_logger": {"tf": 1}, "acmc.omop.install": {"tf": 1}, "acmc.omop.write_version_file": {"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": 19, "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}}, "c": {"docs": {}, "df": 0, "m": {"docs": {}, "df": 0, "c": {"docs": {"acmc.logging_config.set_log_level": {"tf": 1}}, "df": 1}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {"acmc.parse.InvalidCodesException": {"tf": 1}}, "df": 1}, "g": {"docs": {}, "df": 0, "s": {"docs": {"acmc.phen.check_delete_dir": {"tf": 1}, "acmc.phen.fork": {"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}}}, "l": {"docs": {}, "df": 0, "l": {"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.translate_codes": {"tf": 1}, "acmc.phen.publish": {"tf": 1}}, "df": 10, "o": {"docs": {}, "df": 0, "w": {"docs": {"acmc.parse.Proto.raise_exception": {"tf": 1}}, "df": 1}}}}, "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}}}}, "p": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"acmc.parse.Read2": {"tf": 1}}, "df": 1}}}}}, "i": {"docs": {"acmc.trud.get_releases": {"tf": 1}}, "df": 1}}, "t": {"docs": {"acmc.phen.fork": {"tf": 1}, "acmc.phen.export": {"tf": 1}, "acmc.phen.copy": {"tf": 1}}, "df": 3}}, "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}, "acmc.omop.write_version_file": {"tf": 1}, "acmc.omop.clear": {"tf": 1}, "acmc.omop.delete": {"tf": 1}}, "df": 8}}}, "f": {"docs": {"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": 14}, "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}}}}}, "t": {"docs": {}, "df": 0, "o": {"docs": {"acmc.logging_config.setup_logger": {"tf": 1}, "acmc.omop": {"tf": 1}, "acmc.omop.write_version_file": {"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.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": 17, "k": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {"acmc.phen.construct_git_url": {"tf": 1}}, "df": 1}}}}, "h": {"docs": {}, "df": 0, "e": {"docs": {"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": 1}, "acmc.omop.write_version_file": {"tf": 1}, "acmc.omop.clear": {"tf": 1}, "acmc.omop.delete": {"tf": 1}, "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": 34, "m": {"docs": {"acmc.parse.Proto.process": {"tf": 1}}, "df": 1}, "r": {"docs": {}, "df": 0, "e": {"docs": {"acmc.phen.fork": {"tf": 1}}, "df": 1}}}, "i": {"docs": {}, "df": 0, "s": {"docs": {"acmc.omop": {"tf": 1}, "acmc.parse.Read2": {"tf": 1}, "acmc.phen": {"tf": 1}}, "df": 3}}, "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}}}, "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.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": 9}}, "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}}}}}}}}}, "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}}}, "a": {"docs": {}, "df": 0, "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}}}}}, "w": {"docs": {}, "df": 0, "o": {"docs": {"acmc.phen.diff_phen": {"tf": 1}}, "df": 1}}}, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"acmc.logging_config.setup_logger": {"tf": 1}, "acmc.omop.install": {"tf": 1}, "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": 9, "s": {"docs": {"acmc.omop.install": {"tf": 1}}, "df": 1}}}, "x": {"docs": {"acmc.parse.Proto.process": {"tf": 1}}, "df": 1}}, "o": {"docs": {}, "df": 0, "r": {"docs": {"acmc.logging_config.set_log_level": {"tf": 1}, "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": 6, "k": {"docs": {"acmc.main.phen_fork": {"tf": 1}}, "df": 1, "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}}}}, "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, "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}}}}}}}}}}}}, "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}}}}, "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.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": 7, "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.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": 12}, "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.fork": {"tf": 1.7320508075688772}, "acmc.phen.validate": {"tf": 1}}, "df": 11, "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}}}}}, "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}}}, "d": {"docs": {}, "df": 0, "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}}}}}}}}, "c": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "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}}}}, "n": {"docs": {}, "df": 0, "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}}}}}}, "t": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "n": {"docs": {"acmc.parse.Proto.raise_exception": {"tf": 1}}, "df": 1}}}}, "f": {"docs": {}, "df": 0, "i": {"docs": {}, "df": 0, "g": {"docs": {}, "df": 0, "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, "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}}}}}}}, "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}}}}}}}}, "c": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "p": {"docs": {}, "df": 0, "t": {"docs": {"acmc.phen.translate_codes": {"tf": 1}}, "df": 1, "s": {"docs": {"acmc.phen.extract_concepts": {"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}}, "df": 1}}, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "c": {"docs": {}, "df": 0, "k": {"docs": {"acmc.parse.CodesError": {"tf": 1}, "acmc.parse.CodeTypeParser": {"tf": 1}}, "df": 2, "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, "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}}}}}}}, "d": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "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}}}}}, "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, "/": {"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": {}, "df": 0, "s": {"docs": {"acmc.phen.fork": {"tf": 1}}, "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}}}}}}}}}, "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.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": 8}, "i": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "s": {"docs": {"acmc.trud.create_map_directories": {"tf": 1}}, "df": 1}}}}}}}}}, "s": {"docs": {}, "df": 0, "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}}}}}}}, "c": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "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}, "acmc.omop.delete": {"tf": 1}}, "df": 3}}}}, "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.parse.Proto.raise_exception": {"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}}}}}}}}, "p": {"docs": {}, "df": 0, "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.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": 7, "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, "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": {"acmc.phen.extract_clean_deepdiff_keys": {"tf": 1.4142135623730951}}, "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": {"acmc.phen.construct_git_url": {"tf": 1}}, "df": 1, "h": {"docs": {"acmc.phen.check_delete_dir": {"tf": 1.7320508075688772}, "acmc.phen.fork": {"tf": 1}, "acmc.phen.extract_concepts": {"tf": 1}}, "df": 3}}}, "y": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "h": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "n": {"docs": {"acmc.parse.Proto.raise_exception": {"tf": 1}}, "df": 1}}}}}}, "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.phen.fork": {"tf": 1.7320508075688772}}, "df": 1}}}}}}}}, "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": {}, "df": 0, "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}}, "df": 1}}}}}}, "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.write_version_file": {"tf": 1}, "acmc.phen.fork": {"tf": 2}, "acmc.phen.export": {"tf": 1}, "acmc.phen.copy": {"tf": 1}}, "df": 4, "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}}}}}}, "m": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "p": {"docs": {"acmc.main.phen_map": {"tf": 1}, "acmc.trud.create_map_directories": {"tf": 1}}, "df": 2}, "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}}}}}}}, "o": {"docs": {}, "df": 0, "d": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {"acmc.omop": {"tf": 1.4142135623730951}, "acmc.phen": {"tf": 1.4142135623730951}}, "df": 2}}}}, "r": {"docs": {}, "df": 0, "e": {"docs": {"acmc.parse.Proto.raise_exception": {"tf": 1}}, "df": 1}}}, "e": {"docs": {}, "df": 0, "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}}}, "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}}}}}, "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}}}}, "a": {"docs": {}, "df": 0, "d": {"2": {"docs": {"acmc.parse.Read2": {"tf": 1.4142135623730951}}, "df": 1}, "docs": {}, "df": 0}}, "t": {"docs": {}, "df": 0, "u": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "n": {"docs": {"acmc.phen.extract_clean_deepdiff_keys": {"tf": 1}}, "df": 1, "s": {"docs": {"acmc.phen.check_delete_dir": {"tf": 1}, "acmc.phen.translate_codes": {"tf": 1}}, "df": 2}}}}, "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}}}}}}, "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, "d": {"docs": {"acmc.parse.InvalidCodesException": {"tf": 1}, "acmc.phen.PhenValidationException": {"tf": 1}}, "df": 2}, "s": {"docs": {"acmc.parse.Proto.raise_exception": {"tf": 1}, "acmc.phen.fork": {"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}}}}, "e": {"docs": {"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": 4, "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}}}}}}, "y": {"docs": {"acmc.parse.InvalidCodesException": {"tf": 1}, "acmc.phen.publish": {"tf": 1}}, "df": 2}, "o": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "l": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "n": {"docs": {"acmc.phen.check_delete_dir": {"tf": 1}}, "df": 1}}}}}}}, "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}}}}}, "h": {"docs": {}, "df": 0, "e": {"docs": {}, "df": 0, "n": {"docs": {"acmc.parse.InvalidCodesException": {"tf": 1}, "acmc.parse.Read2": {"tf": 1}, "acmc.phen.PhenValidationException": {"tf": 1}}, "df": 3}, "r": {"docs": {}, "df": 0, "e": {"docs": {"acmc.phen.fork": {"tf": 1}}, "df": 1}}}, "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}}}}}, "e": {"docs": {"acmc.phen.extract_clean_deepdiff_keys": {"tf": 1}}, "df": 1, "r": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "o": {"docs": {}, "df": 0, "r": {"docs": {"acmc.parse.CodesError": {"tf": 1}, "acmc.parse.CodeTypeParser": {"tf": 1}}, "df": 2, "s": {"docs": {"acmc.parse.Read2": {"tf": 1}, "acmc.phen.PhenValidationException": {"tf": 1}}, "df": 2}}}}}, "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.Proto.raise_exception": {"tf": 1.4142135623730951}, "acmc.phen.PhenValidationException": {"tf": 1}}, "df": 3}}}}}}}, "p": {"docs": {}, "df": 0, "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}}}}, "o": {"docs": {}, "df": 0, "r": {"docs": {}, "df": 0, "t": {"docs": {}, "df": 0, "s": {"docs": {"acmc.phen.export": {"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}}}}}}}, "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}}}}, "n": {"docs": {}, "df": 0, "a": {"docs": {}, "df": 0, "m": {"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_concepts": {"tf": 1.4142135623730951}}, "df": 9, "s": {"docs": {"acmc.phen.extract_clean_deepdiff_keys": {"tf": 1}}, "df": 1}}}}, "o": {"docs": {}, "df": 0, "t": {"docs": {"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": 12}, "n": {"docs": {}, "df": 0, "e": {"docs": {"acmc.phen.fork": {"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}}}, "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};
 
     // mirrored in build-search-index.js (part 1)
     // Also split on html tags. this is a cheap heuristic, but good enough.
diff --git a/mkdocs.yml b/mkdocs.yml
new file mode 100644
index 0000000000000000000000000000000000000000..d2b555a075380b07bfbdb69dca3f85d3ecd1a23b
--- /dev/null
+++ b/mkdocs.yml
@@ -0,0 +1,18 @@
+site_name: ACMC Documentation
+site_url: https://acmc.readthedocs.io
+
+theme:
+  name: 'readthedocs'
+
+nav:
+  - Home: index.md
+  - API:
+      - acmc: api/acmc.html
+
+markdown_extensions:
+  - toc:
+      permalink: true
+
+plugins:
+  - search
+
diff --git a/pyproject.toml b/pyproject.toml
index 2797c27f55d70e29524664cc07cfa4a0b57d12cb..0feecc1fcdc715c676b80e09c1760501d5ce8779 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -63,6 +63,13 @@ dependencies = [
     "hatch",
 	"pytest",
  ]
+ 
+[tool.hatch.envs.documentation]
+dependencies = [
+    "mkdocs",
+    "mkdocs-material",
+    "mkdocs-rtd-theme"
+] 
 
 [tool.hatch.envs.dev]
 dependencies = [
@@ -71,6 +78,8 @@ dependencies = [
     "mypy",
     "pdoc",
     "pydoc-markdown",
+    "mkdocs",
+    "mkdocs-material"
 ]
 
 [tool.hatch.envs.dev.scripts]
diff --git a/readthedocs.yml b/readthedocs.yml
new file mode 100644
index 0000000000000000000000000000000000000000..96df65117d20a6114d181af2e0229cff9ae1c061
--- /dev/null
+++ b/readthedocs.yml
@@ -0,0 +1,16 @@
+# Read the Docs configuration file for MkDocs projects
+
+# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
+# Required
+version: 2
+
+mkdocs:
+  configuration: mkdocs.yml
+  extra_dependencies:
+    - mkdocs-material
+
+python:
+  install:
+    - method: hatch
+      path: .
+