ó
    J©j/%  ã                  óÄ  • S SK Jr  S SKJr  S SKJr  S SKrS SKrS SKrS SK	r	S SK
r
S SKrS SKrS SKr\" \5      R                  5       R                   S   r\S-  r\S-  S-  r\S-  S	-  r\S
-  r\	R,                  " S5      r/ SQrSSSS.rSSS.r " S S\5      r " S S\5      rS"S jrS rS#S jr S r!S$S%S jjr"S r#S&S jr$S'S jr%S  r&\'S!:X  a  \(" \&" 5       5      eg)(é    )Úannotations)ÚPath)ÚurlparseNé   ÚlearnerÚevidenceÚruntimezruntime-status.jsonztoolchain-policy.jsonz__TODO_[A-Z0-9_]+__)
ÚDAT009_EVIDENCE_EXACTÚDAT009_EVIDENCE_ANNÚDAT009_EVIDENCE_LEXICALÚDAT009_EVIDENCE_FUSIONÚDAT009_EVIDENCE_FILTERÚDAT009_EVIDENCE_ACCEPTANCEÚ DAT009_PROBE_EXACT_VS_ANN_RECALLÚ"DAT009_PROBE_FILTER_CANDIDATE_LOSSÚ$DAT009_PROBE_EMBEDDING_VERSION_BREAKÚ!DAT009_PROBE_NAIVE_SCORE_ADDITION)z<=>Úvector_cosine_ops)z<->Úvector_l2_ops)z<#>Úvector_ip_ops)ÚcosineÚl2Úinner_productzhnsw.ef_searchzivfflat.probes)ÚhnswÚivfflatc                  ó   • \ rS rSrSrg)ÚSafetyErroré   © N©Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__static_attributes__r   ó    Ú‚/mnt/data/dat009_macroc_work/q2/PO068_DAT-009/F2-L4/DAT-009_ACCEPTED_CANDIDATE_QUERY2/lab/DAT009-LAB1/learner/src/run_local_lab.pyr   r      s   † ¢r&   r   c                  ó   • \ rS rSrSrg)ÚSubmissionErroré   r   Nr    r   r&   r'   r)   r)      s   † ¢Tr&   r)   c                óf   • [         R                  " U R                  5       5      R                  5       $ ©N)ÚhashlibÚsha256Ú
read_bytesÚ	hexdigest)Úps    r'   r.   r.      s   € ¤§¢¨q¯|©|«~Ó >× HÑ HÓ JÐJr&   c                 óR   • [         R                  " [        R                  5       5      $ r,   )ÚjsonÚloadsÚPOLICY_PATHÚ	read_textr   r&   r'   Úload_policyr7      s   € œ$Ÿ*š*¤[×%:Ñ%:Ó%<Ó=Ð=r&   c                óZ   • [         R                  [        R                  " U SS9S-   5        g )Nr   ©ÚindentÚ
)ÚSTATUS_PATHÚ
write_textr3   Údumps)Úos    r'   Úwrite_statusr@      s   € œ+×0Ñ0´·²¸AÀQÑ1GÈÑ1LÕMr&   c                óJ   • SU SSSS S S S S 0 S SUS.nUR                  U5        U$ )NÚDAT009_RUNTIME_STATUS_v2FÚNOT_RUN)ÚschemaÚstatusÚruntime_claimableÚ*actual_postgresql_runtime_evidence_claimedÚ8actual_exact_ann_lexical_fusion_latency_evidence_claimedÚpostgresql_version_numÚpgvector_versionÚdatabase_identityÚ
host_classÚgenerated_schemaÚinput_sha256Úruntime_receiptÚcleanup_statusÚreason)Úupdate)rE   rQ   Úextrar?   s       r'   Úbase_statusrT      s@   € Ø*°FÈuØ49ÐuzØ $¸ÐQUÐcgÐ{Ø¨4ÀÐTZñ\€Að ‡H�HˆU„O˜A�Xr&   c                ó"  • U=(       d
    [        5       nUS:w  a  [        S5      e[        U 5      nUR                  S;  a  [        S5      eUR                  =(       d    SR                  5       nU[        US   5      ;  a  [        S5      eUR                  =(       d    SR                  S5      R                  S	S
5      S   nUS   nUR                  U5      (       a  XV:X  a  [        S5      eUR                  5       S;   a  [        S5      eSUS.$ )NÚYESz(explicit disposable confirmation missing>   ÚpostgresÚ
postgresqlzunsupported database URL schemeÚ Úallowed_hostsz"database host is not loopback-onlyÚ/Ú?é   r   Údatabase_name_prefixz3database name is outside disposable prefix contract>   rW   Ú	template0Ú	template1z!system/default database forbiddenÚLOOPBACK_ONLY)rL   rK   )r7   r   r   ÚschemeÚhostnameÚlowerÚsetÚpathÚlstripÚsplitÚ
startswith)ÚurlÚconfirmationÚpolicyÚuÚhostÚdbÚprefs          r'   Úvalidate_targetrq   #   sî   € Ø×"”[“]€FØ�UÓ¤+Ð.XÓ"YÐYÜˆsƒm€AØ‡x�xÐ0Ó0¼ÐDeÓ8fÐ2fØ
�*‰*×
˜×	!Ñ	!Ó	#€DØ”3�v˜oÑ.Ó/Ó/´{ÐCgÓ7hÐ1hØ	�‰��"×Ñ˜SÓ!×'Ñ'¨¨AÓ.¨qÑ1€BØ	Ð&Ñ	'€DØ�=‰=˜×Ñ "£(´+Ð>sÓ2tÐ,tØ	‡x�xƒzÐ9Ó9ÄÐMpÓAqÐ;qØ(¸RÑ@Ð@r&   c                óh  • / nU  H©  nUR                  5       (       d   UR                  SUR                  -   5        M8  [        R	                  UR                  5       5      nU(       d  Md  UR                  SUR                  -   S-   SR                  [        [        U5      5      5      -   5        M«     U$ )NzMISSING:zUNRESOLVED:Ú:Ú,)	ÚexistsÚappendÚnameÚTODO_REÚfindallr6   ÚjoinÚsortedre   )ÚpathsÚbadr1   Úhitss       r'   Úunresolved_submissionr   0   s‚   € Ø
€CÛˆØ�x‰x�z‰z˜3Ÿ:™: j°·±Ñ&7Ô8¹(Ü�_‰_˜QŸ[™[›]Ó+ˆßˆ4�—‘˜M¨!¯&©&Ñ0°Ñ4°S·X±X¼fÄSÈÃYÓ>OÓ5PÑPÖQñ ð €Jr&   c                óì  ^ • U 4S jnU" SS5      nU" SS5      S   nU" SS5      nU" S	S
5      nUS   [         ;  d  USS  [         US      :w  a  [        S5      eU[        ;  a  [        S5      eUS   [        U   :w  a  [        S5      eUS   (       a
  US   (       d  [        S5      e[        R                  " ST [        R
                  5      (       a  [        S5      eUS   US   US   X4S   US   S.$ )Nc                óº   >• [         R                  " U T[         R                  5      nU(       d  [        SU-   5      e[	        S UR                  5        5       5      $ )Nzmissing c              3  ó\   #   • U  H"  oR                  5       R                  5       v •  M$     g 7fr,   )Ústriprd   )Ú.0Úxs     r'   Ú	<genexpr>Ú:parse_submission_contract.<locals>.grab.<locals>.<genexpr><   s   é € Ð;²
¨1—W‘W“Y—_‘_×&Ð&²
ùs   ‚*,)ÚreÚsearchÚMr)   ÚtupleÚgroups)ÚpatternÚlabelÚmÚtexts      €r'   ÚgrabÚ'parse_submission_contract.<locals>.grab9   sB   ø€ Ü
�)Š)�G˜D¤§¡Ó
&ˆÞœ¨
°5Ñ(8Ó9Ð9ÜÑ;°·±´
Ó;Ó;Ð;r&   z;^--\s*DAT009_METRIC_PAIR:\s*([^|\n]+)\|([^|\n]+)\|([^\n]+)$zmetric pairz$^--\s*DAT009_ANN_FAMILY:\s*([^\n]+)$z
ANN familyr   z1^--\s*DAT009_ANN_PARAMETER:\s*([^=\n]+)=([^\n]+)$zANN parameterz+^--\s*DAT009_FUSION:\s*([^|\n]+)\|([^\n]+)$zfusion declarationr]   z'metric/operator/operator-class mismatchzunsupported ANN familyz'ANN parameter does not match ANN familyz(fusion method/parameter must be explicitzUlexical_score\s*\+\s*(distance|similarity)|(distance|similarity)\s*\+\s*lexical_scorez4naive raw lexical/vector score addition is forbiddenr   )ÚmetricÚdistance_operatorÚoperator_classÚ
ann_familyÚann_parameter_nameÚfusion_method)Ú
METRIC_MAPr)   Ú	ANN_PARAMrˆ   r‰   ÚI)r�   r‘   r“   ÚfamÚparamÚfusions   `     r'   Úparse_submission_contractrŸ   8   s1  ø€ õ<ñ ÐNÈ}Ó]€FÙÐ4°\ÓBÀ1ÑE€CÙ
ÐCÀOÓ
T€EÙÐ>Ð?SÓT€FØˆa�yœ
Ó" f¨Q¨R j´*¸VÀA¹YÑ2GÓ&GÌð  `Ió  PJð  JJØ
”)Ó¤?Ð3KÓ#LÐLØˆQ�x”˜3‘Ó¤Ð7`Ó'aÐ!aØ�!�9˜F 1ŸI¬_Ð=gÓ-hÐ'hÜ	‡y‚yÐiÐjnÔoq×osÑos×tÑtÜÐTÓUÐUØ˜A‘Y°6¸!±9ÈfÐUVÉiÐehð  EFñ  Gð  X^ð  _`ñ  Xañ  bð  br&   c           	     ój   • [         R                  " U [         R                  [         R                  SXS9$ )NT)ÚstdoutÚstderrr�   ÚenvÚtimeout)Ú
subprocessÚrunÚPIPE)Úcmdr£   r¤   s      r'   Úrun_cmdr©   I   s+   € ¬
¯ª°sÄ*Ç/Á/ÔYc×YhÑYhÐnrÐwzñ  )Lð  "Lr&   c                 óº  • [        5       n [        R                  R                  U S   S5      n[        R                  R                  S5      S:X  a  SOSn[	        XU 5      n[        R                  " S5      nU(       d   [        [        SR0 UD65        [        S	5        g
[        S-  [        S-  /n[        U5      nU(       a1  [        [        SSR                  U5      40 UD65        [        S5        g[        US   R!                  5       5      n["        R%                  5       (       a  [        R&                  " ["        5        ["        R)                  SS9  [        R                  R+                  5       n	[        U S   5      U	S'   SU S    S3U	S'   Sn
[-        USSUSS S!U
/U	5      nUR.                  (       a  [        [        SS0 UD65        g#UR0                  R3                  5       (       a+  UR0                  R3                  5       R5                  5       S$   OSnUR7                  S%5      n[9        U5      S
:w  a  [        [        ST0 UD65        g&Uu  pïnXãS'   :w  d  UR;                  S(5      (       a	  UU S)   :w  a  [        [        SU0 UDUUS*.D65        g+S,[<        R>                  " S#5      -   n[        S--  [        S.-  /UQnU Vs0 s H0  nURA                  [B        5      RE                  5       [G        U5      _M2     nnS/S0U S1U S23-   nU H8  nUS3URH                   S43UR!                  5       -   S5URH                   S43-   -  nM:     ["        S6-  nURK                  U5        ["        S7-  n["        S8-  nS nS n [-        USUSS S9[        U5      /U	S:S;9nURK                  UR0                  5        URK                  URL                  5        [-        USUSS S!S=U S>3/U	S?S;9nUR!                  5       n[R         Vs0 s H	  nUUU;   _M     nn[U        URW                  5       5      nUS L=(       a    UR.                  S:H  nUR.                  S:H  n S@UUXãSA   UUUUc  S OUR.                  UUR.                  U (       a  SBOSC[G        U5      [G        U5      [G        U5      SD.n!["        SE-  n"U"RK                  [X        RZ                  " U!SSF9S4-   5        U=(       a    U =(       a    Un#[        U#(       a  SGOS"U#(       a  SHOSIUUXãSA   UUSJU (       a  SBOSCSK9
n$U#U$SL'   U#U$SM'   U#U$SN'   [        U$5        [        U#(       a  SOOSP5        U#(       a  S$ SQ$ ! [
         a4  n[        [        S[        U5      5      5        [        SU5         S nAgS nAff = f! [
         a5  n[        [        S[        U5      40 UD65        [        SU5         S nAgS nAff = fs  snf ! [N        RP                   aV  nURK                  UR0                  =(       d    S5        URK                  URL                  =(       d    SS<-   5         S nAGNlS nAff = f! [-        USUSS S!S=U S>3/U	S?S;9nf = fs  snf )VNÚdatabase_url_envrY   Ú MAKNOW_DAT009_CONFIRM_DISPOSABLErV   ÚREFUSED_BY_SAFETY_GATEzREFUSED:r   Úpsqlz"NOT RUN: psql binary not availableé   z"submission/03_hybrid_workbench.sqlz submission/04_failure_probes.sqlÚREFUSED_INCOMPLETE_SUBMISSIONz; zREFUSED: incomplete submissioné   r   ÚREFUSED_SUBMISSION_CONTRACTé   T)ÚparentsÚconnect_timeout_secondsÚPGCONNECT_TIMEOUTz-c statement_timeout=Ústatement_timeout_msz -c lock_timeout=3000Ú	PGOPTIONSz¥SELECT current_database() || '|' || current_setting('server_version_num') || '|' || COALESCE((SELECT extversion FROM pg_extension WHERE extname='vector'),'MISSING');z-Xz-Atz-vzON_ERROR_STOP=1z-cÚRUN_FAILED_NONCLAIMABLEé   éÿÿÿÿÚ|é   rK   Ú18rJ   )rI   rJ   é   Úmaknow_dat009_zsql/01_schema.sqlzsql/02_seed.sqlz\set ON_ERROR_STOP on
zCREATE SCHEMA "z";
SET search_path TO "z", public;
z

-- BEGIN r;   z
-- END zruntime.sqlzpostgresql.stdout.txtzpostgresql.stderr.txtz-fé(   )r¤   z	
TIMEOUT
zDROP SCHEMA IF EXISTS "z
" CASCADE;é   ÚDAT009_RUNTIME_RECEIPT_v1rL   ÚPASSÚFAIL)rD   rI   rJ   rK   rL   rM   Úsubmission_contractrN   Úexecution_returncodeÚrequired_markersÚcleanup_returncoderP   Úruntime_sql_sha256Ústdout_sha256Ústderr_sha256zrunner-receipt.jsonr9   ÚRAN_REAL_POSTGRESQLzall runtime gates passedz2execution, evidence-marker, or cleanup gate failedz,learner/evidence/runtime/runner-receipt.json)rI   rJ   rK   rL   rM   rN   rO   rP   rF   rG   rH   zPASS REAL POSTGRESQL RUNTIMEzNONCLAIMABLE RUNTIME FAILUREé	   )ÚNOT_RUN_MISSING_PSQLzpsql binary not available)r¹   z#server/vector identity probe failed)r¹   z&server/vector identity probe malformed)Ú$REFUSED_VERSION_OR_IDENTITY_MISMATCHzAdatabase identity, PostgreSQL major, or pgvector version mismatch).r7   ÚosÚenvironÚgetrq   Ú	Exceptionr@   rT   ÚstrÚprintÚshutilÚwhichÚLEARNERr   rz   rŸ   r6   ÚRUNTIME_DIRru   ÚrmtreeÚmkdirÚcopyr©   Ú
returncoder¡   rƒ   Ú
splitlinesrh   Úlenri   ÚsecretsÚ	token_hexÚrelative_toÚROOTÚas_posixr.   rw   r=   r¢   r¥   ÚTimeoutExpiredÚREQUIRED_MARKERSÚallÚvaluesr3   r>   )%rl   rj   ÚconfirmÚtargetÚer®   Úsubmissionsr}   Úsub_contractr£   Ú	probe_sqlÚprobeÚlineÚpartsro   Úversion_numÚ
vector_verrD   Úinputsr1   ÚhashesÚcombinedÚruntime_sqlÚoutÚerrÚexec_resultÚcleanupr¡   r�   ÚmarkersÚ
markers_okÚexecution_okÚ
cleanup_okÚreceiptÚrpÚ	claimableÚsts%                                        r'   Úmainr  K   sW  € Ü‹=€FœbŸj™jŸn™n¨VÐ4FÑ-GÈÓK˜#Ô^`×^hÑ^h×^lÑ^lð  nPó  _Qð  SXó  _XÑUZð  ^`ÈWÜ ¨FÓ3ˆô 
�Š�fÓ	€DÞÜ”[Ñ]ÐV\Ñ]Ô^Ô`eð  gKô  aLð  UVÜÐ=Ñ=¼gÐFhÑ>hÐi€KÜ˜kÓ*€CÞ
Ü”[Ð!@ÀÇÁÈ3ÃÑYÐRXÑYÔZÔ\að  cCô  ]Dð  MNÜ/°¸A±×0HÑ0HÓ0JÓKˆô ×Ñ×ÑœVŸ]š]¬;Ô7Ü×Ñ˜dÐÑ#Ü
�
‰
�‰Ó€C´C¸Ð?XÑ8YÓ4Z˜3Ð2Ñ3ð  pEð  FLð  Mcñ  Fdð  Eeð  ezð  n{Ð\_Ð`kÑ\lð v€IÜ
�4˜˜U 3 tÐ,=¸dÀ9ÐMÈcÓ
R€EØ××Ü”[ÑjÐciÑjÔkÐtuØ27·,±,×2DÑ2D×2FÑ2Fˆ�‰×	Ñ	Ó	×	(Ñ	(Ó	*¨2Ò	.ÈB€DØ
�*‰*�S‹/€EÜ
ˆ5ƒz�1ƒ}Ü”[ÑmÐflÑmÔnÐwxØ#Ñ€B�:Ø	Ð%Ñ&Ó&¨k×.DÑ.DÀT×.JÑ.JÈjÐZ`ÐasÑZtÓNtÜ”[ñ  Uð  OUð  Uð  mxð  JTó  Uô  	Vð  _`ØœG×-Ò-¨aÓ0Ñ0€FÜÐ'Ñ'¬Ð0AÑ(AÐOÀ;ÐO€FÙ>DÓEºf¸ˆA�M‰Mœ$Ó×(Ñ(Ó*¬6°!«9Ò4¹f€FÐEØ'¨/¸&¸ÐAYÐZ`ÐYaÐamÐ(nÑn€HÛˆ�X ;¨q¯v©v¨h°bÐ!9¸!¿+¹+»-Ñ!GÈ)ÐTU×TZÑTZÐS[Ð[]ÐH^Ñ!^Ñ^’X‰VÜ˜MÑ)€K¨;×+AÑ+AÀ(Ô+KÜÐ+Ñ+€C´Ð=TÑ1T¨SÐbfÐVaÐptÐhoðAÜ˜T $ s¨4Ð0AÀ$ÄsÈ;ÓGWÐXÐY\ÐegÑhˆØ�‰�{×)Ñ)Ô*¨C¯N©N¸;×;MÑ;MÔ,Nô ˜˜d 3 tÐ,=¸dÐE\Ð]cÐ\dÐdnÐCoÐpÐqtÐ}ñ  AˆØ�=‰=‹?€FÕ>NÓ$OÒ>N¸ Q¨¨V©¢^Ñ>N˜GÐ$OÔ\_Ð`g×`nÑ`nÓ`pÓ\qÐQ[Ø DÐ(×F¨[×-CÑ-CÀQÑ-F€LÐSZ×SeÑSeÐghÑShÈ
Ø1È;Ðjtð  JLð  amñ  Znð  BHð  _kð  {Að  alñ  atñ  Y]ð  zE÷  zPñ  zPð  dkð  AH÷  ASñ  ASö  oyñ  ekð  Eô  [að  bmó  [nô  Eð  FIó  Jô  [að  beó  [fñ  g€GÜÐ(Ñ(€B¨"¯-©-¼¿
º
À7ÐRSÑ8TÐUYÑ8YÔ*ZØ×8˜z×8¨j€IÜ®IÑ(Ð;TÖs|ÑUoð  Cwð  OZð  lvð  IKð  ^jñ  Wkð  }Cð  QWð  hVö  pzñ  flð  @Fñ  G€BØ%€BÐÑÐXa rÐ*VÑ'Wð  clÐceð  gañ  dbÜ�Ô”e¾iÑ:ÐMkÔlö  {DÐuvð  oKð  JKð  oKøô_ ó bÜ”[Ð!9¼#¸a»&ÓAÔBÄEÈ*ÐUVÔDWÔ`aûðbûô ó pÜ”[Ð!>¼sÀ1»vÑOÈÑOÔPÔRWÐXbÐcdÔReÔnoûðpüò$ Føô ×$Ñ$ó WØ�‰�q—x‘x—~ 2Ô&¨¯©¸¿¹¿ÀBÈÑ7U×(VÒ(VûðWûô ˜˜d 3 tÐ,=¸dÐE\Ð]cÐ\dÐdnÐCoÐpÐqtÐ}ñ  A‰üÚ$Osh   ÁU Ã3V	 Ë7WÍ8AW Ï7YÕ
VÕ*VÖVÖ	
WÖ+W×W×X:×$AX5Ø/X= Ø5X:Ø:X= Ø=YÚ__main__)r1   r   ÚreturnrÕ   )r?   Údictr,   )rj   rÕ   rk   rÕ   rl   zdict | Noner  r  )r�   rÕ   r  r  )é   ))Ú
__future__r   Úpathlibr   Úurllib.parser   r-   r3   rÑ   rˆ   rá   r×   r¥   ÚsysÚ__file__Úresolver´   rä   rÙ   rÚ   r<   r5   Úcompilerx   rç   r™   rš   ÚRuntimeErrorr   r)   r.   r7   r@   rT   rq   r   rŸ   r©   r  r!   Ú
SystemExitr   r&   r'   Ú<module>r     sö   ðå "Ý Ý !ß 7× 7× 7× 7á	ˆ(ƒ^×ÑÓ×%Ñ% aÑ(€ØˆY‰€Ø�JÑ˜yÑ(€Ø�JÑÐ4Ñ4€ØÐ+Ñ+€Ø
�
Š
Ð)Ó*€òUÐ ð &ØØ(ñ€
ð
 #Ð-=Ñ
>€	Ü %�,Ô %Ü )�lÔ )ä JÚ =Ü MòöAòôbô" Lò2Kðf ˆZÓ™z©$«&Ó1Ð1Ðr&   