Ë
    6PØjñ;  ã                  ód  — d Z ddlmZ ddlZddlZddlmZmZ ddlZddlZddl	Z	ddl
mZ ddlZddlZedv rCej                  j!                  d e ee«      j'                  «       j(                  d   «      «       ddlZddlmZmZ d	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Z d„ Z!d„ Z"d„ Z#e$dk(  r e#«        yy)zQBuild a standalone illustrated LOO report from saved predictions and real inputs.é    )ÚannotationsN)ÚdatetimeÚtimezone)ÚPath)NÚ é   )ÚROOTÚreadc                ól   — t        t        | «      j                  «       j                  t        «      «      S )N)Ústrr   ÚresolveÚrelative_tor	   )Úpaths    úI/workspace/moltex-experiments/poc_experiments_v2/Summary/visual_report.pyÚrelativer      s%   € ÜŒt�D‹z×!Ñ!Ó#×/Ñ/´Ó5Ó6Ð6ó    c                óØ   — t        | «      } | j                  j                  dd¬«       | j                  | j                  dz   «      }|j                  |d¬«       |j                  | «       y )NT©ÚparentsÚexist_okz.tmpzutf-8)Úencoding)r   ÚparentÚmkdirÚwith_suffixÚsuffixÚ
write_textÚreplace)r   ÚcontentÚ	temporarys      r   Úatomicr       sZ   € Ü�‹:€D�t—{‘{×(Ñ(°ÀÐ(ÔEØ× Ñ  §¡¨vÑ!5Ó6€IØ×Ñ˜¨7ÐÔ3°Y×5FÑ5FÀtÕ5Lr   c                ó4   — t        j                  | ddd¬«      S )NF)Ú,Ú:)Úensure_asciiÚ
separatorsÚ	allow_nan)ÚjsonÚdumps)Úvalues    r   Ú	json_textr*      s   € Ü�:‰:�e¨%¸JÐRWÔXÐXr   c           	     ó  — t        j                  | d   «      5 }|d   j                  t        «      j	                  «       }|d   j                  «       }|d   j                  t        «      }ddd«       j                  «       }t        «      D ]˜  \  }}|j                  dd«      d   j                  d	«      j                  «       }|d
v r||xx   dz  cc<   ŒJ|dv r||xx   dz  cc<   Œ\t        j                  ||   «      t        j                  t        ||   «      «      z  ||<   Œš ||j	                  «       |j	                  «       j	                  «       dt        |«      z  gt        | d   «      dœS # 1 sw Y   �ŒxY w)zGSame fixed scales and validity channels used by Models.adapters.Sample.ÚprocessÚfeature_namesÚxÚfeature_validNÚ[r   éÿÿÿÿÚ])u   Â°cÚcÚdegcg     @@)ÚsÚsecg      Y@é   )ÚnamesÚrawÚscaledÚvalidÚshapeÚsource)ÚnpÚloadÚastyper   ÚtolistÚcopyÚboolÚ	enumerateÚrsplitÚrstripÚlowerÚsignÚlog1pÚabsÚlenr   )	ÚrecordÚdatar8   r9   r;   ÚvaluesÚiÚnameÚunits	            r   Ú	conditionrR   #   sL  € ä	�‰�˜	Ñ"Ô	# tØ�_Ñ%×,Ñ,¬SÓ1×8Ñ8Ó:ˆØ�3‰i�n‰nÓˆ¨¨_Ñ(=×(DÑ(DÄTÓ(J ÷ 
$ð �X‰X‹Z€FÜ˜UÖ#‰ˆˆ4Ø�{‰{˜3 Ó" 2Ñ&×-Ñ-¨cÓ2×8Ñ8Ó:ˆØÐ'Ñ'¨°«°dÑ):¬Ø�\Ñ! 6¨!£9°Ñ#4¤9ÜŸ'™' &¨¡)Ó,¬r¯x©x¼¸FÀ1¹I»Ó/GÑGˆf�QŠið	 $ð
  3§:¡:£<¸6¿=¹=»?ÐUZ×UaÑUaÓUcØœ#˜e›*‘nÐ%´¸&ÀÑ:KÓ1LñNð N÷ 
$Ñ	#ús   ™AE5Å5E?c           	     óÖ  — | d   dk7  s"| j                  d«      s| j                  d«      syd| v r| j                  d«      n| j                  d«      }|sy| j                  d«      xs | }|j                  d	«      }|j                  d
«      }t        |d   |d   |«      D ���	cg c]  \  }}}	t        |xr |xr |	du«      ‘Œ }
}}}	t        |«      t        |«      cxk(  rt        |
«      k(  st	        d«      ‚ t	        d«      ‚i d|› d| d   › d| d   › �“d|“d| d   “d| d   “d| d   “d| d   “d| d   “d| d   “d| j                  d«      “d| j                  d«      “d|“d
|“d	|“d|
“d| d   j                  dd«      “d t        |«      “d!t        | d"   «      “| d#   dz   | d$   z   | d%   t        | j                  d&g «      «      | j                  d«      rd'd)œ¥S d(d)œ¥S c c}	}}w )*z^Only eligible unseen-design tests; never substitute native metrics for null reference metrics.ÚprotocolÚleave_one_design_outÚtraining_excludedÚtrainedNÚcommon_grid_weak_fitÚweak_fitÚcommon_gridÚtargetÚpredictionsÚtraining_validÚprediction_validz!Evaluation grid dimensions differÚidÚ/Úmodel_idÚ
dataset_idÚprofileÚ	design_idÚfold_idÚproduction_statusÚ
input_sizeÚactual_input_shapeÚnative_nodesÚactual_cad_nodesÚmetricsr;   Ú	thresholdÚconfigÚscore_thresholdg      à?r=   Úprediction_sourceÚmodel_prediction_sourceÚdateÚrun_idÚlabel_statusÚactual_train_dataset_idszFrozen reference CAD nodeszNative CAD nodes)Úrunrs   Útrain_countÚgrid)ÚgetÚziprC   rK   Ú
ValueErrorr   )rL   rc   r=   Úfitrw   ÚyÚ
predictionÚaÚbÚvÚmasks              r   Úextract_caser‚   2   s¶  € àˆjÑÐ3Ò3°v·z±zÐBUÔ7VÐ^d×^hÑ^hÐirÔ^sØØ0FÈ&Ñ0Pˆ&�*‰*Ð+Ô
,ÐV\×V`ÑV`ÐakÓVl€CÙ�tØ�:‰:�mÓ$Ò.¨€DØ�‰�Ó€AØ—‘˜-Ó(€JÜ;>¸tÐDTÑ?UÐW[Ð\nÑWoÐqrÔ;sÕtÑ;s±°°1°aŒD�Ò*�qÒ*˜Q d˜]Õ+Ð;s€DÒtÜ�‹F”c˜*“oÔ2¬¨T«Ò2¼:ÐFiÓ;jÐ5jÐ2¼:ÐFiÓ;jÐ5jð	gˆD�W�I˜Q˜v jÑ1Ð2°!°F¸<Ñ4HÐ3IÐJð 	gÈIÐW^ð 	gØ˜˜zÑ*ð	gØ,8¸&ÀÑ:Nð	gØP[Ð]cÐdoÑ]pð	gà�v˜iÑ(ð	gà*=¸vÐFYÑ?Zð	gð ˜& Ñ.ð	gð 1EÀfÇjÁjÐQeÓFfð	gð ˜FŸJ™JÐ'9Ó:ð		gð =FÀsð		gð MZÐ[eð		gð
 �að	gð
 ! $ð	gð
 )4°V¸HÑ5E×5IÑ5IÐJ[Ð]_Ó5`ð	gð ”h˜vÓ&ð	gð )<¼XÀfÐMfÑFgÓ=hð	gð ˜&‘> CÑ'¨&°Ñ*:Ñ:ÈFÐSaÑLbÜ˜vŸz™zÐ*DÀbÓIÓJØ4:·J±J¸}Ô4MÐ0ò	gð 	gð Tfò	gð 	gùô us   Â# G$c                ó  — | D �cg c]&  }|€Œt        j                  |«      sŒt        |«      ‘Œ( }}t        |«      |rt        t        j                  |«      «      nd |rt        |«      nd |rt        |«      dœS d dœS c c}w )N)ÚnÚmeanÚminÚmax)r>   ÚisfiniteÚfloatrK   r…   r†   r‡   )rN   r€   r;   s      r   ÚstatsrŠ   I   sv   € Ù%ÓJ™v˜!¨©¼2¿;¹;Àq½>ŒU�1�X˜v€EÐJÜ�U“¹e¤U¬2¯7©7°5«>Ô%:ÈÙ!&”3�u”:¨DÁu¼¸U»ñXð XØRVñXð Xùò Ks   …A>�A>£A>c                óŠ  — i }| D ]+  }|j                  |d   |d   fg «      j                  |«       Œ- t        |j                  «       «      D �����cg c]S  \  \  }}}||t	        |«      dœdD ��ci c].  }|t        |D �cg c]  }|d   j                  |«      ‘Œ c}«      “Œ0 c}}¥‘ŒU c}}}}}S c c}w c c}}w c c}}}}}w )Nrc   ra   )rc   ra   Úcases)ÚbceÚaverage_precisionÚiourk   )Ú
setdefaultÚappendÚsortedÚitemsrK   rŠ   rx   )rŒ   ÚgroupsÚcaserc   ÚmodelÚgroupÚkeyr3   s           r   Ú	summarizer™   O   sÍ   € Ø€FÛˆ�v×(Ñ(¨$¨y©/¸4À
Ñ;KÐ)LÈbÓQ×XÑXÐY]Õ^�ô ,2°&·,±,³.Ô+A÷Cá+AÑ'Ñ �˜% %ð  ¨U¼SÀ»Zñ tÙNqÔrÑNqÀs�”U¹5ÓA¹5°a˜A˜i™L×,Ñ,¨SÕ1¸5ÑAÓBÑBÐNqÒròtà+AõCð CùÚAùÓrùöCs*   ÁB<Á0B6Á?B1"Â	B6Â#B<Â1B6Â6B<c                ó¨  — ddl m} ||   d   }|dk(  rd|d   d   › �n|dk(  rd|d	   d   › �n|d
k(  rd
nd}t        | d   |   «      }|j                  «       }t	        j
                  |› d|j                  › d|j                  › d|› d�j                  «       «      j                  «       dd }	||	dz   z  }
|
j                  d«      }|
j                  «       rU|j                  «       rEt        |«      }i |¥ddt        j                  |
j                  «       «      j!                  «       z   i¥S ddl}|j%                  d«       ddlm} |j*                  j-                  dddœ«       d}d}t/        j0                  |«      5 }|dk(  �rM|d   d   }t3        dt5        t/        j6                  |dz  «      «      «      }|d   dd…dd|…dd|…f   dz  }|d   dd…ddd|…dd|…f   }d d!||g}|j9                  d"dd#¬$«      \  }}||   }t;        |«      r2t=        |j?                  «       «      t=        |j3                  «       «      fnd%\  }}tA        |jB                  «      D ]f  \  }}|jE                  t.        jF                  jI                  ||    ||   «      d&||¬'«       |jK                  g d(¢|   «       |jM                  d)«       Œh d*|› d+|› d,|› d-�}�n¾|dk(  r—|d.   }|d   }|d	   d   }dd/|||g}|j9                  ddd0¬$«      \  }}tA        |«      D ]U  \  }}|jE                  |j3                  |¬1«      d2ddd3¬4«       |jK                  d5g d6¢|   z   «       |jM                  d)«       ŒW d7}�n"|d
k(  �r’|d8   } t/        jN                  |d9   «      }!|!t/        jP                  dt;        |!«      dz
  t?        d t;        |!«      «      t4        ¬:«         }"|d;   }#|#|"dd…dd…d"f   dz  }$| jR                  d   d<|d=   z   | jR                  d   | jR                  d"   g}|j9                  d"dd#¬$«      \  }}|jB                  D ]  }|jM                  d)«       Œ tA        |"«      D ]l  \  }}%|jB                  |   jE                  t.        jF                  jI                  | |%    |$|   «      d&¬>«       |jB                  |   jK                  d?|%› d@�«       Œn dA| jR                  d   › dB| jR                  d   › d,| jR                  d"   › dC|d=   › dD�	}�nŠ|d;   }#t;        |#«      }&|&|dk(  rdEndE|d=   z   g}|j9                  ddd0¬$«      \  }}|dk(  r|dF   jT                  ng }'t;        |'«      dGkD  r,|'t/        jP                  dt;        |'«      dz
  dGt4        ¬:«         }'tW        |g dH¢g dI¢«      D ]«  \  }}(})t;        |'«      r-ddJl,m-}* |j]                   |*|#|'   dd…dd…|(f   dKdL¬M«      «       |j_                  |#dd…|(d   f   |#dd…|(d   f   |#dd…d"f   dNz  dd&¬O«       |ja                  dPdQ¬R«       |jK                  |)dSz   «       |jc                  dT¬U«       Œ­ dV|&› dW�}|dk(  r|dXt;        |'«      › dY|d=   › dZ�z  }n|d[|d=   › d\dE|d=   z   › d]�z  }|d^k(  r|d_z  }ddd«       je                  «        |
jf                  ji                  d`d`¬a«       |jk                  |
dbdc¬d«       |jm                  |«       to        |«      |||deœ}tq        |ts        |«      «       i |¥ddt        j                  |
j                  «       «      j!                  «       z   i¥S # 1 sw Y   ŒºxY w)fzZScientific previews of saved arrays, with explicit display sampling and actual dimensions.r   ©ÚBY_IDÚrepresentationÚimgÚimg_Úimage_sizesÚvoxelÚvoxel_Úvoxel_sizesÚbrepÚgraphÚrepresentationsr#   z:v1Né   z.pngz.jsonÚpngzdata:image/png;base64,ÚAggé	   é
   )z	font.sizezaxes.titlesizer   r   é`   Údepth_mmg     @�@r/   é   é   é"   r7   )é   é   )Úfigsize©r   r   Úviridis)ÚcmapÚvminÚvmax)z+Xz-Xz+Yz-Yz+Zz-ZÚoffziSix actual CAD raster views, depth channel /1000 (channel 3 of 34); invalid pixels blank. Display stride z; model uses full ô   Ã—z2. The separate process vector also enters CNN/FNO.r.   é   )r±   r®   )ÚaxisÚBluesrG   )r¶   r·   r¸   ÚoriginzOccupancy max projection )úY/ZúX/ZúX/YzÍExact saved sampled-surface occupancy channel (one of four voxel channels), maximum projected along each axis. This is surface voxelization, not filled solid occupancy. Process conditions enter separately.Ú
trim_validÚ	node_face)ÚdtypeÚpos_mmr±   Úprocess_dim)r¶   z	CAD face u
    Â· Z/1000zeSix representative actual trimmed B-Rep UV faces, Z/1000 channel; each face has its own color scale. z faces enter the model at z%, with 8 geometry/mask channels plus z5 process/mask channels. Face adjacency is also input.é   Ú
edge_indexi@  ))r   r7   r´   )r   r7   )rÀ   rÁ   r¿   )ÚLineCollectionz#c5d1d9g      Ð?)ÚcolorsÚ
linewidthsiè  )r3   r5   r¶   ÚequalÚdatalim)Ú
adjustableu    Â· mmé   )Ú	labelsizezAll z3 actual CAD input nodes/points, colored by Z/1000. zEdges shown: zF (display cap 8000). Input has 12 node features, 4 edge features, and z separate process/mask values.z2Each node receives 12 geometry/mask features plus z process/mask values (z columns total).ÚtabularzgThese are the spatial rows of the tabular feature matrix; exact process values appear in the inspector.Tr   é}   Úwhite)ÚdpiÚ	facecolor)r=   ÚkindÚdescriptionr<   ):ÚModels.registryrœ   r   ÚstatÚhashlibÚsha256Úst_sizeÚst_mtime_nsÚencodeÚ	hexdigestr   Úis_filer
   Úbase64Ú	b64encodeÚ
read_bytesÚdecodeÚ
matplotlibÚuseÚmatplotlib.pyplotÚpyplotÚrcParamsÚupdater>   r?   r‡   ÚintÚceilÚsubplotsrK   r‰   r†   rD   ÚflatÚimshowÚmaÚmasked_whereÚ	set_titler¼   ÚuniqueÚlinspacer<   ÚTry   Úmatplotlib.collectionsrÉ   Úadd_collectionÚscatterÚ
set_aspectÚtick_paramsÚtight_layoutr   r   ÚsavefigÚcloser   r    r*   )+Údesignr–   rm   Ú	cache_dirrœ   rÖ   r˜   r=   ÚstampÚdigestÚoutputÚmetadataÚresultrå   Úpltr×   r<   rM   ÚsizeÚstrideÚdepthr;   ÚfigÚaxesrN   ÚloÚhirO   Úaxr.   Úvolumer¼   ÚtrimÚface_idsÚselectedÚposÚface_zÚfidr„   ÚedgesÚpairÚlabelrÉ   s+                                              r   Úpreviewr  W   s•  € å%Ø�‰<Ð(Ñ)€DØ/3°uª}ˆD�˜Ñ& qÑ)Ð*Ñ
+ÐimÐqxÒixÀFÈ6ÐR_ÑK`ÐabÑKcÐJdÑBeð  IMð  QWò  IWñ  Eð  ]d€CÜ�&Ð*Ñ+¨CÑ0Ó1€F¸6¿;¹;»=°5Ü�^‰^˜v˜h a¨¯© °a¸×8IÑ8IÐ7JÈ!ÈDÈ6ÐQTÐU×\Ñ\Ó^Ó_×iÑiÓkÐloÐmoÐp€FØ˜& 6™/Ñ*€F°v×7IÑ7IÈ'Ó7R¨HØ‡~�~Ô˜H×,Ñ,Ô.Ü�h“ˆØk�&Ðk˜%Ð!9¼F×<LÑ<LÈV×M^ÑM^ÓM`Ó<a×<hÑ<hÓ<jÑ!jÑkÐkÛØ‡N�N�5ÔÝ#Ø‡L�L×Ñ a¸2Ñ>Ô?Ø€K˜d�eÜ	�‰�Œ˜DØ�5‹=Ø˜-Ñ(¨Ñ+ˆD´c¸!¼SÄÇÁÈÈbÉÓAQÓ=RÓ6S¨VØ˜Ñ$¢Q©¨&¨±(°F°(Ð%:Ñ;¸eÑCˆEØ˜Ñ)ª!¨Q±°&°¹(¸F¸(Ð*BÑCˆEØ˜˜D $Ð'ˆEØŸ™ Q¨°6˜Ó:‰IˆC�Ø˜5‘\ˆFÜCFÀvÄ;”e˜FŸJ™J›LÓ)¬5°·±³Ó+>Ñ?ÐTZ‰FˆB�Ü" 4§9¡9Ö-‘��2Ø—	‘	œ"Ÿ%™%×,Ñ,¨e°A©h¨Y¸¸a¹ÓAÈ	ÐXZÐac�	ÔdØ—‘ÒAÀ!ÑDÔEÀrÇwÁwÈuÅ~ð .ð Fð  GMð  FNð  N`ð  aeð  `fð  fhð  imð  hnð  n`ð  aŠKØ�WŠ_Ø�S‘	ˆA A a¡D˜6°¸Ñ1FÀqÑ1I¨$ÐTUÐWXÐZ^Ð`dÐfjÐSkÈ5ØŸ™ Q¨°6˜Ó:‰IˆC�Ü% džO‘��bØ—	‘	˜&Ÿ*™*¨$˜*Ó/°gÀAÈAÐV]�	Ô^Ø—‘Ð8Ò;PÐQUÑ;VÑVÔWÐY[×Y`ÑY`ÐafÕYgð ,ð jŠKØ�V‹^Ø˜Ñ%ˆD´"·)±)¸DÀÑ<MÓ2N xØ¤§¡¨A¬s°8«}¸Q©ÄÀAÄsÈ8Ã}Ó@UÔ]`Ô aÑbˆHØ�x‘.ˆC¨3¨xººA¸qÐ/@Ñ+AÀ%Ñ+G &Ø—Z‘Z ‘] A¨¨}Ñ(=Ñ$=¸t¿z¹zÈ!¹}ÈdÏjÉjÐYZÉmÐ\ˆEØŸ™ Q¨°6˜Ó:‰IˆC�Ø—i”i� §¡¨¥�iÜ# HÖ-‘��3Ø—	‘	˜!‘×#Ñ#¤B§E¡E×$6Ñ$6¸¸S¹	°zÀ6È!Á9Ó$MÐT]Ð#Ô^Ø—	‘	˜!‘×&Ñ&¨°3°%°zÐ'BÕCð .ð Bð  CG÷  CMñ  CMð  NOñ  CPð  BQð  Qkð  lp÷  lvñ  lvð  wxñ  lyð  kzð  z|ð  }A÷  }Gñ  }Gð  HIñ  }Jð  |Kð  Kpð  qwð  xEñ  qFð  pGð  G|ð  }ŠKà�x‘.ˆC¤c¨#£h !¸À$È'Â/¹BÐWYÐZ`ÐanÑZoÑWoÐ8p°ØŸ™ Q¨°6˜Ó:‰IˆC�Ø,0°GªO�D˜Ñ&×(Ò(ÀˆEÜ�5‹z˜DÒ ¨%´·±¸A¼sÀ5»zÈ!¹|ÈTÔY\Ô0]Ñ*^ %Ü#& tÒ-BÒDYÖ#Z‘��D˜%Ü�u”:ÝEØ×%Ñ%¡n°S¸±ZÂÂ!ÀDÀÑ5IÐR[ÐhkÔ&lÔmØ—
‘
˜3šq  a¡˜y™>¨3ªq°°a±¨y©>¸SÂÀ1À¹XÀd¹]ÈaÐV_�
Ô`Ø—‘˜g°)�Ô<¸b¿l¹lÈ5ÐQYÉ>Ô>ZÐ\^×\jÑ\jÐuvÐ\jÕ\wð $[ð !  Ð#VÐWˆKØ�wŠ °¼sÀ5»z¸lð  KQð  RXð  Yfñ  Rgð  Qhð  hFð  0Gñ  !G¡ØÐ#UÐV\Ð]jÑVkÐUlð  mCð  DFð  GMð  N[ñ  G\ñ  D\ð  C]ð  ]mð  "nñ  n�+Ø�yÒ  +ð  2[ñ  #[ +÷[ 
ð\ ×ÑÔ˜Ÿ™×+Ñ+°DÀ4Ð+ÔHÈ#Ï+É+ÐV\ÐbeÐqxÈ+ÔJyÐ{~÷  |Eñ  |Eð  FIô  |JÜ  Ó(°$À{Ð]bÑc€FÜ
ˆ8”Y˜vÓ&Ô'ØeˆfÐe�eÐ5´f×6FÑ6FÀv×GXÑGXÓGZÓ6[×6bÑ6bÓ6dÑdÑeÐe÷c 
ˆús   Å=T]Ý]c                óF  — ddl m} t        | «      }t        dz  t	        |d   «      j
                  j                  z  t	        |d   «      j                  z  }|dz  }t        |d   «      }i }|d   j                  «       D ]S  \  }}t        j                  |d   d	   «      5 }	|	d
   j                  «       |	d   j                  «       dœ||<   d d d «       ŒU g i i g g f\  }
}}}}|d   D �]p  }|d   }|j                  dD �ci c]  }||j                  |«      “Œ c}«       |j                  d«      sŒJt        t	        |d   d   «      dz  «      }|d   D �ci c]  }|d   |“Œ
 }}i |d   d   ¥ddt        |d   «      z  i¥}|j                  di «      j                  «       D ]´  \  }}|j                  |||d   |d   dœ«       |d   D ]‹  }d|vrŒt        |«      }t        |||«      }|€Œ#||d      }|d   |d      }|› d |d   › d ||   d!   › �}||vrt        ||||«      ||<   ||d"<   |d   |vrt!        |«      ||d   <   |
j                  |«       Œ� Œ¶ �Œs t#        j$                  t&        j(                  «      j+                  «       |d#   |d$   ||
t-        |
«      |||||d%   |d   d   j                  d&g «      t/        | «      t/        |d   «      dt        |d   «      z  d'œ}t        d(z  j1                  «       }t3        |«      j5                  d)d*«      }|j5                  d+t        d,z  j1                  «       «      j5                  d-t        d.z  j1                  «       j5                  d/d0«      «      } | j5                  d1|«      } t7        |d2z  | «       t7        |d3z  t3        |d4   t        |
«      d5œ«      «       t7        t        d6z  d7t9        |d2z  j;                  t        dz  «      «      z   d8z   t9        |d2z  j;                  t        dz  «      «      z   d9z   «       |d   D ]Û  }|j                  d«      }!|!sŒt        dz  |!d:   z  |!d;   z  d2z  t        d<z  |!d:   z  |!d;   z  d=z  fD ]’  }"|"j=                  «       sŒ|"j1                  «       }#d>}$|$|#v rŒ+t>        j@                  jC                  |d2z  |"j
                  «      }%d?|%z   d@z   }&|#jE                  dA«      }'t7        |"|'dk\  r|#d |' |&z   |#|'d  z   n|#|&z   «       Œ” ŒÝ t7        |dBz  t3        |d4   t        |
«      t        |dC   «      t        |«      |d   D �(cg c]  }(|(d   |(dD   f‘Œ c}(dEœ«      «       tG        dF|› dGt        |
«      › dHt        |«      › dI�dJ¬K«       |S # 1 sw Y   �ŒxY wc c}w c c}w c c}(w )LNr   r›   ÚreportsÚ	directoryÚinput_previewsÚreference_prepared_manifestÚdesignsr¦   r¥   rÅ   Únode_id)Ú	positionsÚnode_idsÚlevelsÚ
image_size)r#  Únode_budgetÚ
voxel_sizeÚuv_gridÚgp_max_train_nodesÚphaseru   Úmanifest_dirzprepared_manifest.jsonÚdatasetsrb   rm   rÆ   r7   Úprocess_schemaÚmodel_resultsÚstatus_countsrg   )rc   ra   r-  rg   Úsource_metric_filesz/leave_one_design_out/rd   r`   r�   Ú	input_keyÚepochsÚmodelsÚstatusÚexcluded_train_dataset_ids)Úgenerated_atr0  r1  ÚprofilesrŒ   ÚsummaryÚinputsÚgeometryÚ
conditionsÚstatusesÚseries_statusÚ
exclusionsr=   Ú	referencerÆ   zSummary/report_template.htmlÚ<z\u003cz/* REPORT_CSS */zSummary/report.cssz/* REPORT_JS */zSummary/report.mjszexport r   ÚREPORT_DATA_JSONzresults.htmlzreport_status.jsonr4  )r4  rŒ   zreports/loo_report.htmlz9<!doctype html><meta http-equiv="refresh" content="0;url=z"><a href="z!">Open illustrated LOO report</a>rq   rr   zSummary/outputsz
index.htmlzid="illustrated-loo-report"z(<p id="illustrated-loo-report"><a href="uc   ">Illustrated LOO report: input sizes, scores, best/worst cases and metric explanations â†—</a></p>z<h1>z
build.jsonr6  r(  )r4  rŒ   Úmodel_sizesr  r5  zBuilt u   /results.html Â· u    LOO cases Â· z actual-input previewsT©Úflush)$rØ   rœ   r
   r	   r   r   rP   r“   r>   r?   rA   r‘   rx   rK   r‚   r  rR   r   Únowr   ÚutcÚ	isoformatr™   r   Ú	read_textr*   r   r    r   r   rà   Úosr   ÚrelpathÚfindÚprint))Úseries_pathrœ   Úseriesr  rÿ   r=  r8  Údidrþ   r¥   rŒ   r7  r9  r:  r5  Úlevelrc   ÚkÚpreparedÚrÚrecordsrm   r–   r  r=   rL   r•   Údatasetr˜   ÚpayloadÚtemplaterM   r   ru   r   ÚoldÚmarkerÚurlÚlinkÚindexÚls)                                            r   Úbuildr\  ›   s  € Ý%Ü�+Ó€F¬D°©N¼4ÀÀ{Ñ@SÓ;T×;[Ñ;[×;`Ñ;`Ñ,`ÔaeÐflÐmxÑfyÓaz×aÑaÑ, 	ØÐ*Ñ*€IÜ�VÐ9Ñ:Ó;€IØ€HØ  Ñ+×1Ñ1Ö3‰ˆˆVÜ�W‰W�VÐ-Ñ.¨wÑ7Ô8¸EØ*/°©/×*@Ñ*@Ó*BÐPUÐV_ÑP`×PgÑPgÓPiÑjˆH�S‰M÷ 9Ð8ð 4ð 57¸¸BÀÀBÐ4FÑ1€Eˆ6�:˜x¨Ø˜Õ!ˆØ˜Ñ%ˆ x§¡ñ  Qaó  8bñ  QaÈ1¸¸%¿)¹)ÀA»,¹ð  Qañ  8bô  (cØ�y‰y˜Ô Üœ˜U 5™\¨.Ñ9Ó:Ð;SÑSÓTˆØ.6°zÒ.BÓCÑ.B¨�1�\‘? 1Ñ$Ð.BˆÐCØ]�E˜%‘L Ñ*Ð]¨M¸1¼SÀÐJZÑA[Ó=\Ñ;\Ñ]ˆØ"ŸY™Y ¸Ó;×AÑAÖC‰MˆE�6Ø�O‰O w¸%ÐPVÐWfÑPgÐv|ð  ~Jñ  wKñ  Lô  MØ Ð!6Ô7�Ø+°6Ñ9¸8Ü˜f›�¬l¸6À7ÈFÓ.S tØ�< Ø! $ |Ñ"4Ñ5�ÀÈÑ@SÐTXÐYdÑTeÑ@f°vØ ˜	  4¨Ñ#4Ð"5°Q°u¸U±|ÐDTÑ7UÐ6VÐW�Ø˜fÑ$Ü")¨&°%¸ÀÓ"K�F˜3‘KØ$'��[Ñ!Ø˜Ñ%¨ZÑ7ÔZcÐdkÓZl¸ÀDÈÑDVÑ9WØ—‘˜TÕ"ñ 8ò Dð "ô& 'Ÿl™l¬8¯<©<Ó8×BÑBÓDÈvÐV^ÑO_ÐjpÐqyÑjzØ"¨5¼9ÀUÓ;KÐU[ÐgoØ&°(È6ÐRZÑK[Ø% eÑ,¨XÑ6×:Ñ:Ð;WÐXZÓ[Ü  Ó-¼8ÀFÐKhÑDiÓ;jØœs 9Ð-=Ñ#>Ó?Ñ?ñA€Gô Ð3Ñ3×>Ñ>Ó@€HÜ�WÓ×%Ñ% c¨)Ó4€Dà×ÑÐ1´4Ð8LÑ3L×2WÑ2WÓ2YÓZ×bÑbÐctÔvzð  |Pñ  wP÷  v[ñ  v[ó  v]÷  veñ  veð  foð  pró  vsó  t€GØ�o‰oÐ0°Ó6€GÜ
ˆ9�^Ñ# GÔ,Ü
ˆ9Ð)Ñ)¬)ÀGÈNÑD[ÔdgÐhmÓdnÑ4oÓ*pÔqÜ
Œ4Ð)Ñ)Ð*eÔfiÐktð  vDñ  lD÷  kQñ  kQô  RVð  W`ñ  R`ó  kaó  gbñ  +bð  cpñ  +pô  qtð  vð  @Nñ  vN÷  u[ñ  u[ô  \`ð  ajñ  \jó  ukó  qlñ  +lð  mPñ  +Pô  QØ˜Ô!ˆØ�i‰i˜ÓˆÙ�HÜ˜)‘^ C¨¡KÑ/°°H±Ñ=¸nÑLÌdÐSdÑNdÐehÐioÑepÑNpÐqtÐu}Ñq~ÑN~ð  @Lñ  OLó  MˆDØ—<‘<”> 8Ø—.‘.Ó"ˆCÐ-J FØ˜‰}˜hÜ—'‘'—/‘/ )¨NÑ":¸4¿;¹;ÓGˆCØ=¸cÑAð  Chñ  hˆDØ—H‘H˜VÓ$ˆEÜ�4¸Àº
˜˜F˜U˜ DÑ(¨¨U¨V¨Ò4ÈÈDÉÕQñ Mð "ô ˆ9�\Ñ!¤)¸GÀNÑ<SÔ\_Ð`eÓ\fÔuxð  zAð  BKñ  zLó  vMÜ˜V›ÐW]Ð^fÒWgÓ0hÑWgÐRS°!°L±/À!ÀGÁ*Ò1MÐWgÑ0hñ-jó #kô lä	ˆF�9�+Ð.¬s°5«z¨l¸.ÌÈVËÈÐUkÐ
lÐswÕxØÐ÷e 9Ñ8üò 8bùò DùòR 1is   Â +VÃ?V
ÅVÔ>VÖV	c                 óH  — t        j                  t        ¬«      } | j                  dt        ¬«       | j                  dd¬«       | j                  «       }|j                  xs t	        t        t        dz  «      d   «      }d }	 d }	 t        |«      }d
D �cg c](  }|t        dz  |z  j                  «       j                  f‘Œ* }}t        ||d   D �cg c]&  }|d   |d   t        |j                  di «      «      f‘Œ( c}g«      }||k7  rt        |«       |}|j                   r|rt)        d„ |d   D «       «      ry t+        j,                  d«       ŒÍc c}w c c}w # t        $ r=}	|j                   s‚ t#        dt%        |	«      j&                  › d|	› �d	¬«       Y d }	~	Œ…d }	~	ww xY w)N)r×   z--series)Útypez--watchÚ
store_true)ÚactionzExperiments/latest.jsonrL  T)zreport_template.htmlz
report.mjsz
report.csszvisual_report.pyÚSummaryr"  r#  r(  r,  z1Report refresh failed; preserving previous HTML: z: rA  c              3  ó,   K  — | ]  }|d    dk(  –— Œ y­w)r(  Ú	completedN© )Ú.0r[  s     r   Ú	<genexpr>zmain.<locals>.<genexpr>æ   s   è ø€ Ð,_ÑN^È¨Q¨w©Z¸Õ-DÑN^ùs   ‚é   )ÚargparseÚArgumentParserÚ__doc__Úadd_argumentr   Ú
parse_argsrL  r
   r	   rÙ   rÝ   r*   Úlistrx   r\  Ú	ExceptionÚwatchrJ  r^  Ú__name__ÚallÚtimeÚsleep)
ÚparserÚargsrK  ÚpreviousrL  rP   Úsource_stampsr[  Ú	signatureÚexcs
             r   Úmainrz  ×   sÚ  € Ü×$Ñ$´Ô9€F¸6×;NÑ;NÈzÔ_cÐ;NÔ;dÐfl×fyÑfyð  {Dð  LXÐfyô  gYØ×ÑÓ€D¨d¯k©kÒ.q¼TÄ$ÄtÐLeÑGeÓBfÐgoÑBpÓ=q Ø€HØ
Øˆð	nÜ˜+Ó&ˆFñ [`ó  añ  [`ÐRV˜d¤T¨)¡^°DÑ%8×$>Ñ$>Ó$@×$LÑ$LÒMð  [`ˆMð  aÜ! =Ðyð  AIò  zJó  3Kñ  zJÐtu°A°l±OÀAÀgÁJÌtÐTU×TYÑTYÐZiÐjlÓTmÓOnÒ3oð  zJñ  3Kð  #Ló  MˆIØ˜HÒ$Ü�kÔ"¨y Hð �zŠz™f¬Ñ,_ÈfÐU]ÒN^Ó,_Ô)_ÐbgÜ�
‰
�2Œð ùò aùò 3Køô ò 	nØ—:’:˜uÜÐEÄdÈ3Ãi×FXÑFXÐEYÐY[Ð\_Ð[`ÐaÐhl×mÒmûð	nús6   ÂE Â-EÃE Ã+E
Ã=E Å
E Å	F!Å$3FÆF!Ú__main__)%rj  Ú
__future__r   rh  rá   r   r   rÚ   r'   rG  Úpathlibr   Úsysrr  Ú__package__r   Úinsertr   Ú__file__r   r   Únumpyr>   Úcommonr	   r
   r   r    r*   rR   r‚   rŠ   r™   r  r\  rz  rp  rd  r   r   Ú<module>r„     s°   ðÙ WÝ "ã Û ß 'Û Û Û 	Ý Û 
Û à�*ÑØ‡H�H‡O�O�A‘s™4 ›>×1Ñ1Ó3×;Ñ;¸AÑ>Ó?Ô@ã ß ò7òMòYòNògò.XòCòAfòH9òxð& ˆzÒ™4�6Ðr   