Ë
    «…§jé  ã                   ó´   — d Z ddlZddlZddlmZ ddlmZ ddlm	Z	m
Z
mZ ddlmZ ddlmZmZmZmZmZ ddlmZmZmZmZ d	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)z@Focused executable checks for safety-critical baseline behavior.é    N)ÚPath)ÚTemporaryDirectory)ÚDGCNNSegÚFNO2dÚPhysicsConstrainedRiskGNN)ÚTabularSurrogate)ÚDatasetContractErrorÚTrainOnlyScalerÚ
masked_mseÚfit_validated_npzÚvalidated_contract_dimensions)Úfixed_physical_normalizeÚsparse_voxel_inputÚsparse_batch_collateÚsplit_embedded_unitsc                  ó\  — t        j                  ddgd¬«      } t        j                  dt        d«      g«      }t        | |t        j                  ddg«      «      }|j	                  «        t        j
                  | j                  «      j                  «       r| j                  d   d	k(  sJ ‚y )
Ng      ð?ç       @T)Úrequires_gradç        ÚnanFé   r   )ÚtorchÚtensorÚfloatr   ÚbackwardÚisfiniteÚgradÚall)ÚpÚyÚlosss      úmodels/test_baselines.pyÚ&test_masked_nan_isolated_from_gradientr#      s§   € Ü‡l�l�B�r�7¨Ô.€A´%·,±,ÀÄ5ÈÃ<Ð?PÓ2Q°ÔXbÐcdÐefÔgl×gsÑgsÐuyÐzð  uAó  hBó  YCÐSWð  EI÷  ERñ  ERô  ETÜ�>‰>˜!Ÿ&™&Ó!×%Ñ%Ô'¨A¯F©F°1©I¸ªNÐ:Ð:¨Nó    c                  óâ   — t        t        j                  d«      t        j                  d«      t        j                  dt        j                  ¬«      «       t        d«      ‚# t
        $ r Y y w xY w)Né   ©Údtypezempty target mask was accepted)r   r   ÚonesÚzerosÚboolr	   ÚAssertionError© r$   r"   Útest_empty_mask_refusedr.      sH   € Ü	”E—J‘J˜q“M¤%§*¡*¨Q£-´·±¸AÄEÇJÁJÔ0OÔ	Pä
Ð9Ó
:Ð:øô  Ò'¡Ð'ús   �AA" Á"	A.Á-A.c            	      óŽ  — t        «       j                  t        j                  ddgddgg«      t        j                  ddgddgg«      «      } t        j                  | j
                  ddg«      rUt        j                  | j                  t        j                  ddgg«      t        j                  ddgg«      «      ddgg«      sJ ‚y )	Ng      $@g     8�@g      4@TFg      .@r   g      (@)r
   ÚfitÚnpÚarrayÚallcloseÚmeanÚ	transform)Úss    r"   Ú/test_train_scaler_uses_mask_not_zero_imputationr7      s­   € ÜÓ×ÑœBŸH™H s¨4 j°#°d°Ð%<Ó=¼b¿h¹hÈÈeÈÐVZÐ[`ÐUaÐGbÓ>cÓd€AÜ�;‰;�q—v‘v˜s 2˜hÔ'¬B¯K©K¸¿¹ÄBÇHÁHÈsÐSVÈiÈ[ÓDYÔZ\×ZbÑZbÐeiÐjoÐdpÐcqÓZrÓ8sÐvxÐy{Ðu|Ðt}Ô,~Ð~Ð~Ð,~r$   c                  óæ  —  t        d«      t        j                  ddd«      «      } | j                  «       j	                  «       j                  «        t        dd¬«      } |t        j                  dddd«      «      }|j                  «       j	                  «       j                  «        |j                  d   j                  j                  �#|j                  d   j                  j                  €J ‚y )	Né   r   r&   é   )Úmodesé   é   r   )r   r   ÚrandnÚsquarer4   r   r   ÚspecÚ
weight_posr   Ú
weight_neg)r    ÚfÚouts      r"   Ú0test_dgcnn_one_point_and_fno_both_sides_backwardrE      s±   € Ø„hˆqƒk”%—+‘+˜a  !Ó$Ó%€A q§x¡x£z§¡Ó'8×'AÑ'AÔ'CÜˆA�AÔ€A™AœeŸk™k¨!¨A¨b°Ó4Ó5˜°s·z±z³|×7HÑ7HÓ7J×7SÑ7SÔ7UØ�6‰6�!‰9×Ñ×$Ñ$Ð0°Q·V±V¸A±Y×5IÑ5I×5NÑ5NÐ5ZÐZÐZÐ5Zr$   c                  ó–  — t        j                  g d¢gt         j                  «      } t        | t        j                  g d¢«      t        j                  g d¢«      «      }t        j                  |dd d…f   g d¢«      rEt        j
                  |d   t        j                  d«      «      rt        j
                  |d   d	«      sJ ‚t        t        j                  g d
¢«      «      \  }}t        t        j                  g d¢gt         j                  «      ||«      }|j                  «       g d¢k(  rt        j                  |g d¢g«      sJ ‚y )N)g     @�@g     @Ÿ@g     p§Àr   g      @)Úx_nativeÚy_nativeÚz_nativeÚcurvature_magnitude_per_mmÚvertex_area_mm2)ÚnativerL   rL   z1/mmÚmm2r   r9   )gUUUUUUÕ?gUUUUUUå?éÿÿÿÿ)r   r9   )r   é   g�íµ ÷ÆÐ>)u   ìƒ�ë¶€ì˜¨ë�„01 [Â°C]u   ê°€ì—´ì‹œê°„ [sec]u   ìœ„ì¹˜ [mm])g     @o@g      I@g     @@)u   ìƒ�ë¶€ì˜¨ë�„01u   ê°€ì—´ì‹œê°„u   ìœ„ì¹˜)ç      à?rP   rP   )	r1   r2   Úfloat32r   r3   ÚiscloseÚlogr   Útolist)Úxr    ÚnamesÚunitsÚscaleds        r"   ÚHtest_unit_aware_normalization_preserves_common_native_axes_and_curvaturerY      s  € Ü‡h�hÒ*Ð+¬B¯J©JÓ7€AÜ˜q¤§¡Ò*{Ó!|Ô}÷  ~Fñ  ~Fò  Gpó  ~qó  r€AÜ�;‰;�q˜˜2˜A˜2˜‘wš|Ô,´·±¸A¸c¹FÄ2Ç6Á6È!Ã9Ô1MÔRT×R\ÑR\Ð]^Ð_bÑ]cÐdhÔRiÐiÐiÜ$¤R§X¡XÒ.iÓ%jÓk�K€Eˆ%Ü#¤B§H¡HªoÐ->¼r¿z¹zÓ$JÈ5ÐQVÓW€FØ�<‰<‹>ÒEÒEÌ"Ï+É+ÐV\Ò^hÐ]iÔJjÐjÐjÐJjr$   c                  ó¸  — t        d«       t        d«      ‚# t        $ r Y nw xY wt        «       5 } t	        | «      dz  }t        j                  dt
        j                  ¬«      j                  dd«      }|d d …d d…f   }t        j                  |t        «      }t        j                  |t        «      }t        j                  |||||t        j                  g d	¢«      t        j                  d
gdz  «      ¬«       t        t        dd«      |t	        | «      dz  d¬«      }|d   dk(  rt	        | «      dz  j                  «       sJ ‚	 d d d «       y # 1 sw Y   y xY w)Nz/data_processed/tabular/process_and_geometry.npzz+current unlabeled tabular data was acceptedz	valid.npzé   r'   é   rO   r   )Úar]   Úbr^   Úcr_   Úexternally_validated)rU   Úfeature_validr    Útraining_validÚgroup_idÚlabel_statusr:   zckpt.pt)ÚepochsÚstatusÚtrained)r   r,   r	   r   r   r1   ÚarangerQ   ÚreshapeÚ	ones_liker+   Úsavezr2   r   r   Úexists)Útdr   rU   r    ÚmaskÚvalidÚresults          r"   ÚTtest_training_contract_refuses_current_unlabeled_data_and_accepts_grouped_valid_demorq   %   s`  € Ü	&Ð'XÔ	YäÐLÓMÐ
Møô  Ò%¡Ð%úä	Ô	 Ü
ˆr‹(�;Ñ
ˆ¤"§)¡)¨B´R·Z±ZÔ"@×"HÑ"HÈÈ1Ó"M ÐQRÒSTÐUWÐVWÐUWÐSWÑQXÈqÔ_a×_kÑ_kÐlmÔnrÓ_sÐZ^Ô{}÷  |Hñ  |Hð  IJô  KOó  |PÐuzÜ
�‰��Q T¨A¸UÌBÏHÉHÒUnÓLoÔ}÷  ~Fñ  ~Fð  H^ð  G_ð  `añ  Gaó  ~bõ  	cÜ Ô!1°!°AÓ!6°q¼¸b»À)Ñ9KÐSTÔUˆØ�hÑ Ò*´°R³¸Ñ0B×/JÑ/JÔ/LÐLÐLÐ/L÷	 
×	Ñ	ús   � —	#¢#°DEÅEc                  ó¨  — t        «       } t        | d   | d   «      \  }}|j                  t        j                  k(  r<|j
                  t        | d   «      dfk(  rt        j                  |d d …df   dk(  «      sJ ‚t        j                  |d d …dd …f   | d   «      rB|j
                  d   |j
                  d   k(  r#t        j                  |«      j                  «       sJ ‚dd l
}ddlm}  ||j
                  d   «      }|j                  t        j                   |«      t        j                   |«      ¬«      } ||«      }t        j"                  t        j$                  |j&                  d¬«      t        j$                  |j&                  d¬«      «      r-t        j                  |j(                  «      j                  «       sJ ‚y # t        $ r Y y w xY w)	NÚcoordsÚfeaturesrO   r   r   )ÚSparseUNetOptional)rt   Úcoordinates)Údim)r   r   r(   r1   Úint32ÚshapeÚlenr   Úarray_equalr   ÚMinkowskiEngineÚImportErrorÚmodels.architecturesru   ÚSparseTensorr   Ú	as_tensorÚequalÚuniqueÚCÚF)Údr_   rC   ÚMEru   ÚmodelÚinprD   s           r"   Ú9test_sparse_npz_schema_and_minkowski_coordinate_collationr‰   /   sa  € ÜÓ€AÔ 4°Q°x±[ÀÀ:ÁÓ O™C˜A˜aØ�7‰7”B—H‘HÒ §¡¬3¨q°©{Ó+;¸AÐ*>Ò!>Ä2Ç6Á6È!ÊAÈaÈCÉ&ÐRSÉ)ÔCTÐTÐTÜ�>‰>˜!šA˜a™b˜D™' ! H¡+Ô.°1·7±7¸1±:¸q¿w¹wÀq¹zÒ3IÌbÏkÉkÐZ[Ën×N`ÑN`ÔNbÐbÐbÛ	%å7Ù
˜QŸW™W Q™ZÓ
(€E¨b¯o©oÄuÇÁÐWXÓGYÔfk×fuÑfuÐvwÓfx¨oÓ.y¨#Ùˆc‹
€CÜ�;‰;”u—|‘| C§E¡E¨aÔ0´·±¸c¿e¹eÈÔ1JÔKÔPU×P^ÑP^Ð_b×_dÑ_dÓPe×PiÑPiÔPkÐkÐkÐPkøô	 Ò™Ðús   Ã!G Ç	GÇGc                  ón  — t        dddddd¬«      } t        j                  dd«      }t        j                  g d¢g d	¢g«      }t        j                  dd«      }t        j                  g d
¢«      }t        j                  dd«      } | |||||«      }|d   j                  dk(  r|d   j                  dk(  sJ ‚t        j
                  |d   |d   j                  «       k\  «      sJ ‚t        d„ |j                  «       D «       «      j                  «        t        d„ | j                  «       D «       «      sJ ‚y )NrO   r&   r9   r:   r   )Únode_dimÚedge_dimÚ
global_dimÚdefect_typesÚwidthÚstepsé   )r   r   r&   r9   )r   r&   r9   rO   )r   r   r   r   r   Ú
risk_logit)r‘   Údefect_type_logits)r&   r&   Údeformation_magnitudeÚsigned_normal_deformationc              3   óX   K  — | ]"  }|j                  «       j                  «       –— Œ$ y ­w©N)r?   r4   )Ú.0Úvalues     r"   Ú	<genexpr>zHtest_physics_risk_gnn_shapes_and_magnitude_constraint.<locals>.<genexpr>A   s    è ø€ Ð8©< %ˆ�‰‹×Ñ×©<ùs   ‚(*c              3   ó–   K  — | ]A  }|j                   d uxr- t        j                  |j                   «      j                  «       –— ŒC y ­wr—   )r   r   r   r   )r˜   r   s     r"   rš   zHtest_physics_risk_gnn_shapes_and_magnitude_constraint.<locals>.<genexpr>B   s:   è ø€ Ð_ÑL^Àqˆq�v‰v˜TÐ!ÒB¤e§n¡n°Q·V±VÓ&<×&@Ñ&@Ó&BÓBÑL^ùs   ‚AA	)r   r   r>   r   ry   r   ÚabsÚsumÚvaluesr   Ú
parameters)r‡   ÚnodeÚedgeÚattrÚbatchÚprocessrD   s          r"   Ú5test_physics_risk_gnn_shapes_and_magnitude_constraintr¥   :   s  € Ü
#¨Q¸ÀQÐTUÐ\]ÐdeÔ
f€EÜ	�‰�Q�qÓ	€D¤§¡ªiº	Ð-BÓ C˜4Ì%Ï+É+ÐVWÐXYÓJZÀTÜ
�,‰,’{Ó
#€E¬U¯[©[¸¸1Ó-= WÙˆd�4˜˜W UÓ+€CØˆ|Ñ×"Ñ" DÒ(¨SÐ1EÑ-F×-LÑ-LÈeÒ-SÐSÐSÜ�9‰9�SÐ0Ñ1°SÐ9TÑ5U×5YÑ5YÓ5[Ñ[Ô\Ð\Ð\ÜÑ8¨3¯:©:¬<Ó8Ó8×AÑAÔCÜÑ_ÈE×L\ÑL\ÔL^Ó_Ô_Ð_Ñ_r$   ) Ú__doc__Únumpyr1   r   Úpathlibr   Útempfiler   r~   r   r   r   r   Úmodels.trainingr	   r
   r   r   r   Úmodels.datar   r   r   r   r#   r.   r7   rE   rY   rq   r‰   r¥   r-   r$   r"   Ú<module>r¬      sW   ðÙ FÛ Û Ý Ý 'ß KÑ KÝ 1ß Õ ß pÓ pò;ò;ò
ò[ò
kòMò	ló`r$   