
    +%j+                        d Z ddlmZ ddlZddlZddlmZ ddlmZm	Z	m
Z
  ee      j                         j                  Zg dZh dZh dZd	d
hZh dZddZddZddZedk(  r e        yy)zE
Validation checks for DLR extracted_rows.csv / extracted_rows.json.
    )annotationsN)Path)AnyDictList)companyperiodmetric_name	raw_valuenormalized_valueunitvalue_qualifierownership_basisforecast_or_actual
is_derived
source_urlsource_locationsource_snippetsnippet_support_status
confidencecaveat>   MWUSDmonthspercent>   
100% shareDigital Realty share!consolidated development projectsconsolidatedforecastactual>   FTTruetrueFalsefalsec                     t         dz  j                  d      5 } t        j                  |       cd d d        S # 1 sw Y   y xY w)Nzextracted_rows.jsonutf-8encoding)BASEopenjsonload)fs    c/home/dev/research_loop/runs/auto-continue-20260607T140730Z-repair-loop03/artifacts/validate_dlr.pyload_json_rowsr0   '   s;    
&
&	,	,g	,	> !yy|  s	   9Ac                   g }g }t        |       dk  r|j                  dt        |               t        | d      D ]  \  }}t        D cg c]  }||vs||   dv s| }}|r|j                  d| d|        |j	                  d      d	k7  r|j                  d| d
       |j	                  d      t
        vr&|j                  d| d|j	                  d              |j	                  d      t        vr&|j                  d| d|j	                  d              |j	                  d      t        vr&|j                  d| d|j	                  d              |j	                  d      t        vr&|j                  d| d|j	                  d              t        |j	                  dd            j                  d      s|j                  d| d       |j	                  d      dk7  r|j                  d| d       t        |j	                  dd            }t        |j	                  dd            j                  dd      j                  dd      j                  dd      }|j	                  d      d vs?|j                  dd      j                  dd      j                  dd      }	|su||	vs{|j                  d| d!|j	                  d"               | D 
cg c]  }
|
j	                  d      d#u s|
 }}
t        |      d$k  r|j                  d%       i }| D ]   }
|j	                  |
d   d&      dz   ||
d   <   " |sd'nd(t        |       ||t        d) |D              sd'nd(t        |       dk\  rd'nd(t        d* |D              sd'nd(t        d+ |D              sd'nd(t        d, |D              sd'nd(t        d- |D              sd'nd(t        d. |D              sd'nd(t        d/ |D              sd'nd(d0|d1S c c}w c c}
w )2N   z.minimum row count failed: expected >= 15, got    )start) Nzrow z missing required fields: r   DLRz company is not DLRr   z unit not normalized: r   z unsupported ownership_basis: r   z invalid forecast_or_actual: r   z invalid is_derived flag: r   r5   zhttps://z  source_url missing or not httpsr   	supportedz( snippet_support_status is not supportedr   r   $,%r   >   rangederived_qoqderived_sumweighted_average_lagz4 raw value not directly visible in compact snippet: r
   T   z;expected at least two derived rows for qoq and sum handlingr   passfailc              3  $   K   | ]  }d |v  
 yw)zmissing requiredN .0es     r/   	<genexpr>zvalidate.<locals>.<genexpr>b   s     0YQ1Cq1H0Y   c              3  $   K   | ]  }d |v  
 yw)r   NrC   rD   s     r/   rG   zvalidate.<locals>.<genexpr>d   s     4W1\Q5F4WrH   c              3  $   K   | ]  }d |v  
 yw)zunit not normalizedNrC   rD   s     r/   rG   zvalidate.<locals>.<genexpr>e   s     3_ST4IQ4N3_rH   c              3  $   K   | ]  }d |v  
 yw)r   NrC   rD   s     r/   rG   zvalidate.<locals>.<genexpr>f   s     0XA1Ba1G0XrH   c              3  $   K   | ]  }d |v  
 yw)r   NrC   rD   s     r/   rG   zvalidate.<locals>.<genexpr>g   s     3^RS4HA4M3^rH   c              3  $   K   | ]  }d |v  
 yw)derivedNrC   rD   s     r/   rG   zvalidate.<locals>.<genexpr>h   s     6V!yA~6VrH   c              3  $   K   | ]  }d |v  
 yw)r   NrC   rD   s     r/   rG   zvalidate.<locals>.<genexpr>i   s     3bVW4LPQ4Q3brH   )required_fieldsminimum_row_countsource_url_presenceunit_normalizationr   r   derived_flag_handlingsnippet_provenance)status	row_counterrorswarningschecksownership_basis_counts)lenappend	enumerateREQUIRED_FIELDSgetALLOWED_UNITSALLOWED_OWNERSHIPALLOWED_CLASSALLOWED_DERIVEDstr
startswithreplaceany)rowsrX   rY   irowfieldmissingsnippetrawcompact_snippetrderived_rowsbasis_countss                r/   validatert   ,   s    FH
4y2~Fs4ykRSD* x3&5fUc9ISQVZ[eMe5ffMMD#=gYGH779&MMD#678776?-/MMD#9#''&/9JKL77$%->>MMD#A#''J[B\A]^_77'(=MMD#@I]A^@_`a77< 7MMD#=cggl>S=TUV377<,-88DMMD#CDE77+,;MMD#KLMcgg.34#''+r*+33C<DDS"MUUVY[]^77$%-ll%ooc26>>sBGOOPSUWXOs/1$qc)]^a^e^efs^t]u vw?xB  $C!quu\':d'BACLC
<1STL [-9-=-=a@Q>RTU-VYZ-ZQ()*[ !'&FY-00YRX0Y-Yv_e+.t9?144WPV4W1W6]c033_X^3_0_&ek-00XQW0X-Xv^d033^W]3^0^&dj366Vv6V3VV\b033b[a3b0b&hn	
 #/ Q g@ Ds   PP%P
>P
c                     t               } t        |       }t        dz  j                  dd      5 }t	        j
                  ||dd       d d d        |d   d	k7  rt        d
      y # 1 sw Y   xY w)Nzvalidation_report.jsonwr'   r(   r?   F)indentensure_asciirV   r@   r3   )r0   rt   r*   r+   r,   dump
SystemExit)ri   reportr.   s      r/   mainr|   o   sq    Dd^F
)
)	/	/g	/	F ;!		&!AE:;h6!m "; ;s   A&&A/__main__)returnList[Dict[str, Any]])ri   r   r~   zDict[str, Any])r~   None)__doc__
__future__r   csvr,   pathlibr   typingr   r   r   __file__resolveparentr*   r_   ra   rb   rc   rd   r0   rt   r|   __name__rC       r/   <module>r      s~    # 
   " "H~&&& 3o X&A
@F zF r   