ó
    'xáh  ã                   óú   • S r SSKrSSKJs  Jr  SSKJr  SSK	J
r
  SSKJr  SSKJr  \
(       a  SSKJr  S rS	 rS
 rS rS rS rS rS rS rS rS r\" S5      SS j5       r\" S5      SS j5       rS rS rg)z$Tests for quber.utils.config module.é    N)ÚPath)ÚTYPE_CHECKING)Úpatch)ÚConfig)Ú	MagicMockc                  ó¸  • [        5       n U R                  nSo!UL o3(       dº  [        R                  " SU4SX45      S[        R
                  " 5       ;   d  [        R                  " U 5      (       a  [        R                  " U 5      OS[        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n=p2U R                  nSo!UL o3(       dº  [        R                  " SU4SX45      S[        R
                  " 5       ;   d  [        R                  " U 5      (       a  [        R                  " U 5      OS[        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n=p2U R                  nSo!UL o3(       dº  [        R                  " SU4S	X45      S[        R
                  " 5       ;   d  [        R                  " U 5      (       a  [        R                  " U 5      OS[        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n=p2U R                  nSo!UL o3(       dº  [        R                  " SU4S
X45      S[        R
                  " 5       ;   d  [        R                  " U 5      (       a  [        R                  " U 5      OS[        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n=p2U R                  nSo!UL o3(       dº  [        R                  " SU4SX45      S[        R
                  " 5       ;   d  [        R                  " U 5      (       a  [        R                  " U 5      OS[        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n=p2U R                  nSo!U:H  o3(       dº  [        R                  " SU4SX45      S[        R
                  " 5       ;   d  [        R                  " U 5      (       a  [        R                  " U 5      OS[        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n=p2U R                  nSo!UL o3(       dº  [        R                  " SU4SX45      S[        R
                  " 5       ;   d  [        R                  " U 5      (       a  [        R                  " U 5      OS[        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n=p2U R                   nSo!U:H  o3(       dº  [        R                  " SU4SX45      S[        R
                  " 5       ;   d  [        R                  " U 5      (       a  [        R                  " U 5      OS[        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n=p2U R"                  nSo!U:H  o3(       dº  [        R                  " SU4SX45      S[        R
                  " 5       ;   d  [        R                  " U 5      (       a  [        R                  " U 5      OS[        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n=p2U R$                  nSn['        U5      oqU:H  o3(       Gd"  [        R                  " SU4SX45      S[        R
                  " 5       ;   d  [        R                  " U 5      (       a  [        R                  " U 5      OS[        R                  " U5      S[        R
                  " 5       ;   d  [        R                  " [&        5      (       a  [        R                  " [&        5      OS[        R                  " U5      [        R                  " U5      S.-  nSSU0-  n	[        [        R                  " U	5      5      eS=n=n=pgU R(                  nSn['        U5      oqU:H  o3(       Gd"  [        R                  " SU4SX45      S[        R
                  " 5       ;   d  [        R                  " U 5      (       a  [        R                  " U 5      OS[        R                  " U5      S[        R
                  " 5       ;   d  [        R                  " [&        5      (       a  [        R                  " [&        5      OS[        R                  " U5      [        R                  " U5      S.-  nSSU0-  n	[        [        R                  " U	5      5      eS=n=n=pgU R*                  nSo!U:H  o3(       dº  [        R                  " SU4SX45      S[        R
                  " 5       ;   d  [        R                  " U 5      (       a  [        R                  " U 5      OS[        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n=p2U R,                  nSo!UL o3(       dº  [        R                  " SU4SX45      S[        R
                  " 5       ;   d  [        R                  " U 5      (       a  [        R                  " U 5      OS[        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n=p2g) z Test Config with default values.N©Úis)z9%(py2)s
{%(py2)s = %(py0)s.anthropic_api_key
} is %(py5)sÚconfig©Úpy0Úpy2Úpy5úassert %(py7)sÚpy7)z6%(py2)s
{%(py2)s = %(py0)s.openai_api_key
} is %(py5)s)z4%(py2)s
{%(py2)s = %(py0)s.groq_api_key
} is %(py5)s)z6%(py2)s
{%(py2)s = %(py0)s.gemini_api_key
} is %(py5)s)z5%(py2)s
{%(py2)s = %(py0)s.logfire_token
} is %(py5)sÚ	anthropic©ú==©z8%(py2)s
{%(py2)s = %(py0)s.default_provider
} == %(py5)s)z5%(py2)s
{%(py2)s = %(py0)s.default_model
} is %(py5)sé   ©z=%(py2)s
{%(py2)s = %(py0)s.max_concurrent_tables
} == %(py5)sé   )z>%(py2)s
{%(py2)s = %(py0)s.table_analysis_timeout
} == %(py5)sÚoutput©zP%(py2)s
{%(py2)s = %(py0)s.output_dir
} == %(py8)s
{%(py8)s = %(py4)s(%(py6)s)
}r   ©r   r   Úpy4Úpy6Úpy8úassert %(py10)sÚpy10Úexperiments©zU%(py2)s
{%(py2)s = %(py0)s.experiments_dir
} == %(py8)s
{%(py8)s = %(py4)s(%(py6)s)
}ÚINFO©z1%(py2)s
{%(py2)s = %(py0)s.log_level
} == %(py5)sT©z6%(py2)s
{%(py2)s = %(py0)s.enable_logfire
} is %(py5)s)r   Úanthropic_api_keyÚ
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanationÚopenai_api_keyÚgroq_api_keyÚgemini_api_keyÚlogfire_tokenÚdefault_providerÚdefault_modelÚmax_concurrent_tablesÚtable_analysis_timeoutÚ
output_dirr   Úexperiments_dirÚ	log_levelÚenable_logfire)
r   Ú@py_assert1Ú@py_assert4Ú@py_assert3Ú@py_format6Ú@py_format8Ú@py_assert5Ú@py_assert7Ú@py_format9Ú@py_format11s
             Ú1/home/mande/repo/quber/tests/utils/test_config.pyÚtest_config_defaultsrE      sO  € ä‹X€Fà×#Ñ#Ð+ tÐ+ tÐ+×+×+×+Ò+Ð#×+×+×+×+×+Õ+ˆ6×+×+×+Ñ+ˆ6×+×+Õ+Ð#×+×+Ó+ t×+×+×+×+×+×+Ó+Ø× Ñ Ð( DÐ( DÐ(×(×(×(Ò(Ð ×(×(×(×(×(Õ(ˆ6×(×(×(Ñ(ˆ6×(×(Õ(Ð ×(×(Ó( D×(×(×(×(×(×(Ó(Ø×ÑÐ& $Ð& $Ð&×&×&×&Ò&Ð×&×&×&×&×&Õ&ˆ6×&×&×&Ñ&ˆ6×&×&Õ&Ð×&×&Ó& $×&×&×&×&×&×&Ó&Ø× Ñ Ð( DÐ( DÐ(×(×(×(Ò(Ð ×(×(×(×(×(Õ(ˆ6×(×(×(Ñ(ˆ6×(×(Õ(Ð ×(×(Ó( D×(×(×(×(×(×(Ó(Ø×ÑÐ' 4Ð' 4Ð'×'×'×'Ò'Ð×'×'×'×'×'Õ'ˆ6×'×'×'Ñ'ˆ6×'×'Õ'Ð×'×'Ó' 4×'×'×'×'×'×'Ó'Ø×"Ñ"Ð1 kÐ1 kÑ1×1×1×1Ò1Ð"×1×1×1×1×1Õ1ˆ6×1×1×1Ñ1ˆ6×1×1Õ1Ð"×1×1Ó1 k×1×1×1×1×1×1Ó1Ø×ÑÐ' 4Ð' 4Ð'×'×'×'Ò'Ð×'×'×'×'×'Õ'ˆ6×'×'×'Ñ'ˆ6×'×'Õ'Ð×'×'Ó' 4×'×'×'×'×'×'Ó'Ø×'Ñ'Ð,¨1Ð,¨1Ñ,×,×,×,Ò,Ð'×,×,×,×,×,Õ,ˆ6×,×,×,Ñ,ˆ6×,×,Õ,Ð'×,×,Ó,¨1×,×,×,×,×,×,Ó,Ø×(Ñ(Ð.¨BÐ.¨BÑ.×.×.×.Ò.Ð(×.×.×.×.×.Õ.ˆ6×.×.×.Ñ.ˆ6×.×.Õ.Ð(×.×.Ó.¨B×.×.×.×.×.×.Ó.Ø×ÑÐ. XÐ.¤ X£Ð. Ñ.×.×.×.Ó.Ð×.×.×.×.×.Õ.ˆ6×.×.×.Ñ.ˆ6×.×.Õ.Ð×.×.×.×.×.Ô.¤×.×.×.Ñ.¤×.×.Õ. X×.×.Ó. ×.×.×.×.×.×.Õ.Ø×!Ñ!Ð8¨-Ð8¤T¨-Ó%8Ð8Ð%8Ñ8×8×8×8Ó8Ð!×8×8×8×8×8Õ8ˆ6×8×8×8Ñ8ˆ6×8×8Õ8Ð!×8×8×8×8×8Ô8¤T×8×8×8Ñ8¤T×8×8Õ8¨-×8×8Ó8Ð%8×8×8×8×8×8×8Õ8Ø×ÑÐ%˜vÐ%˜vÑ%×%×%×%Ò%Ð×%×%×%×%×%Õ%ˆ6×%×%×%Ñ%ˆ6×%×%Õ%Ð×%×%Ó%˜v×%×%×%×%×%×%Ó%Ø× Ñ Ð( DÐ( DÐ(×(×(×(Ò(Ð ×(×(×(×(×(Õ(ˆ6×(×(×(Ñ(ˆ6×(×(Õ(Ð ×(×(Ó( D×(×(×(×(×(×(Ô(ó    c                  ó‚  • [        SSSSSS9n U R                  nSo!U:H  o3(       dº  [        R                  " SU4SX45      S	[        R
                  " 5       ;   d  [        R                  " U 5      (       a  [        R                  " U 5      OS	[        R                  " U5      [        R                  " U5      S
.-  nSSU0-  n[        [        R                  " U5      5      eS=n=p2U R                  nSo!U:H  o3(       dº  [        R                  " SU4SX45      S	[        R
                  " 5       ;   d  [        R                  " U 5      (       a  [        R                  " U 5      OS	[        R                  " U5      [        R                  " U5      S
.-  nSSU0-  n[        [        R                  " U5      5      eS=n=p2U R                  nSo!U:H  o3(       dº  [        R                  " SU4SX45      S	[        R
                  " 5       ;   d  [        R                  " U 5      (       a  [        R                  " U 5      OS	[        R                  " U5      [        R                  " U5      S
.-  nSSU0-  n[        [        R                  " U5      5      eS=n=p2U R                  nSo!U:H  o3(       dº  [        R                  " SU4SX45      S	[        R
                  " 5       ;   d  [        R                  " U 5      (       a  [        R                  " U 5      OS	[        R                  " U5      [        R                  " U5      S
.-  nSSU0-  n[        [        R                  " U5      5      eS=n=p2U R                  nSo!UL o3(       dº  [        R                  " SU4SX45      S	[        R
                  " 5       ;   d  [        R                  " U 5      (       a  [        R                  " U 5      OS	[        R                  " U5      [        R                  " U5      S
.-  nSSU0-  n[        [        R                  " U5      5      eS=n=p2g)zTest Config with custom values.ztest-key-123Úopenaié
   ÚDEBUGF)r&   r3   r5   r9   r:   r   )z9%(py2)s
{%(py2)s = %(py0)s.anthropic_api_key
} == %(py5)sr   r   r   r   Nr   r   r$   r	   r%   )r   r&   r'   r(   r)   r*   r+   r,   r-   r.   r3   r5   r9   r:   )r   r;   r<   r=   r>   r?   s         rD   Útest_config_with_custom_valuesrK       s\  € äØ(Ø!Ø ØØñ€Fð ×#Ñ#Ð5 ~Ð5 ~Ñ5×5×5×5Ò5Ð#×5×5×5×5×5Õ5ˆ6×5×5×5Ñ5ˆ6×5×5Õ5Ð#×5×5Ó5 ~×5×5×5×5×5×5Ó5Ø×"Ñ"Ð. hÐ. hÑ.×.×.×.Ò.Ð"×.×.×.×.×.Õ.ˆ6×.×.×.Ñ.ˆ6×.×.Õ.Ð"×.×.Ó. h×.×.×.×.×.×.Ó.Ø×'Ñ'Ð-¨2Ð-¨2Ñ-×-×-×-Ò-Ð'×-×-×-×-×-Õ-ˆ6×-×-×-Ñ-ˆ6×-×-Õ-Ð'×-×-Ó-¨2×-×-×-×-×-×-Ó-Ø×ÑÐ&˜wÐ&˜wÑ&×&×&×&Ò&Ð×&×&×&×&×&Õ&ˆ6×&×&×&Ñ&ˆ6×&×&Õ&Ð×&×&Ó&˜w×&×&×&×&×&×&Ó&Ø× Ñ Ð) EÐ) EÐ)×)×)×)Ò)Ð ×)×)×)×)×)Õ)ˆ6×)×)×)Ñ)ˆ6×)×)Õ)Ð ×)×)Ó) E×)×)×)×)×)×)Ô)rF   c                  óN  • [        SS9n U R                  nSo!" U5      nSoCU:H  oU(       dä  [        R                  " SU4SX445      S[        R
                  " 5       ;   d  [        R                  " U 5      (       a  [        R                  " U 5      OS[        R                  " U5      [        R                  " U5      [        R                  " U5      [        R                  " U5      S.-  nSS	U0-  n[        [        R                  " U5      5      eS
=n=n=n=pTU R                  nSo!" U5      nSoCU:H  oU(       dä  [        R                  " SU4SX445      S[        R
                  " 5       ;   d  [        R                  " U 5      (       a  [        R                  " U 5      OS[        R                  " U5      [        R                  " U5      [        R                  " U5      [        R                  " U5      S.-  nSS	U0-  n[        [        R                  " U5      5      eS
=n=n=n=pTg
)zTest getting Anthropic API key.zanthropic-key©r&   r   r   ©zQ%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.get_api_key
}(%(py4)s)
} == %(py9)sr   ©r   r   r   r   Úpy9úassert %(py11)sÚpy11NÚ	ANTHROPIC©
r   Úget_api_keyr'   r(   r)   r*   r+   r,   r-   r.   ©r   r;   r=   r@   Ú@py_assert8rA   Ú@py_format10Ú@py_format12s           rD   Ú!test_config_get_api_key_anthropicrZ   1   sC  € ä oÑ6€Fà×ÑÐ=˜kÐ=Ð˜kÓ*Ð=¨oÐ=¨oÑ=×=×=×=Ò=Ð*×=×=×=×=×=Õ=ˆ6×=×=×=Ñ=ˆ6×=×=Õ=Ð×=×=Ó=˜k×=×=Ó=Ð*×=×=Ó=¨o×=×=×=×=×=×=×=Ø×ÑÐ=˜kÐ=Ð˜kÓ*Ð=¨oÐ=¨oÑ=×=×=×=Ò=Ð*×=×=×=×=×=Õ=ˆ6×=×=×=Ñ=ˆ6×=×=Õ=Ð×=×=Ó=˜k×=×=Ó=Ð*×=×=Ó=¨o×=×=×=×=×=×=×=Ð=rF   c                  óN  • [        SS9n U R                  nSo!" U5      nSoCU:H  oU(       dä  [        R                  " SU4SX445      S[        R
                  " 5       ;   d  [        R                  " U 5      (       a  [        R                  " U 5      OS[        R                  " U5      [        R                  " U5      [        R                  " U5      [        R                  " U5      S.-  nSS	U0-  n[        [        R                  " U5      5      eS
=n=n=n=pTU R                  nSo!" U5      nSoCU:H  oU(       dä  [        R                  " SU4SX445      S[        R
                  " 5       ;   d  [        R                  " U 5      (       a  [        R                  " U 5      OS[        R                  " U5      [        R                  " U5      [        R                  " U5      [        R                  " U5      S.-  nSS	U0-  n[        [        R                  " U5      5      eS
=n=n=n=pTg
)zTest getting OpenAI API key.z
openai-key)r/   rH   r   rN   r   rO   rQ   rR   NÚOpenAIrT   rV   s           rD   Útest_config_get_api_key_openair]   9   óC  € ä <Ñ0€Fà×ÑÐ7˜hÐ7Ð˜hÓ'Ð7¨<Ð7¨<Ñ7×7×7×7Ò7Ð'×7×7×7×7×7Õ7ˆ6×7×7×7Ñ7ˆ6×7×7Õ7Ð×7×7Ó7˜h×7×7Ó7Ð'×7×7Ó7¨<×7×7×7×7×7×7×7Ø×ÑÐ7˜hÐ7Ð˜hÓ'Ð7¨<Ð7¨<Ñ7×7×7×7Ò7Ð'×7×7×7×7×7Õ7ˆ6×7×7×7Ñ7ˆ6×7×7Õ7Ð×7×7Ó7˜h×7×7Ó7Ð'×7×7Ó7¨<×7×7×7×7×7×7×7Ð7rF   c                  óN  • [        SS9n U R                  nSo!" U5      nSoCU:H  oU(       dä  [        R                  " SU4SX445      S[        R
                  " 5       ;   d  [        R                  " U 5      (       a  [        R                  " U 5      OS[        R                  " U5      [        R                  " U5      [        R                  " U5      [        R                  " U5      S.-  nSS	U0-  n[        [        R                  " U5      5      eS
=n=n=n=pTU R                  nSo!" U5      nSoCU:H  oU(       dä  [        R                  " SU4SX445      S[        R
                  " 5       ;   d  [        R                  " U 5      (       a  [        R                  " U 5      OS[        R                  " U5      [        R                  " U5      [        R                  " U5      [        R                  " U5      S.-  nSS	U0-  n[        [        R                  " U5      5      eS
=n=n=n=pTg
)zTest getting Groq API key.zgroq-key)r0   Úgroqr   rN   r   rO   rQ   rR   NÚGROQrT   rV   s           rD   Útest_config_get_api_key_groqrb   A   sC  € ä Ñ,€Fà×ÑÐ3˜fÐ3Ð˜fÓ%Ð3¨Ð3¨Ñ3×3×3×3Ò3Ð%×3×3×3×3×3Õ3ˆ6×3×3×3Ñ3ˆ6×3×3Õ3Ð×3×3Ó3˜f×3×3Ó3Ð%×3×3Ó3¨×3×3×3×3×3×3×3Ø×ÑÐ3˜fÐ3Ð˜fÓ%Ð3¨Ð3¨Ñ3×3×3×3Ò3Ð%×3×3×3×3×3Õ3ˆ6×3×3×3Ñ3ˆ6×3×3Õ3Ð×3×3Ó3˜f×3×3Ó3Ð%×3×3Ó3¨×3×3×3×3×3×3×3Ð3rF   c                  óN  • [        SS9n U R                  nSo!" U5      nSoCU:H  oU(       dä  [        R                  " SU4SX445      S[        R
                  " 5       ;   d  [        R                  " U 5      (       a  [        R                  " U 5      OS[        R                  " U5      [        R                  " U5      [        R                  " U5      [        R                  " U5      S.-  nSS	U0-  n[        [        R                  " U5      5      eS
=n=n=n=pTU R                  nSo!" U5      nSoCU:H  oU(       dä  [        R                  " SU4SX445      S[        R
                  " 5       ;   d  [        R                  " U 5      (       a  [        R                  " U 5      OS[        R                  " U5      [        R                  " U5      [        R                  " U5      [        R                  " U5      S.-  nSS	U0-  n[        [        R                  " U5      5      eS
=n=n=n=pTg
)zTest getting Gemini API key.z
gemini-key)r1   Úgeminir   rN   r   rO   rQ   rR   NÚGeminirT   rV   s           rD   Útest_config_get_api_key_geminirf   I   r^   rF   c                  óJ  • [        SS9n U R                  nSo!" U5      nSoCUL oU(       dä  [        R                  " SU4SX445      S[        R
                  " 5       ;   d  [        R                  " U 5      (       a  [        R                  " U 5      OS[        R                  " U5      [        R                  " U5      [        R                  " U5      [        R                  " U5      S.-  nS	S
U0-  n[        [        R                  " U5      5      eS=n=n=n=pTU R                  nSo!" U5      nSoCUL oU(       dä  [        R                  " SU4SX445      S[        R
                  " 5       ;   d  [        R                  " U 5      (       a  [        R                  " U 5      OS[        R                  " U5      [        R                  " U5      [        R                  " U5      [        R                  " U5      S.-  nS	S
U0-  n[        [        R                  " U5      5      eS=n=n=n=pTg)z7Test getting API key for unknown provider returns None.ÚkeyrM   ÚunknownNr	   ©zQ%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.get_api_key
}(%(py4)s)
} is %(py9)sr   rO   rQ   rR   ÚinvalidrT   rV   s           rD   Ú(test_config_get_api_key_unknown_providerrl   Q   sC  € ä eÑ,€Fà×ÑÐ0˜iÐ0Ð˜iÓ(Ð0¨DÐ0¨DÐ0×0×0×0Ò0Ð(×0×0×0×0×0Õ0ˆ6×0×0×0Ñ0ˆ6×0×0Õ0Ð×0×0Ó0˜i×0×0Ó0Ð(×0×0Ó0¨D×0×0×0×0×0×0×0Ø×ÑÐ0˜iÐ0Ð˜iÓ(Ð0¨DÐ0¨DÐ0×0×0×0Ò0Ð(×0×0×0×0×0Õ0ˆ6×0×0×0Ñ0ˆ6×0×0Õ0Ð×0×0Ó0˜i×0×0Ó0Ð(×0×0Ó0¨D×0×0×0×0×0×0×0Ð0rF   c                  óL  • [        5       n U R                  nSo!" U5      nSoCUL oU(       dä  [        R                  " SU4SX445      S[        R
                  " 5       ;   d  [        R                  " U 5      (       a  [        R                  " U 5      OS[        R                  " U5      [        R                  " U5      [        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n=n=n=pTU R                  nS	o!" U5      nSoCUL oU(       dä  [        R                  " SU4SX445      S[        R
                  " 5       ;   d  [        R                  " U 5      (       a  [        R                  " U 5      OS[        R                  " U5      [        R                  " U5      [        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n=n=n=pTg)
z6Test getting API key returns None when not configured.r   Nr	   rj   r   rO   rQ   rR   rH   rT   rV   s           rD   Ú)test_config_get_api_key_none_when_not_setrn   Y   s@  € ä‹X€Fà×ÑÐ2˜kÐ2Ð˜kÓ*Ð2¨dÐ2¨dÐ2×2×2×2Ò2Ð*×2×2×2×2×2Õ2ˆ6×2×2×2Ñ2ˆ6×2×2Õ2Ð×2×2Ó2˜k×2×2Ó2Ð*×2×2Ó2¨d×2×2×2×2×2×2×2Ø×ÑÐ/˜hÐ/Ð˜hÓ'Ð/¨4Ð/¨4Ð/×/×/×/Ò/Ð'×/×/×/×/×/Õ/ˆ6×/×/×/Ñ/ˆ6×/×/Õ/Ð×/×/Ó/˜h×/×/Ó/Ð'×/×/Ó/¨4×/×/×/×/×/×/×/Ð/rF   c                  ób
  • [        SSSSS9n U R                  5       nSo"U;  o3(       d¥  [        R                  " SU4SX!45      [        R                  " U5      S	[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS	S
.-  nSSU0-  n[        [        R                  " U5      5      eS=p#So"U;  o3(       d¥  [        R                  " SU4SX!45      [        R                  " U5      S	[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS	S
.-  nSSU0-  n[        [        R                  " U5      5      eS=p#So"U;  o3(       d¥  [        R                  " SU4SX!45      [        R                  " U5      S	[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS	S
.-  nSSU0-  n[        [        R                  " U5      5      eS=p#So"U;  o3(       d¥  [        R                  " SU4SX!45      [        R                  " U5      S	[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS	S
.-  nSSU0-  n[        [        R                  " U5      5      eS=p#So"U;  o3(       d¥  [        R                  " SU4SX!45      [        R                  " U5      S	[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OS	S
.-  nSSU0-  n[        [        R                  " U5      5      eS=p#US   nSobU:H  o3(       do  [        R                  " SU4SX&45      [        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n=p6US   nSobU:H  o3(       do  [        R                  " SU4SX&45      [        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n=p6US   nSobU:H  o3(       do  [        R                  " SU4SX&45      [        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS=n=p6g)z%Test converting config to dictionary.z
secret-keyr   é   rJ   )r&   r3   r5   r9   r&   ©únot in©z%(py1)s not in %(py3)sÚconfig_dict©Úpy1Úpy3úassert %(py5)sr   Nr/   r0   r1   r2   r3   r   ©z%(py1)s == %(py4)s©rv   r   úassert %(py6)sr   r5   r9   ©
r   Úto_dictr'   r(   r,   r)   r*   r+   r-   r.   )	r   rt   Ú@py_assert0Ú@py_assert2Ú@py_format4r>   r=   Ú@py_format5Ú@py_format7s	            rD   Útest_config_to_dictrƒ   a   så  € äØ&Ø$ØØñ	€Fð —.‘.Ó"€KàÐ1 kÑ1×1×1×1Ò1Ð×1×1Ô1Ð×1×1×1×1×1Ô1 k×1×1×1Ñ1 k×1×1×1×1×1×1Ó1ØÐ. ;Ñ.×.×.×.Ò.Ð×.×.Ô.Ð×.×.×.×.×.Ô. ;×.×.×.Ñ. ;×.×.×.×.×.×.Ó.ØÐ, Ñ,×,×,×,Ò,ˆ>×,×,Ô,ˆ>×,×,×,×,×,Ô, ×,×,×,Ñ, ×,×,×,×,×,×,Ó,ØÐ. ;Ñ.×.×.×.Ò.Ð×.×.Ô.Ð×.×.×.×.×.Ô. ;×.×.×.Ñ. ;×.×.×.×.×.×.Ó.ØÐ- +Ñ-×-×-×-Ò-ˆ?×-×-Ô-ˆ?×-×-×-×-×-Ô- +×-×-×-Ñ- +×-×-×-×-×-×-Ó-ØÐ)Ñ*Ð9¨kÐ9¨kÑ9×9×9×9Ò9Ð*×9×9Ô9Ð*×9×9Ó9¨k×9×9×9×9×9×9Ó9ØÐ.Ñ/Ð4°1Ð4°1Ñ4×4×4×4Ò4Ð/×4×4Ô4Ð/×4×4Ó4°1×4×4×4×4×4×4Ó4Ø�{Ñ#Ð. wÐ. wÑ.×.×.×.Ò.Ð#×.×.Ô.Ð#×.×.Ó. w×.×.×.×.×.×.Ô.rF   c                  óž  • [        SS9n U R                  5       nSo"U;  o3(       d¥  [        R                  " SU4SX!45      [        R                  " U5      S[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OSS.-  nSS	U0-  n[        [        R                  " U5      5      eS=p#g)
z"Test to_dict excludes None values.N©r4   r4   rq   rs   rt   ru   rx   r   r|   )r   rt   r~   r   r€   r>   s         rD   Ú!test_config_to_dict_excludes_noner†   v   ss   € ä $Ñ'€Fà—.‘.Ó"€KàÐ- +Ñ-×-×-×-Ò-ˆ?×-×-Ô-ˆ?×-×-×-×-×-Ô- +×-×-×-Ñ- +×-×-×-×-×-×-Ô-rF   c                  ó@  • [        SS9n U R                  5       nUS   nSo2U:H  oD(       do  [        R                  " SU4SX#45      [        R                  " U5      [        R                  " U5      S.-  nSSU0-  n[        [        R                  " U5      5      eS	=n=pCg	)
z,Test to_dict includes explicitly set values.zclaude-3-5-sonnet-latestr…   r4   r   ry   rz   r{   r   N)r   r}   r'   r(   r,   r-   r.   )r   rt   r~   r=   r   r�   r‚   s          rD   Ú'test_config_to_dict_includes_set_valuesrˆ      sl   € äÐ"<Ñ=€Fà—.‘.Ó"€Kà�Ñ'ÐEÐ+EÐEÐ+EÑE×E×E×EÒEÐ'×E×EÔEÐ'×E×EÓEÐ+E×E×E×E×E×E×EÔErF   zquber.utils.config.load_dotenvc                 óä  • SU l         [        R                  " 5       nU R                  5         [	        U[        5      o"(       Gd+  SS[
        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OSS[
        R                  " 5       ;   d  [        R                  " U5      (       a  [        R                  " U5      OSS[
        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OS[        R                  " U5      S.-  n[        [        R                  " U5      5      eSng)zFTest loading config from environment variables with Pydantic settings.Nz5assert %(py4)s
{%(py4)s = %(py0)s(%(py1)s, %(py2)s)
}Ú
isinstancer   r   )r   rv   r   r   )Úreturn_valuer   ÚloadÚassert_called_oncerŠ   r)   r*   r'   r+   r,   r-   r.   )Úmock_load_dotenvr   r=   r�   s       rD   Ú!test_config_load_from_environmentr�   ˆ   sº   € ð %)ÐÔ!ä�[Š[‹]€Fà×'Ñ'Ô)ô �fœfÓ%Ð%Ö%×%×%×%×%×%Ñ%Œ:×%×%×%Ñ%Œ:×%×%×%×%×%Ö%�f×%×%×%Ñ%�f×%×%×%×%×%Ö%œf×%×%×%Ñ%œf×%×%Õ%Ð%×%×%×%×%×%Ò%rF   c                 ó\   • SU l         [        R                  " SS9  U R                  S5        g)z.Test loading config with custom env file path.Nz/path/to/.env.test)Úenv_file)r‹   r   rŒ   Úassert_called_once_with)rŽ   s    rD   Ú%test_config_load_with_custom_env_filer“   •   s)   € ð %)ÐÔ!ä
‡K‚KÐ-Ò.à×,Ñ,Ð-AÕBrF   c                  ó°  • [        5       n U R                  n[        U[        5      o"(       Gd@  SS[        R
                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OSS[        R
                  " 5       ;   d  [        R                  " U 5      (       a  [        R                  " U 5      OS[        R                  " U5      S[        R
                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OS[        R                  " U5      S.-  n[        [        R                  " U5      5      eS=pU R                  n[        U[        5      o"(       Gd@  SS[        R
                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OSS[        R
                  " 5       ;   d  [        R                  " U 5      (       a  [        R                  " U 5      OS[        R                  " U5      S[        R
                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OS[        R                  " U5      S.-  n[        [        R                  " U5      5      eS=pg)z'Test that path fields are Path objects.zUassert %(py6)s
{%(py6)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.output_dir
}, %(py4)s)
}rŠ   r   r   )r   rv   rw   r   r   NzZassert %(py6)s
{%(py6)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.experiments_dir
}, %(py4)s)
})r   r7   rŠ   r   r)   r*   r'   r+   r,   r-   r.   r8   )r   r   r@   r‚   s       rD   Útest_config_path_typesr•   Ÿ   sa  € ä‹X€Fà×'Ñ'Ð.Œ:Ð'¬Ó.Ð.Ö.×.×.×.×.×.Ñ.Œ:×.×.×.Ñ.Œ:×.×.×.×.×.Ö.�f×.×.×.Ñ.�f×.×.Õ.Ð'×.×.×.×.×.Ô.¬×.×.×.Ñ.¬×.×.Õ.Ð.×.×.×.×.×.Ò.Ø×,Ñ,Ð3Œ:Ð,¬dÓ3Ð3Ö3×3×3×3×3×3Ñ3Œ:×3×3×3Ñ3Œ:×3×3×3×3×3Ö3�f×3×3×3Ñ3�f×3×3Õ3Ð,×3×3×3×3×3Ô3¬d×3×3×3Ñ3¬d×3×3Õ3Ð3×3×3×3×3×3Ó3rF   c                  óp  • [        [        S5      [        S5      S9n U R                  nSn[        U5      o1U:H  oD(       Gd"  [        R                  " SU4SX45      S[
        R                  " 5       ;   d  [        R                  " U 5      (       a  [        R                  " U 5      OS[        R                  " U5      S[
        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OS[        R                  " U5      [        R                  " U5      S.-  nS	S
U0-  n[        [        R                  " U5      5      eS=n=n=p#U R                  nSn[        U5      o1U:H  oD(       Gd"  [        R                  " SU4SX45      S[
        R                  " 5       ;   d  [        R                  " U 5      (       a  [        R                  " U 5      OS[        R                  " U5      S[
        R                  " 5       ;   d  [        R                  " [        5      (       a  [        R                  " [        5      OS[        R                  " U5      [        R                  " U5      S.-  nS	S
U0-  n[        [        R                  " U5      5      eS=n=n=p#g)zTest setting custom paths.z/custom/outputz/custom/experiments)r7   r8   r   r   r   r   r   r   r    Nr"   )r   r   r7   r'   r(   r)   r*   r+   r,   r-   r.   r8   )r   r;   r@   rA   r=   rB   rC   s          rD   Útest_config_custom_pathsr—   §   s~  € äÜÐ(Ó)ÜÐ2Ó3ñ€Fð
 ×ÑÐ6Ð%5Ð6¤Ð%5Ó 6Ð6Ð 6Ñ6×6×6×6Ó6Ð×6×6×6×6×6Õ6ˆ6×6×6×6Ñ6ˆ6×6×6Õ6Ð×6×6×6×6×6Ô6¤×6×6×6Ñ6¤×6×6Õ6Ð%5×6×6Ó6Ð 6×6×6×6×6×6×6Õ6Ø×!Ñ!Ð@Ð*?Ð@¤TÐ*?Ó%@Ð@Ð%@Ñ@×@×@×@Ó@Ð!×@×@×@×@×@Õ@ˆ6×@×@×@Ñ@ˆ6×@×@Õ@Ð!×@×@×@×@×@Ô@¤T×@×@×@Ñ@¤T×@×@Õ@Ð*?×@×@Ó@Ð%@×@×@×@×@×@×@Ö@rF   )rŽ   ÚMagicMockType) Ú__doc__Úbuiltinsr)   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter'   Úpathlibr   Útypingr   Úunittest.mockr   Úquber.utils.configr   r   r˜   rE   rK   rZ   r]   rb   rf   rl   rn   rƒ   r†   rˆ   r�   r“   r•   r—   © rF   rD   Ú<module>r£      s˜   ðÙ *ç  „ Õ Ý  Ý å %æÝ8ò)ò&*ò">ò8ò4ò8ò1ò0ò/ò*.òFñ Ð'Ó(ó	&ó )ð	&ñ Ð'Ó(óCó )ðCò4óArF   