
    ^in                     ~   d Z ddlZddlmc mZ ddlZddlm	Z	 ddl
mZmZ ddlZej                  j                  d e e	e      j$                  j$                  j$                               ddlmZmZmZmZ  G d d      Z G d d	      Z G d
 d      Z G d d      Z G d d      Z G d d      Z G d d      Zy)u/   utils/model_router.py 테스트 스위트 (TDD)    N)Path)	MagicMockpatch)MODEL_HAIKU
MODEL_OPUSMODEL_SONNETroute_modelc                   (    e Zd ZdZddZddZddZy)TestConstantsu   모델명 상수 테스트Nc                 p   d}t         |k(  }|st        j                  d|fdt         |f      dt        j                         v st        j
                  t               rt        j                  t               ndt        j                  |      dz  }dd|iz  }t        t        j                  |            dx}}y)	u   MODEL_HAIKU 상수 값 확인zclaude-haiku-4-5-20251001==z%(py0)s == %(py3)sr   py0py3assert %(py5)spy5N)	r   
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanationself@py_assert2@py_assert1@py_format4@py_format6s        4/home/jay/workspace/utils/tests/test_model_router.pytest_model_haiku_constantz'TestConstants.test_model_haiku_constant   s^    99{99999{9999999{999{99999999999    c                 p   d}t         |k(  }|st        j                  d|fdt         |f      dt        j                         v st        j
                  t               rt        j                  t               ndt        j                  |      dz  }dd|iz  }t        t        j                  |            dx}}y)	u   MODEL_SONNET 상수 값 확인zclaude-sonnet-4-6r   r   r   r   r   r   N)	r   r   r   r   r   r   r   r   r   r   s        r#   test_model_sonnet_constantz(TestConstants.test_model_sonnet_constant   s^    22|22222|2222222|222|22222222222r%   c                 p   d}t         |k(  }|st        j                  d|fdt         |f      dt        j                         v st        j
                  t               rt        j                  t               ndt        j                  |      dz  }dd|iz  }t        t        j                  |            dx}}y)	u   MODEL_OPUS 상수 값 확인zclaude-opus-4-6r   r   r   r   r   r   N)	r   r   r   r   r   r   r   r   r   r   s        r#   test_model_opus_constantz&TestConstants.test_model_opus_constant   s^    ..z.....z.......z...z...........r%   returnN)__name__
__module____qualname____doc__r$   r'   r)    r%   r#   r   r      s    $:3/r%   r   c                   8    e Zd ZdZddZddZddZddZddZy)	TestSimpleTaskRoutingu+   단순 작업 → haiku 라우팅 테스트Nc                 F   d}t        |      }|t        k(  }|st        j                  d|fd|t        f      dt	        j
                         v st        j                  t               rt        j                  t               ndt        j                  |      t        j                  |      dt	        j
                         v st        j                  t              rt        j                  t              nddz  }dd|iz  }t        t        j                  |            d	x}x}}y	)
u'   짧은 단순 텍스트는 haiku 반환u   안녕하세요r   z0%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} == %(py6)sr	   r   r   py2py4py6assert %(py8)spy8N
r	   r   r   r   r   r   r   r   r   r   r   r    @py_assert3@py_assert5@py_format7@py_format9s         r#   $test_short_simple_text_returns_haikuz:TestSimpleTaskRouting.test_short_simple_text_returns_haiku"   s    ,<{,-<-<<<<-<<<<<<{<<<{<<<,<<<-<<<<<<<<<<<<<<<<r%   c                 F   d}t        |      }|t        k(  }|st        j                  d|fd|t        f      dt	        j
                         v st        j                  t               rt        j                  t               ndt        j                  |      t        j                  |      dt	        j
                         v st        j                  t              rt        j                  t              nddz  }dd|iz  }t        t        j                  |            d	x}x}}y	)
u%   'Hello' 같은 단어 하나는 haikuHellor   r4   r	   r   r5   r9   r:   Nr;   r<   s         r#   test_hello_world_returns_haikuz4TestSimpleTaskRouting.test_hello_world_returns_haiku&   s    "2{7#2#{2222#{222222{222{2227222#222222{222{2222222r%   c                 F   d}t        |      }|t        k(  }|st        j                  d|fd|t        f      dt	        j
                         v st        j                  t               rt        j                  t               ndt        j                  |      t        j                  |      dt	        j
                         v st        j                  t              rt        j                  t              nddz  }dd|iz  }t        t        j                  |            d	x}x}}y	)
u   짧은 질문 haiku 반환u   오늘 날씨가 어때요?r   r4   r	   r   r5   r9   r:   Nr;   r<   s         r#   !test_short_question_returns_haikuz7TestSimpleTaskRouting.test_short_question_returns_haiku*   s    8H{89H9[HHHH9[HHHHHH{HHH{HHH8HHH9HHHHHH[HHH[HHHHHHHr%   c                    d}t        |      }|t        k(  }|s/t        j                  d|fd|t        f      dt	        j
                         v st        j                  t               rt        j                  t               nddt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      dt	        j
                         v st        j                  t              rt        j                  t              nddz  }dd	|iz  }t        t        j                  |            d
x}}y
)u/   정확히 160자 텍스트는 haiku (경계값)ڠaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar   z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py5)sr	   taskr   r   py1r   r   assert %(py7)spy7Nr;   r   rJ   r   @py_assert4r"   @py_format8s         r#   $test_exactly_160_chars_returns_haikuz:TestSimpleTaskRouting.test_exactly_160_chars_returns_haiku.   s    4 / K//// K//////{///{//////4///4/// //////K///K///////r%   c                    dj                  dgdz        }t        |      }|t        k(  }|s/t        j                  d|fd|t        f      dt        j                         v st        j                  t              rt        j                  t              nddt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dt        j                         v st        j                  t              rt        j                  t              ndd	z  }d
d|iz  }t        t        j                  |            dx}}y)u1   정확히 28단어 텍스트는 haiku (경계값) word   r   rI   r	   rJ   r   rK   rM   rN   N)joinr	   r   r   r   r   r   r   r   r   r   rO   s         r#   #test_exactly_28_words_returns_haikuz9TestSimpleTaskRouting.test_exactly_28_words_returns_haiku3   s    xx2&4 / K//// K//////{///{//////4///4/// //////K///K///////r%   r*   )	r,   r-   r.   r/   rA   rD   rF   rR   rX   r0   r%   r#   r2   r2      s    5=3I0
0r%   r2   c                   `    e Zd ZdZddZddZddZddZddZddZ	dd	Z
dd
ZddZddZy)TestComplexTaskRoutingu-   복잡 키워드 → opus 라우팅 테스트Nc                 F   d}t        |      }|t        k(  }|st        j                  d|fd|t        f      dt	        j
                         v st        j                  t               rt        j                  t               ndt        j                  |      t        j                  |      dt	        j
                         v st        j                  t              rt        j                  t              nddz  }dd|iz  }t        t        j                  |            d	x}x}}y	)
u   'analyze' 키워드 → opuszPlease analyze this coder   r4   r	   r   r5   r9   r:   N
r	   r   r   r   r   r   r   r   r   r   r<   s         r#   !test_analyze_keyword_returns_opusz8TestComplexTaskRouting.test_analyze_keyword_returns_opus<   s    5D{56D6*DDDD6*DDDDDD{DDD{DDD5DDD6DDDDDD*DDD*DDDDDDDr%   c                 F   d}t        |      }|t        k(  }|st        j                  d|fd|t        f      dt	        j
                         v st        j                  t               rt        j                  t               ndt        j                  |      t        j                  |      dt	        j
                         v st        j                  t              rt        j                  t              nddz  }dd|iz  }t        t        j                  |            d	x}x}}y	)
u   'implement' 키워드 → opuszimplement a new featurer   r4   r	   r   r5   r9   r:   Nr\   r<   s         r#   #test_implement_keyword_returns_opusz:TestComplexTaskRouting.test_implement_keyword_returns_opus@   s    4C{45C5CCCC5CCCCCC{CCC{CCC4CCC5CCCCCCCCCCCCCCCCr%   c                 F   d}t        |      }|t        k(  }|st        j                  d|fd|t        f      dt	        j
                         v st        j                  t               rt        j                  t               ndt        j                  |      t        j                  |      dt	        j
                         v st        j                  t              rt        j                  t              nddz  }dd|iz  }t        t        j                  |            d	x}x}}y	)
u!   'architecture' 키워드 → opusz'design the architecture for this systemr   r4   r	   r   r5   r9   r:   Nr\   r<   s         r#   &test_architecture_keyword_returns_opusz=TestComplexTaskRouting.test_architecture_keyword_returns_opusD   s    DS{DESESSSSESSSSSS{SSS{SSSDSSSESSSSSSSSSSSSSSSSr%   c                 F   d}t        |      }|t        k(  }|st        j                  d|fd|t        f      dt	        j
                         v st        j                  t               rt        j                  t               ndt        j                  |      t        j                  |      dt	        j
                         v st        j                  t              rt        j                  t              nddz  }dd|iz  }t        t        j                  |            d	x}x}}y	)
u   'security' 키워드 → opuszCheck the security of this APIr   r4   r	   r   r5   r9   r:   Nr\   r<   s         r#   "test_security_keyword_returns_opusz9TestComplexTaskRouting.test_security_keyword_returns_opusH   s    ;J{;<J<
JJJJ<
JJJJJJ{JJJ{JJJ;JJJ<JJJJJJ
JJJ
JJJJJJJr%   c                 F   d}t        |      }|t        k(  }|st        j                  d|fd|t        f      dt	        j
                         v st        j                  t               rt        j                  t               ndt        j                  |      t        j                  |      dt	        j
                         v st        j                  t              rt        j                  t              nddz  }dd|iz  }t        t        j                  |            d	x}x}}y	)
u    'performance' 키워드 → opusz)Improve performance of the database queryr   r4   r	   r   r5   r9   r:   Nr\   r<   s         r#   %test_performance_keyword_returns_opusz<TestComplexTaskRouting.test_performance_keyword_returns_opusL   s    FU{FGUG:UUUUG:UUUUUU{UUU{UUUFUUUGUUUUUU:UUU:UUUUUUUr%   c                 F   d}t        |      }|t        k(  }|st        j                  d|fd|t        f      dt	        j
                         v st        j                  t               rt        j                  t               ndt        j                  |      t        j                  |      dt	        j
                         v st        j                  t              rt        j                  t              nddz  }dd|iz  }t        t        j                  |            d	x}x}}y	)
u   'debug' 키워드 → opuszdebug this errorr   r4   r	   r   r5   r9   r:   Nr\   r<   s         r#   test_debug_keyword_returns_opusz6TestComplexTaskRouting.test_debug_keyword_returns_opusP   s    -<{-.<.*<<<<.*<<<<<<{<<<{<<<-<<<.<<<<<<*<<<*<<<<<<<r%   c                 F   d}t        |      }|t        k(  }|st        j                  d|fd|t        f      dt	        j
                         v st        j                  t               rt        j                  t               ndt        j                  |      t        j                  |      dt	        j
                         v st        j                  t              rt        j                  t              nddz  }dd|iz  }t        t        j                  |            d	x}x}}y	)
u   'refactor' 키워드 → opuszrefactor the moduler   r4   r	   r   r5   r9   r:   Nr\   r<   s         r#   "test_refactor_keyword_returns_opusz9TestComplexTaskRouting.test_refactor_keyword_returns_opusT   s    0?{01?1Z????1Z??????{???{???0???1??????Z???Z???????r%   c                    d}t        |      }|t        k(  }|st        j                  d|fd|t        f      dt	        j
                         v st        j                  t               rt        j                  t               ndt        j                  |      t        j                  |      dt	        j
                         v st        j                  t              rt        j                  t              nddz  }dd|iz  }t        t        j                  |            d	x}x}}d
}t        |      }|t        k(  }|st        j                  d|fd|t        f      dt	        j
                         v st        j                  t               rt        j                  t               ndt        j                  |      t        j                  |      dt	        j
                         v st        j                  t              rt        j                  t              nddz  }dd|iz  }t        t        j                  |            d	x}x}}y	)u   키워드 대소문자 무관zANALYZE this coder   r4   r	   r   r5   r9   r:   NzImplement the featurer\   r<   s         r#   test_keyword_case_insensitivez4TestComplexTaskRouting.test_keyword_case_insensitiveX   s&   .={./=/:====/:======{==={===.===/======:===:=======2A{23A3zAAAA3zAAAAAA{AAA{AAA2AAA3AAAAAAzAAAzAAAAAAAr%   c                 F   d}t        |      }|t        k(  }|st        j                  d|fd|t        f      dt	        j
                         v st        j                  t               rt        j                  t               ndt        j                  |      t        j                  |      dt	        j
                         v st        j                  t              rt        j                  t              nddz  }dd|iz  }t        t        j                  |            d	x}x}}y	)
u   'optimize' 키워드 → opuszoptimize the algorithmr   r4   r	   r   r5   r9   r:   Nr\   r<   s         r#   "test_optimize_keyword_returns_opusz9TestComplexTaskRouting.test_optimize_keyword_returns_opus]   s    3B{34B4
BBBB4
BBBBBB{BBB{BBB3BBB4BBBBBB
BBB
BBBBBBBr%   c                 F   d}t        |      }|t        k(  }|st        j                  d|fd|t        f      dt	        j
                         v st        j                  t               rt        j                  t               ndt        j                  |      t        j                  |      dt	        j
                         v st        j                  t              rt        j                  t              nddz  }dd|iz  }t        t        j                  |            d	x}x}}y	)
u   'migrate' 키워드 → opuszmigrate the database schemar   r4   r	   r   r5   r9   r:   Nr\   r<   s         r#   !test_migrate_keyword_returns_opusz8TestComplexTaskRouting.test_migrate_keyword_returns_opusa   s    8G{89G9ZGGGG9ZGGGGGG{GGG{GGG8GGG9GGGGGGZGGGZGGGGGGGr%   r*   )r,   r-   r.   r/   r]   r_   ra   rc   re   rg   ri   rk   rm   ro   r0   r%   r#   rZ   rZ   9   s@    7EDTKV=@B
CHr%   rZ   c                   (    e Zd ZdZddZddZddZy)TestMediumTaskRoutingu6   보통 길이 텍스트 → sonnet 라우팅 테스트Nc                    d}t        |      }|t        k(  }|s/t        j                  d|fd|t        f      dt	        j
                         v st        j                  t               rt        j                  t               nddt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      dt	        j
                         v st        j                  t              rt        j                  t              nddz  }dd	|iz  }t        t        j                  |            d
x}}y
)u!   161자 단순 텍스트는 sonnetڡaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar   rI   r	   rJ   r   rK   rM   rN   N)
r	   r   r   r   r   r   r   r   r   r   rO   s         r#   0test_161_chars_no_complex_keyword_returns_sonnetzFTestMediumTaskRouting.test_161_chars_no_complex_keyword_returns_sonneti   s    4 0 L0000 L000000{000{00000040004000 000000L000L0000000r%   c                    dj                  dgdz        }t        |      }|t        k(  }|s/t        j                  d|fd|t        f      dt        j                         v st        j                  t              rt        j                  t              nddt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      dt        j                         v st        j                  t              rt        j                  t              ndd	z  }d
d|iz  }t        t        j                  |            dx}}y)u#   29단어 단순 텍스트는 sonnetrT   rU      r   rI   r	   rJ   r   rK   rM   rN   N)rW   r	   r   r   r   r   r   r   r   r   r   rO   s         r#   /test_29_words_no_complex_keyword_returns_sonnetzETestMediumTaskRouting.test_29_words_no_complex_keyword_returns_sonnetn   s    xx2&4 0 L0000 L000000{000{00000040004000 000000L000L0000000r%   c           	         dj                  dgdz        }|j                  } |       }t        |      }d}||kD  }|st        j                  d|fd||f      dt        j                         v st        j                  t              rt        j                  t              nddt        j                         v st        j                  |      rt        j                  |      ndt        j                  |      t        j                  |      t        j                  |      t        j                  |      d	z  }d
d|iz  }t        t        j                  |            dx}x}x}x}}t        |      }	|	t        k(  }
|
st        j                  d|
fd|	t        f      dt        j                         v st        j                  |	      rt        j                  |	      nddt        j                         v st        j                  t              rt        j                  t              nddz  }dd|iz  }t        t        j                  |            d}
y)uF   복잡 키워드 없는 중간 길이 문단은 sonnet (161자 초과)rT   rU   rv   rV   )>)zb%(py7)s
{%(py7)s = %(py0)s(%(py5)s
{%(py5)s = %(py3)s
{%(py3)s = %(py1)s.split
}()
})
} > %(py10)slenrJ   )r   rL   r   r   rN   py10zassert %(py12)spy12Nr   z%(py0)s == %(py2)sresultr   r   r6   assert %(py4)sr7   )rW   splitrz   r   r   r   r   r   r   r   r   r	   r   )r   rJ   r   rP   @py_assert6@py_assert9@py_assert8@py_format11@py_format13r~   r    @py_format3@py_format5s                r#   $test_medium_paragraph_returns_sonnetz:TestMediumTaskRouting.test_medium_paragraph_returns_sonnets   s@    xx2&::%:<%s< %2% 2%%%% 2%%%%%%s%%%s%%%%%%4%%%4%%%:%%%<%%% %%%2%%%%%%%T"%%%%v%%%%%%v%%%v%%%%%%%%%%%%%%%%r%   r*   )r,   r-   r.   r/   rt   rw   r   r0   r%   r#   rq   rq   f   s    @1
1
&r%   rq   c                   0    e Zd ZdZddZddZddZddZy)TestBoundaryConditionsu   경계값 테스트Nc                    d}t        |      }|t        k(  }|s/t        j                  d|fd|t        f      dt	        j
                         v st        j                  t               rt        j                  t               nddt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      dt	        j
                         v st        j                  t              rt        j                  t              nddz  }dd	|iz  }t        t        j                  |            d
x}}y
)u)   161자 + 복잡 키워드 조합 → opuszanalyze aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaar   rI   r	   rJ   r   rK   rM   rN   Nr\   rO   s         r#   0test_161_chars_with_complex_keyword_returns_opuszGTestBoundaryConditions.test_161_chars_with_complex_keyword_returns_opus   s    %4 . J.... J......{...{......4...4... ......J...J.......r%   c                 F   d}t        |      }|t        k(  }|st        j                  d|fd|t        f      dt	        j
                         v st        j                  t               rt        j                  t               ndt        j                  |      t        j                  |      dt	        j
                         v st        j                  t              rt        j                  t              nddz  }dd|iz  }t        t        j                  |            d	x}x}}y	)
u   빈 문자열은 haiku r   r4   r	   r   r5   r9   r:   Nr;   r<   s         r#   test_empty_string_returns_haikuz6TestBoundaryConditions.test_empty_string_returns_haiku   s    -{2-+----+------{---{---2---------+---+-------r%   c                 F   d}t        |      }|t        k(  }|st        j                  d|fd|t        f      dt	        j
                         v st        j                  t               rt        j                  t               ndt        j                  |      t        j                  |      dt	        j
                         v st        j                  t              rt        j                  t              nddz  }dd|iz  }t        t        j                  |            d	x}x}}y	)
u   공백만 있는 경우 haikuz   r   r4   r	   r   r5   r9   r:   Nr;   r<   s         r#   "test_whitespace_only_returns_haikuz9TestBoundaryConditions.test_whitespace_only_returns_haiku   s     0{5!0![0000![000000{000{0005000!000000[000[0000000r%   c                    d}t        |      }|t        k(  }|s/t        j                  d|fd|t        f      dt	        j
                         v st        j                  t               rt        j                  t               nddt	        j
                         v st        j                  |      rt        j                  |      ndt        j                  |      dt	        j
                         v st        j                  t              rt        j                  t              nddz  }dd	|iz  }t        t        j                  |            d
x}}y
)u1   긴 텍스트에 복잡 키워드 포함 → opusa  Please help me help me help me help me help me help me help me help me help me help me help me help me help me help me help me help me help me help me help me help me help me help me help me help me help me help me help me help me help me help me to diagnose this issuer   rI   r	   rJ   r   rK   rM   rN   Nr\   rO   s         r#   !test_complex_keyword_in_long_textz8TestBoundaryConditions.test_complex_keyword_in_long_text   s    E4 . J.... J......{...{......4...4... ......J...J.......r%   r*   )r,   r-   r.   r/   r   r   r   r   r0   r%   r#   r   r   }   s    /
.1/r%   r   c                        e Zd ZdZddZddZy)TestCfgFallbacku   cfg=None fallback 테스트Nc                    t        dd      }|t        k(  }|st        j                  d|fd|t        f      dt	        j
                         v st        j                  |      rt        j                  |      nddt	        j
                         v st        j                  t              rt        j                  t              nddz  }d	d
|iz  }t        t        j                  |            d}y)u%   cfg=None 일 때 기본 모델 사용rC   Ncfgr   r}   r~   r   r   r   r7   r;   r   r~   r    r   r   s        r#   test_cfg_none_uses_defaultsz+TestCfgFallback.test_cfg_none_uses_defaults   sv    W$/$$$$v$$$$$$v$$$v$$$$$$$$$$$$$$$$r%   c                    t        dd      }|t        k(  }|st        j                  d|fd|t        f      dt	        j
                         v st        j                  |      rt        j                  |      nddt	        j
                         v st        j                  t              rt        j                  t              nddz  }d	d
|iz  }t        t        j                  |            d}y)u,   cfg=None 복잡 작업은 기본 opus 반환zanalyze this codeNr   r   r}   r~   r   r   r   r7   r\   r   s        r#   test_cfg_none_complex_uses_opusz/TestCfgFallback.test_cfg_none_complex_uses_opus   sw    0d;####v######v###v################r%   r*   )r,   r-   r.   r/   r   r   r0   r%   r#   r   r      s    %%
$r%   r   c                   0    e Zd ZdZddZddZddZddZy)TestConfigOverrideu'   config에서 모델명 읽기 테스트Nc                    t               }dd|j                  _        t        d|      }d}||k(  }|st	        j
                  d|fd||f      dt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      d	z  }d
d|iz  }t        t	        j                  |            dx}}y)u,   config에서 haiku 모델명 오버라이드Nc                 >    dt         t        dj                  | |      S )Ncustom-haiku-modelmodels.router.haikuzmodels.router.sonnetzmodels.router.opus)r   r   getkeydefaults     r#   <lambda>zFTestConfigOverride.test_config_overrides_haiku_model.<locals>.<lambda>   s#    #7$0",>
 #c7
	 r%   rC   r   r   r   r   r~   r   r   r   Nr   r   side_effectr	   r   r   r   r   r   r   r   r   r   mock_cfgr~   r   r    r!   r"   s          r#   !test_config_overrides_haiku_modelz4TestConfigOverride.test_config_overrides_haiku_model   s    ;$  W(3--v-----v-------v---v-----------r%   c                    t               }dd|j                  _        t        d|      }d}||k(  }|st	        j
                  d|fd||f      dt        j                         v st	        j                  |      rt	        j                  |      ndt	        j                  |      d	z  }d
d|iz  }t        t	        j                  |            dx}}y)u+   config에서 opus 모델명 오버라이드Nc                 >    t         t        ddj                  | |      S )Ncustom-opus-modelr   )r   r   r   r   s     r#   r   zETestConfigOverride.test_config_overrides_opus_model.<locals>.<lambda>   s#    #.$0"5>
 #c7
	 r%   zanalyze this architecturer   r   r   r   r~   r   r   r   r   r   r   s          r#    test_config_overrides_opus_modelz3TestConfigOverride.test_config_overrides_opus_model   s    ;$  8hG,,v,,,,,v,,,,,,,v,,,v,,,,,,,,,,,r%   c                    t               }dd|j                  _        t        d|      }|t        k(  }|st        j                  d|fd|t        f      dt        j                         v st        j                  |      rt        j                  |      nddt        j                         v st        j                  t              rt        j                  t              ndd	z  }d
d|iz  }t        t        j                  |            d}y)u?   config에 일부 키만 있으면 나머지는 기본값 사용Nc                     |S r   r0   r   s     r#   r   zATestConfigOverride.test_config_partial_fallback.<locals>.<lambda>   s    W r%   rC   r   r   r}   r~   r   r   r   r7   r   )r   r   r   r	   r   r   r   r   r   r   r   r   r   )r   r   r~   r    r   r   s         r#   test_config_partial_fallbackz/TestConfigOverride.test_config_partial_fallback   s    ;#D W(3$$$$v$$$$$$v$$$v$$$$$$$$$$$$$$$$r%   c                    t               }d|j                  _        t        d|       |j                  j                  D cg c]  }|j
                  d    }}d}||v }|st        j                  d|fd||f      t        j                  |      dt        j                         v st        j                  |      rt        j                  |      ndd	z  }d
d|iz  }t        t        j                  |            dx}}yc c}w )u7   config.get()이 올바른 키로 호출되는지 확인NrC   r   r   r   )in)z%(py1)s in %(py3)scalled_keys)rL   r   r   r   )r   r   return_valuer	   call_args_listargsr   r   r   r   r   r   r   r   )r   r   callr   @py_assert0r   r!   r"   s           r#   $test_config_called_with_correct_keysz7TestConfigOverride.test_config_called_with_correct_keys   s    ;$(!G*080K0KLtyy|LL$3$3333$333$3333333333333333 Ms   C?r*   )r,   r-   r.   r/   r   r   r   r   r0   r%   r#   r   r      s    1
.
-%4r%   r   )r/   builtinsr   _pytest.assertion.rewrite	assertionrewriter   syspathlibr   unittest.mockr   r   pytestpathinsertstr__file__parentutils.model_routerr   r   r   r	   r   r2   rZ   rq   r   r   r   r0   r%   r#   <module>r      s    5   
  *  3tH~,,33::; < Q Q/ / 0 04*H *HZ& &./ /,$ $,4 ,4r%   