
    S{ja                       U d Z ddlmZ ddlZddlZddlZddlZddlZddl	m
Z
m	Z	mZmZmZ ddlmZ ddlmZ  ee      j'                         j(                  d   Zded	<   ed
z  dz  Zded<   dZded<   dZded<   dZded<   dZded<   dZded<   g dZded<   dZded<   d&dZd'dZ d'dZ! e
ddd       ed!	 	 	 	 	 	 	 d(d"Z"d)d#Z#d*d$Z$e%d%k(  r e$        yy)+aY  Deterministic, synthetic-only SQLite fixture for Dashboard v5 acceptance work.

This module deliberately knows nothing about a Dashboard v5 Python/UI API.  It only
materializes the canonical schema and representative rows at a caller-provided
path.  Dates are derived from an explicit anchor so freshness tests do not depend
on wall-clock time.
    )annotationsN)datedatetimetime	timedeltatimezone)Path)Final   r
   ROOTdatabasez
schema.sqlDEFAULT_SCHEMA)Aphthen/MundulzerazGI/Darmu   Müdigkeit/FatigueHautAugenGelenkeu   Vaskulär/Thrombose-WarnzeichenSYMPTOM_DIMENSIONS)r      r      SPRINT4B_LAGS)baseline_pre_treatmentearly_treatmentstable_treatmentunknownSPRINT4B_PHASES)zapple:heart_rate_variabilityznutrition:histamine_scoreSPRINT4B_PREDICTORSBspearman_7d_block_permutation_complete_case_phase_stratified_bh_v1SPRINT4B_METHOD)complete_casephase_stratified7d_block_permutationno_causalitySPRINT4B_BASE_FLAGSz!dashboard-v5-synthetic-fixture-v1SYNTHETIC_FIXTURE_MARKERc                    g } t         D ]8  }t        D ]+  }t        D ]  }d}dd|z
  d|z
  }}}t        d|dz  z
  d      }t        d|dz  z   d      }	t        d	|d	z  z   d      }
t	        t
              }|t         d
   k(  r|d
k(  r|t        d
   k(  rd\  }}	}
ng|t         d
   k(  r'|dk(  r"|dk(  rd\  }}dx}x}	}
|j                  d       n4|t         d   k(  r(|dk(  r#|dk(  rd\  }}}}dx}x}	}
|j                  d       | j                  |dd||d|||||z
  t        ||z  d      d||	|
d|t        |d       ! . ; t	        t              t	        t              dd| dS )zHReturn a deterministic engine-compatible, aggregate-only Sprint-4B grid.computed      gzG?g{Gz?r   g{Gz?g{Gz?gQ?r   )        r)   r)   r   r   )insufficient_nr   Nlow_n_or_variancer   r   )insufficient_coverager'   
   r   low_target_coveragesymptom_total)	predictortarget)lag_daysmedication_phase   )eligible_target_daysexpected_target_daysobserved_pairsmissing_pairstarget_coverage)rhop_valueq_value)id
dimensionssample
statisticsstatusmethodquality_flags predictor_d_to_target_d_plus_lag)r2   medication_phaseslag_direction)r>   results)r   r   r   roundlistr#   appendr   )rG   r0   lagphaserA   expectedeligibleobservedr:   r;   r<   flagss               N/home/agent/.hermes/repos/HealthManager/tests/fixtures/dashboard_v5_fixture.pysprint4b_correlation_fixturerR   *   s   ')G( !	   	C( #/128R#XH($)$t*;Q$?(-dS4Z.?(C(-dS4Z.?(C01 3A 663!8Q`abQcHc,9)C'"5a"88SAX%SdJd':$FH.22C2'GLL!45"5a"88SAX%SeJe;]8FHh.22C2'GLL!67(1_M/2"N0808*2)1H)<+0H1Da+H +.'g"V$-%*  # 	!H ]+!%o!6?

      c                "    | j                         S )N)	isoformatdays    rQ   _iso_dayrX   Y   s    ==?rS   c                |    t        j                  | t        d      t        j                        j                         S )N   )tzinfo)r   combiner   r   utcrU   rV   s    rQ   	_iso_noonr^   ]   s(    Cb(,,?IIKKrS     r4      )anchor_dateschema_pathc                  t        |       }t        |      }|j                         rt        d|       |j                         st	        d|       |j
                  j                  dd       |t        d      z
  }|t        d      z
  }|t        d      z   }t        dd	      D cg c]  }|t        |      z
   }	}|t        d	      z
  }
|t        d
      z
  }t        j                  |      }t        j                  |_        	 |j                  |j                  d             |j                  d       |j                  dt         f       |j#                  dddt%        |      t%        |      ddddddddddt%        |      fddt%        |      t%        |      ddddddd d!d"dt%        |      fdd#t%        |      t%        |      d$ddd%ddd&d'd(dt%        |      fdd)t%        |      t%        |      dd*d+d,ddd-d.d/dt%        |      fg       g }t        dd0      D ]  }|t        |      z
  }d1d2|z   d3fd#d4|z   dfd5d6|d
z  z   d7fdd8|d9z  z   dffD ]Z  \  }}}|d5k(  r|d:k(  rd;| d<| }|j'                  d|t%        |      t%        |      |d|d=dd| d>|| d?dt%        |      f       \  |j#                  d|       t)               d@   }t%        |      }t+        |t,              sJ |D ]  }t+        |t.              sJ |j                  dA|dB   dC   |dB   dD   |dE   dF   |dE   dG   |dH   dI   |dH   dJ   |dH   dK   |dH   dL   |dH   dM   |dN   dO   |dN   dP   |dN   dQ   |dR   |dS   t1        j2                  |dT         |dR   dUk(  rdVn|dR   dWk(  rdXndY|f        |j#                  dZd[d\d]d^t5        |      d_d`daffD cg c]  \  }}}}db|dc|||||dddedfdgddh|f c}}}}didjd+dkdldmdmdjdddedfdgddn|fgz          |j#                  dot5        |t        d:      z
        dpdqdfdrddsdt|f	t5        |      dudqdfdrddvdt|f	t5        |t        d      z         dwdqdfdxt5        |t        d      z         dydt|f	t5        |t        d      z         dzdqdfd{ddydt|f	g       d|D cg c]  }|t        |      z
   }}d}}ddtd~t5        |      dddd9dddddd||fddtdt5        |      dddddddddd||fg}ddddddd|fddddddd|fg}g d}g }t7        |d      D ]b  \  }}t7        |      D ]M  \  } \  }!}"}#d9|d
z  z   | z   }$d|dz
     }%d|!j9                          d|% }&d| dz  z   }'d| z   }(d| dz  z   })d| z   }*|j'                  |$dtd| d<|! t5        |      |!|&dd9d|'|(|)|*d| d<|! ||f       |j'                  |$|"|#dddd|f       |j;                  |$dd| z   dt=        d| z         f|$dd| z   dt=        d| z         f|$dd| dz  z   dt=        d| dz  z         f|$dd| dz  z   dt=        d| dz  z         fg       d| d<|! }+|j'                  |+|&j?                         d|&|"|#dddddddddt5        |      f       P e |j#                  d|       |j#                  d|       |j#                  d|       |j#                  d|D ,"#cg c]  \  },}"}#|"|#dfdtddd|f c}#}"},       |j#                  d|D !",cg c]  \  }!}"},d|! d|"f c},}"}!       |j#                  d|       |j                  dd       |j                  ddddt5        |      t5        |      dddd|f
       t@        jB                  jE                  dtF        dz  dz  dz        }-|-r|-jH                  sJ t@        jB                  jK                  |-      }.|-jH                  jM                  |.       |.jO                  |       |.jQ                  |       tA        jR                  dƫ      jU                  |       g ||}/|/D ]  }0|.jW                  |t5        |0              d}1djY                  dɄ |/D              }2|/D cg c]  }t5        |       }3}|j                  d|1f       |j                  d|2 d̝|1g|3       |j                  d|2 d̝|1g|3       |j                  dΫ      j[                         r|j                  d|1f       g }4|t        dЬ      z
  }5t7        |	      D ]\  \  }}t7        t\              D ]E  \  }6}7|7dk(  r
||5k(  rdnd}#n||6z   d:z  }#|4j'                  t5        |      |7t=        |#      dd|f       G ^ t\        dd D ]"  }7|4j'                  t5        |
      |7ddd|f       $ |j#                  d|4       |j_                          |j                  d׫      ja                         }8|8rtc        d|8       	 	 |jg                          |jk                  dګ       t5        |      t5        |      t5        |      t5        |      |	D cg c]  }t5        |       c}t5        |
      t5        |      ddۜS c c}w c c}}}}w c c}w c c}#}"},w c c},}"}!w c c}w # td        $ r$ |jg                          |ji                  d٫        w xY w# td        $ r Y w xY w# 	 |jg                          w # td        $ r Y w w xY wxY wc c}w )zCreate a new synthetic database and return its deterministic case manifest.

    ``db_path`` must not already exist.  This fail-closed behavior prevents this
    helper from ever replacing a real database accidentally.
    z'refusing to replace existing database: zschema not found: T)parentsexist_okr   )days-   r   	   r-   zutf-8)encodingzECREATE TABLE dashboard_v5_synthetic_fixture (marker TEXT PRIMARY KEY)z=INSERT INTO dashboard_v5_synthetic_fixture(marker) VALUES (?)a  INSERT INTO apple_health_records
               (record_type,metric,start_date,end_date,value,value_text,unit,
                source_name,source_version,device,file_name,file_hash,record_hash,
                raw_json,imported_at)
               VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)HKQuantityType
heart_rateg      P@Nz	count/minzSynthetic Current Source1zSynthetic Devicezsynthetic-current.jsonzfixture-current-filezfixture-current-recordz{}
step_countg     H@countzSynthetic Stale Sourcezsynthetic-stale.jsonzfixture-stale-filezfixture-stale-recordresting_heart_rateg     N@zSynthetic Future Sourcezsynthetic-future.jsonzfixture-future-filezfixture-future-recordoxygen_saturationznot measured%zSynthetic Missing Value Sourcezsynthetic-missing.jsonzfixture-missing-filezfixture-missing-record   heart_rate_variabilityg      E@msg      N@sleep_analysisg      @hrg     @d      zfixture-explorer--zSynthetic Explorer Sourcez.jsonz-recordrG   af  INSERT INTO multimodal_correlation_results
                   (predictor,target,lag_days,medication_phase,n,eligible_target_days,
                    expected_target_days,target_coverage,missing_pairs,rho,p_value,q_value,status,
                    method,quality_flags,interpretation,computed_at)
                   VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)r=   r0   r1   r>   r2   r3   r?   r7   r5   r6   r9   r8   r@   r:   r;   r<   rA   rB   rC   r&   uG   Kein belastbares korrigiertes Signal; explorativ und keine Kausalität.r,   uO   Unzureichende Zielabdeckung; keine Korrelation berechnet und keine Kausalität.uG   Unzureichende vollständige Datenpaare oder Varianz; keine Kausalität.ah  INSERT INTO laborwerte
               (parameter_name,wert,einheit,reference_min,reference_max,
                abnahme_datum,befund_datum,wert_original,quelle,
                validierungsstatus,source_type,reference_range_source,
                verified_against_original,provenance_note,ermittlung_datum)
               VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?))z
2024-01-104.205)z
2024-10-15z5.1r{   6)z
2025-05-20z7.4NN)z
2025-12-01z8.8r{   r|   z12.5r{   r|   zC-Reaktives Protein (CRP)zmg/Lzsynthetic laboratory fixture	validiert	syntheticscanned_originalz1Synthetic test row; no person or source document.zFaktor VIII11850150z
2025-08-12zDSynthetic single-observation test row; no person or source document.zINSERT INTO medication_administrations
               (datum,medication_name,dose,route,event_type,scheduled_next_date,notes,source,created_at)
               VALUES(?,?,?,?,?,?,?,?,?)"SYNTHETIC_EVENT_ON_MEASUREMENT_GAPz10 mgadministeredztimeline gap fixturefixture!SYNTHETIC_ADMINISTERED_MEDICATIONzdisplay as administered onlyISYNTHETIC_PLANNED_MEDICATION_WITH_A_VERY_LONG_LABEL_FOR_RESPONSIVE_LAYOUTplannedz must not be represented as takenSYNTHETIC_CANCELLED_MEDICATION	cancelled)r-   rh      ))	breakfastzsynthetic breakfast componentr   )lunchzsynthetic lunch componentr   )dinnerzsynthetic dinner componentr   )snackzsynthetic snack componentr   completer   SYNTHETIC_COMPLETE_FOOD_MAPPINGzSynthetic Brandgr   zfixture-food-complete
incompleter   FSYNTHETIC_INCOMPLETE_FOOD_MAPPING_WITH_A_VERY_LONG_NAME_THAT_MUST_WRAPzfixture-food-incompletezsynthetic cucumber
classifiedfixture_mapping_v1highzsynthetic source classificationr   fixture_unmappedlowz"intentionally unmapped fixture row))r   nutrient.fiberg@r   rz   )r   nutrient.sugar       @r   z2.0)r   znutrient.vitamin_cg      4@r   20)r   nutrient.sodiumg      $@mgz0.01)start)ONETWOTHREE
SYNTHETIC__EXPOSURE_DAY_   #   rZ   r'   r   z	exposure-zfixture-exposure-z!synthetic SIGHi source fixture v1r   r   r   g      @znutrient.saturatedg      ?r   g      Y@   r   zfixture-mapping-assignsighi_referenceSIGHiz
fixture-v1zsynthetic mapping provenance sighi_mapping_load_v2zINSERT INTO nutrition_items
               (id,source,source_item_id,datum,meal,name,brand,amount,amount_unit,
                kcal,protein_g,carb_g,fat_g,item_hash,imported_at,updated_at)
               VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)zINSERT INTO nutrition_histamine_scores
               (item_id,canonical_food,sighi_score,traffic_light,tags,confidence,reason,scored_at)
               VALUES(?,?,?,?,?,?,?,?)zpINSERT INTO nutrition_item_nutrients(item_id,nutrient_key,value,unit,raw_value)
               VALUES(?,?,?,?,?)zINSERT OR IGNORE INTO histamine_food_rules
               (canonical_food,sighi_score,category,tags,notes,confidence,source,updated_at)
               VALUES(?,?,?,?,?,?,?,?)zsynthetic source rulezSIGHi fixture-v1zNINSERT OR IGNORE INTO histamine_food_aliases(alias,canonical_food) VALUES(?,?)z
synthetic z aliasa~  INSERT INTO nutrition_mapping_provenance
               (action_id,normalized_name,decision,alias,canonical_food,sighi_score,confidence,
                mapping_method,source_label,source_version,note,ingredient_review_required,
                personal_tolerance_status,personal_tolerance_note,definition_version,affected_day)
               VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)zINSERT OR REPLACE INTO histamine_food_rules
               (canonical_food,sighi_score,category,confidence,source,updated_at)
               VALUES(?,1,'synthetic','high','synthetic_sighi_fixture','fixture-v1'))synthetic reviewed foodzINSERT INTO nutrition_review_queue
               (normalized_name,example_name,occurrence_count,first_seen,last_seen,suggested_canonical_food,suggested_score,reason,status,updated_at)
               VALUES(?,?,?,?,?,?,?,?,?,?)zFsynthetic incomplete food mapping with a very long name that must wrapr   zsynthetic missing mappingopendashboard_v5_fixture_workerscriptshealthz!health_dashboard_action_worker.pyzdashboard_v5.sprint6i_c_schemaz2026-06-15 12:00:00,c              3      K   | ]  }d   yw)?N ).0_s     rQ   	<genexpr>z-build_dashboard_v5_fixture.<locals>.<genexpr>`  s     ==s   z4UPDATE nutrition_mapping_provenance SET applied_at=?zCUPDATE nutrition_daily_summary_v2 SET updated_at=? WHERE datum IN ()z?UPDATE nutrition_meal_summary SET updated_at=? WHERE datum IN (zUSELECT 1 FROM sqlite_master WHERE type='table' AND name='dashboard_schema_migrations'z3UPDATE dashboard_schema_migrations SET applied_at=?r4   r   daily_quick_scorezsynthetic complete dayzsynthetic incomplete dayz`INSERT INTO symptom_log(datum,symptom,schwergrad,kontext,notizen,created_at) VALUES(?,?,?,?,?,?)PRAGMA foreign_key_checkzfixture violates foreign keys: )
missing_oki  )ra   current_source_datestale_source_datefuture_source_datecomplete_symptom_daysincomplete_symptom_dayno_data_daysynthetic_only)6r	   existsFileExistsErroris_fileFileNotFoundErrorparentmkdirr   rangesqlite3connectRowrow_factoryexecutescript	read_textexecuter$   executemanyr^   rJ   rR   
isinstancerI   dictjsondumpsrX   	enumerateupperextendstrcasefold	importlibutilspec_from_file_locationr   loadermodule_from_specexec_moduleapply_document_schemaapply_media_schemaimport_moduleapply_schemarecompute_nutrition_dayjoinfetchoner   commitfetchallRuntimeError	Exceptioncloseunlinkchmod)9db_pathra   rb   r1   schemacurrentstalefutureoffsetr   r   r   
connectionexplorer_rowsrW   metricvalueunitkeycorrelation_resultsfixture_timestampresultref_minref_maxexposure_days
meal_specsnutrition_itemshistamine_rowsnutrient_rowsprovenance_rows	day_indexexposure_day
meal_indexmeal	canonicalscoreitem_idday_wordproduct_namekcalproteincarbsfat	action_idr   worker_specworker_modulerecomputed_daysnutrition_daydeterministic_timestampplaceholders
day_valuessymptom_rowsaphthae_event_daydimension_index	dimension	fk_errorss9                                                            rQ   build_dashboard_v5_fixturer$  a   s    ']F+F}} GxPQQ>>"4VH =>>
MMt4I1--G),,E9!,,FPUVWYZP[\f[9&+AA\\(9!+<<	r 22K(J$[[JS  !1!17!1!CDS	
 	K%'	
 	8 "<71CYwEWY]_cep  sM  OR  Tf  h@  BX  Zr  tx  zC  DK  zL  M!<51A9UCSU[]acj  mE  GJ  L^  `v  xL  Nd  fj  lu  v{  l|  }!#769JIV\L]_ceikv  yR  TW  Yk  mD  F[  ]t  vz  |E  FL  |M  N!#6	'8JIV]L^`dftvy  |\  ^a  cg  iA  CY  [s  uy  {D  EL  {M  N		
 Arl 	F	v 66C)4&=$?%tf}kB!3"#4d;v4g>	( #t --&A+)&6(;$$$finineUY[_/6HSEQV-Y\e7OT9S>& 	  	8
 	
 ;<YG%k2-t444) 	Ffd+++@ 4L-vd|H/E<(4f\6JK]6^8$%56x8HI_8`8$%;<fX>NO`>a8$_5vl7KE7R<(3VL5I)5T8$fX&6

6/CZ8[h':5 ^ "(+/FF jf%	4 	8 4353e_fc375  1C	 0e%C[R]&+^`q  "5#tUL,X]2KN`bcZ\m	
: 	, +	q(99:<`bikv  yG  IM  Oe  gp  rC  D'"$GR]_mos  vT  V_  ar  s+	q(99:  =H  JQ  S^  `i  ks  t  BK  QR  BS  tS  kT  Vx  zC  EV  W+	q(99:<\^egrt  BF  Hj  lu  wH  I		
	
 MWW&yf'==WW

 	:x'8'Cdfwy|  B  DE  GH  JK  MN  Pg  iz  |M  N	<'):H  GO  QU  W[  ]`  bf  hl  nr  tx  zS  Uf  hy  z

 $a7KVUv  yJ  KdI'95Bfhyz

 '0a'H 	#I|8A*8M 4
4T9eR0:=29q=A!+DJJL>zRZ"_,z/Z!^+*n&&i9YKq)GR^I_aegs  vG  IL  NQ  SW  Y`  bg  il  pA  BK  AL  LM  NR  MS  nT  Vg  iz  { %%i>RTZ\  BS  T $$ "2C*4Dc3sU_O_K`a "2C*4Dc3sU_O_K`a "6j1n8LcSVWZ]gjk]kWkSlm "3UZ"_5LdTWX]`jmo`oXoTpq	 /yk4&A	&& 5 5 7<QZ\acik|  F  HT  Vt  vw  yB  DF  H_  ai  jv  aw  x/	6 	: 	
 	* 		
 	$	

 	* \f  g  g  EX  EF  HQ  SXiY8OQWYkm~  g		
 	\NXYY8Ji
4&'3Y	
 	:
 	
 	X )		
 	. V  X`  bc  em  nu  ev  x@  AH  xI  Kd  fg  iD  FL  N_  `		
  nn<<)9x'*MM
 {1111!77D&&}5++J7((4 @ANNzZ3M373, 	WM11*h}>UV	W"7xx=_==/>?hsm?
?B$&	
 	QR^Q__`a$2z2	
 	Ml^[\]$2z2	
 c

(* E(* ')*;;'(=> 	NNIs.78J.K N* 44!$(9!9AqE&8A=E##Xc]Is5zK^`x  {L  %M  NN	N ,CR0 	XI*@!A9cSf  iC  EV  !W  X	Xn	
 	&&'ABKKM	!@LMM 	 LL  ,'0%e_&v.;P!QC(3-!Q"*+A"B,	 	y ]rB XN g ZJ @N  &  			 		 "Rs   +i*J?j i/(B<j $i7:Hj 	i<j 9jEj *j
<E3j 1j? >k3/ j -j<<k ?	k
kk0k! k0!	k-*k0,k--k0c           
        t        |       }t        j                  d| dd      }	 dD ci c](  }||j                  d|       j	                         d   * }}|j                  d      j	                         d   |j                  d	      j                         |j                  d
      j	                         d   |j                  d      j	                         d   t        d |j                  d      D              |j                  d      j	                         d}|j                          ||dS c c}w # |j                          w xY w)zGReturn structural acceptance checks without importing application code.zfile:z?mode=roT)uri)apple_health_records
laborwertemedication_administrationsr  nutrition_histamine_scoressymptom_logzSELECT COUNT(*) FROM r   zPRAGMA integrity_checkr   zSELECT COUNT(*) FROM laborwerte
                   WHERE verified_against_original=1 AND CAST(wert AS REAL)>CAST(reference_max AS REAL)zSELECT COUNT(*) FROM (SELECT datum FROM symptom_log
                   WHERE kontext='daily_quick_score' GROUP BY datum HAVING COUNT(DISTINCT symptom)=7)c              3  &   K   | ]	  }|d      yw)r   Nr   )r   rows     rQ   r   z#validate_fixture.<locals>.<genexpr>  s      (3A (s   z:SELECT DISTINCT event_type FROM medication_administrationszSELECT SUM(canonical_food IS NOT NULL AND sighi_score IS NOT NULL),
                          SUM(canonical_food IS NULL OR sighi_score IS NULL)
                   FROM nutrition_histamine_scores)	integrityforeign_key_errorsverified_lab_outliersr   medication_statesfood_mapping_states)countschecks)r	   r   r   r   r   r   sortedr   )r   dbr   tabler3  r4  s         rQ   validate_fixturer8    sh   	gB5H!54@J
 :%%(=eW&EFOOQRSTT
 
 $++,DENNPQRS","4"45O"P"Y"Y"[%/%7%7k& hj& &0%7%7i& hj& "( (*:L:LL; ( " $.#5#56$ hj%
* 	//;
8 	s   D7 -D2CD7 2D7 7E	c            	        t        j                  t              } | j                  ddd       | j                  dt        j
                  t	        ddd	      
       | j                         }|j                  rt        |j                        }n"t        t        j                  d            dz  }t        ||j                        }t        t        j                  t!        |      |t#        |      ddt$                     y )N)descriptionoutputr   z-new SQLite path; omit for a temporary fixture)nargshelpz--anchor-dater_   r4   r`   )typedefaultzdashboard-v5-fixture-)prefixz	health.db)ra   )pathmanifest
validationr   )indentr?  )argparseArgumentParser__doc__add_argumentr   fromisoformat
parse_argsr;  r	   tempfilemkdtempr$  ra   printr   r   r   r8  rI   )parserargsr;  rB  s       rQ   mainrP    s    $$9F
2ab
d.@.@$tUVXZJ[\D{{dkk"h&&.EFG+U)&d>N>NOH	$**c&kxO_`fOghqr  }A  B  CrS   __main__)returndict[str, object])rW   r   rR  r   )r   
str | Pathra   r   rb   rT  rR  rS  )r   rT  rR  rS  )rR  None)&rG  
__future__r   rE  importlib.utilr   r   r   rK  r   r   r   r   r   pathlibr	   typingr
   __file__resolverd   r   __annotations__r   r   r   r   r   r   r#   r$   rR   rX   r^   r$  r8  rP  __name__r   rS   rQ   <module>r^     s1   #      > >  8n$$&..q1e 1z)L8 8 E  $u #  [ U Z] ] U  #F % E,^L T1b),	{{ { 	{
 {|	"0J
C zF rS   