
    d%jd#                        d dl mZ d dlZd dlZd dlZd dlmZ  ee      j                         j                  Z
g dZg dZh dZh dZdd	hZh d
ZdZd Zd Zd Zd Zd Zd Zedk(  r e        yy)    )annotationsN)Path)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row_idr   r   r   r   r	   r
   r   r   snippetverdictr   r   >   MWUSDmonthspercent>   
100% shareDigital Realty share!consolidated development projectsconsolidatedforecastactual>   $422,774 thousand$729,959 thousand$795,384 thousand$2,980,028 thousandu  
IT Load Capacity MWs (11) 3,024 2,963 2,879 2,858 2,753
Portfolio Total/Weighted Average 3,024 $5,483,541 90.1% 89.9% 2,408 $4,559,579 89.4% 89.3% 309
Total 4,640 540 $7,367,730 $5,954,884 1,169 61% $4,479,903 $11,996,533 $16,476,436 $2,980,028 $6,539,332 $9,519,360 11.4%
The backlog of signed-but-not-commenced leases at quarter-end was $1.8 billion of annualized GAAP base rent at 100% share, and $1.0 billion at Digital Realty’s share.
Grand Total at 100% Share $706,883 312.8 $183
Grand Total at DLR Share $422,774 176.0 $191
The weighted-average lag between new leases signed during the first quarter of 2026 and the contractual commencement date was nineteen months.
Development (2) $729,959 $756,758 $532,590 $565,168 $686,622
Total Direct Capital Expenditures $795,384 $929,682 $618,702 $637,485 $727,515
CapEx (Net of Partner Contributions) (4) $3,250 - $3,750 million $3,500 - $4,000 million
c                    t        j                  ddt        |             j                  dd      j                  dd      j                  dd      j	                         S )Nz\s+ $ ,%)resubstrreplacestrip)ss    c/home/dev/research_loop/runs/auto-continue-20260607T140730Z-repair-loop05/artifacts/validate_dlr.pycompactr4      sJ    66&#s1v&..s26>>s2FNNsSUV\\^^    c                 Z    t        j                  t        dz  j                  d            S )Nzextracted_rows.jsonutf-8encoding)jsonloadsBASE	read_text r5   r3   	load_rowsr?       s%    ::t33>>>PQQr5   c                    t         dz  } | j                         st               }g d}|D cg c]  }|t        |      k  rt	        |      ||dz
     d   ||dz
     d   ||dz
     d   t	        ||dz
     d         t        ||dz
     d   t              rt        j                  ||dz
     d         nt	        ||dz
     d         ||dz
     d	   ||dz
     d
   ||dz
     d   ||dz
     d   d||dz
     d   ||dz
     d   d c}S | j                  dd      5 }t        t        j                  |            cd d d        S c c}w # 1 sw Y   y xY w)Nzverification_sample_checks.csv)                  	   
               rA   r   r   r   r   r	   r
   r   r   r   PASSr   r   r   r*   r7   )newliner9   )r<   existsr?   lenr/   
isinstancelistr:   dumpsopencsv
DictReader)pathrows
sample_idsifs        r3   
load_vrowsr\   #   s   22D;;={3
 1 c$i !fAE{9-1q5k(+A;}5T!a%[56OYZ^_`cd_dZefxZy{  PA

4A;7I+J K  GJ  KO  PQ  TU  PU  KV  Wi  Kj  GkQK'q1u+l3#AE{+<=AE{#34q1u+l31q5k(+
 1 	1 
2	0 'ACNN1%&' '1' 's   CEE		Ec                 
   t         dz  } | j                         sPt         dz  }|j                         r/|j                         j                  r|j	                  dd      g fS t
        g fS g }g }t        j                  | j	                  d            D ]  }t         |d   z  }|j                         r|j                         j                  st         t        |d         j                  z  }|j                         r=|j                         j                  r#|j                  |j	                  dd             |j                  t
               |j                  |j	                  dd              dj                  |      |fS )	Nzsource_cache_manifest.jsonzdlr_2026q1_supp.txtr7   ignore)r9   errorsr8   text_cache_path
)r<   rO   statst_sizer=   FALLBACK_PRIMARY_TEXTr:   r;   r   nameappendjoin)manifest_pathfallbackr_   partssrcps         r3   load_cached_textrm   :   sF   77M!//??!8!8%%wx%H"LL$b((FEzz-1171CD 	I3())xxz!1!1d3'8#9:???H X]]_%<%<X///RS23LLghGH	I 99UV##r5   c                8   g g }}t               \  }}|j                  |       t        |      }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              t        |j                  d      t              s&|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        |
      |vr&|j	                  d| d|j                  d              t        |j                  dd            }|j                  d      dvsJt        |      t        |
      vsb|t        v r(|j	                  d| d|j                  d              |j	                  d| d |j                  d               t!        d! | D              d"k  r|j	                  d#       t#               }t        |      d$k  r|j	                  d%t        |              t        |d      D ]  \  }}t$        D cg c]  }||vs||   dv s| }	}|	r|j	                  d&| d|	        t        |j                  dd            j                  d      s|j	                  d&| d       |j                  d'      d(k7  r|j	                  d&| d)       t        |j                  d*d            |vs|j	                  d&| 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.|sd-nd.t'        d0 |D              sd-nd.t'        d1 |D              sd-nd.t'        d2 |D              sd-nd.t'        d3 |D              sd-nd.t'        d4 |D              sd-nd.t'        d5 |D              sd-nd.t        |      d$k\  rd-nd.|rt'        d6 |D              sd-nd.|rt'        d7 |D              sd-nd.d8|t        |      d9S c c}w c c}w ):N   z.minimum row count failed: expected >= 15, got rA   )r*   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   r*   zhttps://z  source_url missing or not httpsr   	supportedz( snippet_support_status is not supportedr   z1 source_snippet not found in cached source text: r   r   r   >   rangederived_qoqderived_sumweighted_average_lagz. raw value visible before unit normalization: z7 raw value not visible in cited cached-source snippet: c              3  H   K   | ]  }|j                  d       du sd  yw)r   TrA   N)get).0rs     r3   	<genexpr>zvalidate.<locals>.<genexpr>v   s      
:aeeL1T91
:s   ""rB   z;expected at least two derived rows for qoq and sum handlingrJ   z7verification CSV needs at least 12 sampled rows, found zverification row r   rM   z verdict is not PASSr   z( snippet not found in cached source textr   passfailc              3  $   K   | ]  }d |v  
 yw)missing requiredNr>   rx   es     r3   rz   zvalidate.<locals>.<genexpr>   s     0YQ1Cq1H0Y   c              3  0   K   | ]  }d |v xr d|v  yw)r   verificationNr>   r   s     r3   rz   zvalidate.<locals>.<genexpr>   s$     4sgh\Q5F5b>abKb5b4s   c              3  $   K   | ]  }d |v  
 yw)zunit not normalizedNr>   r   s     r3   rz   zvalidate.<locals>.<genexpr>   s     3_ST4IQ4N3_r   c              3  $   K   | ]  }d |v  
 yw)r   Nr>   r   s     r3   rz   zvalidate.<locals>.<genexpr>   s     0XA1Ba1G0Xr   c              3  $   K   | ]  }d |v  
 yw)r   Nr>   r   s     r3   rz   zvalidate.<locals>.<genexpr>   s     3^RS4HA4M3^r   c              3  $   K   | ]  }d |v  
 yw)derivedNr>   r   s     r3   rz   zvalidate.<locals>.<genexpr>   s     6V!yA~6Vr   c              3  0   K   | ]  }d |v xs d|v   yw)zcached source textzcached-sourceNr>   r   s     r3   rz   zvalidate.<locals>.<genexpr>   s/       @Cvw@TXY@Y@q]lpq]q@q  @Cr   c              3  0   K   | ]  }d |v xr d|v   yw)verification rowr   Nr>   r   s     r3   rz   zvalidate.<locals>.<genexpr>   s3       NM  ABN`deNeN{jvz{j{N{  NMr   c              3  0   K   | ]  }d |v xr d|v   yw)r   r~   Nr>   r   s     r3   rz   zvalidate.<locals>.<genexpr>   s3       LQ  EFL^bcLcLhz~hL  LQr   )required_fieldsminimum_row_countsource_cache_presentsource_url_presenceunit_normalizationr   r   derived_flag_handlingsnippet_provenance_cached_textverification_csv_minimum_rows"verification_csv_https_source_urls verification_csv_required_fields)status	row_countr_   warningschecksownership_basis_countsverification_sampled_row_count)rm   extendr4   rP   rf   	enumerateREQrw   UNITSOWNCLASSrQ   boolr/   
startswithNORMALIZED_ONLYsumr\   VREQany)rX   r_   r   cached_textcache_errorscached_compactrZ   rowr[   missr   rawvrowsbasiss                 r3   validater   O   s   2HF 0 2K
MM,[)N
4y2~Fs4ykRSD!$ y3Ga!3,#a&J2FGGMMD#=dVDE779&MMD#678776?%'MMD#9#''&/9JKL77$%S0MMD#A#''J[B\A]^_77'(5MMD#@I]A^@_`a#'',/6MMD#=cggl>S=TUV377<,-88DMMD#CDE77+,;MMD#KLMcgg.347>1MMD#TUXU\U\]jUkTlmn#''+r*+77$%-iinuvynz  CJ  KR  CS  oSo%$qc)WX[X_X_`mXnWo pqQC'^_b_f_fgt_u^vwx9y< 
:d
::Q>STLE
5zBOPSTYPZ|\]E1% 	[3Ha1C<3q6Z3GHHMM-aS0J4&QR377<,-88DMM-aS0PQR779'MM-aS0DEF3779b)*.@MM-aS0XYZ	[ E Q(-		#6G2H!(Lq(Pc#$%Q !'&FY-00YRX0Y-Yv_e+.t9?2>FF144slr4s1s6y033_X^3_0_&ek-00XQW0X-Xv^d033^W]3^0^&dj366Vv6V3VV\b<?  @C  |B  @C  =Cf  IO7:5zR7GVV<A#  NM  FL  NM  KM&  SY:?  LQ  JP  LQ  IQ  W]
 #(*-e*) e HH Is   4VVV&Vc                     t        t                     } t        dz  j                  t	        j
                  | dd      dz   d       | d   d	k7  rt        d
      y )Nzvalidation_report.jsonrB   F)indentensure_asciira   r7   r8   r   r{   rA   )r   r?   r<   
write_textr:   rS   
SystemExit)reports    r3   mainr      sX    ik"F	$$00F1[`1adh1hsz0{h6!m "r5   __main__)
__future__r   rU   r:   r-   pathlibr   __file__resolveparentr<   r   r   r   r   r   r   rd   r4   r?   r\   rm   r   r   __name__r>   r5   r3   <module>r      s    " 
  	 H~&& t b'^	He _R'.$*Qf zF r5   