
    G%j.                     V   d dl Z d dlZd dlmZ  ee      j                         j                  Zedz  Zedz  Z	i ddddd	d
ddddddddddddddddddddddd d!d"d#d$d%d&d'd(Z
g d)Zd*d+hZh d,Zh d-Zd. Zd/ Zd2d0Zed1k(  r ej&                   e              yy)3    N)Pathzcompany_source_manifest.csvzcompany_metric_map.yamlORCLOracleMSFT	MicrosoftAMZNAmazonGOOGLAlphabetMETAzMeta PlatformsCRWV	CoreWeaveDLRzDigital RealtyEQIXEquinixIRMzIron MountainAPLDzApplied DigitalCORZzCore ScientificIRENWULFTeraWulfCIFRzCipher MiningHUTzHut 8NBISNebiusNVDANVIDIAVertivEaton)VRTETN)companytickersource_rolesource_family
source_urlstable_locationextractable_metricscadencebasis_caveatsextraction_difficultynotesprimarysecondary_discovery>   lowhighmedium>   rpo_backlogbook_to_billcapex_actualslive_capacitysecured_powercapacity_addedcapex_guidanceequipment_orderssource_discoverylease_commitmentsrevenue_conversionpreleased_percentageconstruction_underwaydata_center_commentaryfuture_capacity_pipelinecloud_capacity_commitmentsexpected_commencement_windowc                 &    | j                  |       y )N)append)errorsmessages     f/home/dev/research_loop/runs/next3-task2-source-manifest/artifacts/validate_company_source_manifest.pyfailrH   E   s    
MM'    c            
      2   g } t         j                         st        | dt         j                          t        j                         st        | dt        j                          | rt        |       S t        j                  d      }t        D ]  }d| d|vst        | d|         t         j                  dd      5 }t        t        j                  |            }d d d        st        | d	       t        |       S t        t              t        |d
         z
  }|rt        | dt        |              t        D ci c]  }|d
 }}t               }d
}	t!        |d      D ]  \  }
}t        D ]5  }|j#                  |d      j%                         r$t        | d|
 d|        7 |j#                  dd      }|j#                  dd      }|dk7  r|t        vrt        | d|
 d|        |t&        vrt        | d|
 d|        |j#                  d      t(        vr!t        | d|
 d|j#                  d              |j#                  dd      j+                  d      st        | d|
 d       |j#                  dd      j-                  d      D cg c]#  }|j%                         s|j%                         % }}|st        | d|
 d       |D ]3  }|dk7  r|t        vrt        | d|
 d| d       |j/                  |       5 |d k(  r||v r||xx   d!z  cc<   |d"k(  s|	d!z  }	d#|j#                  d$d      j1                         vst        | d|
 d%        |j3                         D cg c]  \  }}|d
k(  s| }}}|rt        | d&|        |	d
k(  rt        | d'       t5        |      d(k  rt        | d)t5        |              t        | t5        |      t5        |      t5        |      *      S # 1 sw Y   xY wc c}w c c}w c c}}w )+Nzmissing zutf-8)encodingz  :zmetric map missing  )newlinerK   zmanifest has no rowsr   zmissing columns:    )startzrow z
: missing r#   r$   ALLz: unexpected ticker z: invalid source_role r+   z : invalid extraction_difficulty r&   zhttps://z: source_url must be httpsr(   ;z: no extractable metricsr:   z	: metric z missing from metric mapr-      r.   	secondaryr,   z2: secondary row must be labeled secondary in notesz!missing primary source rows for: z-expected at least one secondary_discovery row&   z(expected at least 38 manifest rows, got )rowstickersmetrics)MANIFESTexistsrH   name
METRIC_MAPreport	read_textREQUIRED_METRICSopenlistcsv
DictReadersetREQUIRED_COLUMNSsortedTARGETS	enumerategetstripALLOWED_ROLESALLOWED_DIFFICULTY
startswithsplitaddloweritemslen)rE   metric_textmetricfrV   missing_columnsr#   primary_by_tickermetrics_seensecondary_countirowcolrolemrX   countmissing_primarys                     rG   mainr   I   s   F??Vx/0Vx
012f~&&&8K" 9xq>,.vh789 
rG	4 'CNN1%&' V+,f~*+c$q'l:OV()@(ABC189v995LOD* [3# 	8C773#))+VtA3j67	8 2&ww}b)U?vW44s"6vh?@}$4s"8?@77*+3EE4s"B377KbCcBdefww|R(33J?4s"<=>&)gg.CR&H&N&Ns&SaWXW^W^W`1779aa4s":;< 	%F++>N0NVtA3ix7OPQV$	% 9+<!<f%*%((q O#'''2"6"<"<">>VtA3&XYZ5[8 4E3J3J3L[-&%PUYZPZv[O[V88IJK!VDE
4y2~V?D	{KL&s4y#6G2HRUVbRcddc' ' :" b \s*   O<
P	P+P5PP<Pc                     | r!t        d       | D ]  }t        d|         yt        d       t        d|        t        d|        t        d|        y)	Nz)Company source manifest validation failedz- rS   z)Company source manifest validation passedz- rows checked: z- target companies covered: z- metric labels seen: r   )print)rE   rV   rW   rX   errors        rG   r]   r]      sj    9: 	 EBug,	 	
56	TF
#$	(	
23	"7)
,-rI   __main__)r   r   r   )rb   syspathlibr   __file__resolveparentBASErY   r\   rg   re   rk   rl   r_   rH   r   r]   __name__exit rI   rG   <module>r      so   
 
 H~&&//--

H
K H Z	
  K 
 I 
?   F J O 
7  H!" H#$ ',  12.  *?eD
 zCHHTV rI   