U
    h!                     @  s,  d Z ddlmZ ddlZddlmZ ddlmZ ddlm	Z	 ddlm
Z ddlmZ dd	lmZ dd
lmZ dZejZejZe	jZdddddZe	jdddddZe	jdddddZejejdeje iG dd dejZejejdeje iG dd dejZ edkr(e!  dS )z!Unittests for post_process_utils.    )annotationsN)mock)absltest)post_process_utils)post_process_utils_test_helper)llm_function)llmfn_output_row)modelzthis is a string not a functionstrint)xreturnc                 C  s   t | S Nlenr    r   X/tmp/pip-unpacked-wheel-doshhd5e/google/generativeai/notebook/post_process_utils_test.py
add_length"   s    r   c                 C  s   t | S r   r   r   r   r   r   add_length_decorated&   s    r   c                 C  s   |   S r   )upperr   r   r   r   to_upper+   s    r   __main__c                   @  s\   e 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dS )PostProcessUtilsResolveTestc              	   C  s&   |  td tg  W 5 Q R X d S )NzCannot have emptyassertRaisesRegexPostProcessParseErrorr   '_resolve_one_post_processing_expressionselfr   r   r   $test_cannot_resolve_empty_expression4   s    z@PostProcessUtilsResolveTest.test_cannot_resolve_empty_expressionc              	   C  s*   |  td tddg W 5 Q R X d S )Nzshould be a single tokenhelloZworldr   r   r   r   r   (test_cannot_resolve_multiword_expression8   s     zDPostProcessUtilsResolveTest.test_cannot_resolve_multiword_expressionc              	   C  s(   |  td tdg W 5 Q R X d S )Nz"Unable to resolve "invalid_module"zinvalid_module.add_lengthr   r   r   r   r   "test_cannot_resolve_invalid_module@   s     z>PostProcessUtilsResolveTest.test_cannot_resolve_invalid_modulec              	   C  s(   |  td tdg W 5 Q R X d S )Nz+Unable to resolve "helper.invalid_function"zhelper.invalid_functionr   r   r   r   r   $test_cannot_resolve_invalid_functionH   s     z@PostProcessUtilsResolveTest.test_cannot_resolve_invalid_functionc                 C  s<   t dg\}}| d| | t| | d|d d S )Nr      hello_world)r   r   assertEqualr   r   nameexprr   r   r   !test_resolve_undecorated_functionP   s    z=PostProcessUtilsResolveTest.test_resolve_undecorated_functionc                 C  sZ   t dg\}}| d| | t| | |t j | dg|tdditdg d S )Nr   r%   text_resultr&   dataZresult_type)r   r   r'   r   assertIsInstance_ParsedPostProcessAddExprLLMFnOutputRowr
   r(   r   r   r   #test_resolve_decorated_add_functionX   s      z?PostProcessUtilsResolveTest.test_resolve_decorated_add_functionc                 C  sZ   t dg\}}| d| | t| | |t j | dg|tdditdg d S )Nr   HELLO_WORLDr,   r&   r-   )r   r   r'   r   r/   _ParsedPostProcessReplaceExprr1   r
   r(   r   r   r   'test_resolve_decorated_replace_functionj   s&      zCPostProcessUtilsResolveTest.test_resolve_decorated_replace_functionc                 C  s>   t dg\}}| d| | tj| | d|d d S )Nhelper.add_lengthr%   r&   )r   r   r'   helperr   r(   r   r   r   (test_resolve_module_undecorated_function   s    zDPostProcessUtilsResolveTest.test_resolve_module_undecorated_functionc                 C  s\   t dg\}}| d| | tj| | |t j | dg|tdditdg d S )Nhelper.add_length_decoratedr%   r,   r&   r-   )	r   r   r'   r7   r   r/   r0   r1   r
   r(   r   r   r   *test_resolve_module_decorated_add_function   s      zFPostProcessUtilsResolveTest.test_resolve_module_decorated_add_functionc                 C  s\   t dg\}}| d| | tj| | |t j | dg|tdditdg d S )Nhelper.to_upperr3   r,   r&   r-   )	r   r   r'   r7   r   r/   r4   r1   r
   r(   r   r   r   .test_resolve_module_decorated_replace_function   s&      zJPostProcessUtilsResolveTest.test_resolve_module_decorated_replace_functionN)__name__
__module____qualname__r    r"   r#   r$   r+   r2   r5   r8   r:   r<   r   r   r   r   r   1   s   r   c                   @  s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
PostProcessUtilsTestc              	   C  s*   |  td tdgg W 5 Q R X d S )NzNOT_A_FUNCTION is not callableNOT_A_FUNCTION)r   r   r   resolve_post_processing_tokensr   r   r   r   test_must_be_callable   s
     z*PostProcessUtilsTest.test_must_be_callablec              	   C  s   t dgg}| |d | |d t j tjt dgd}|d 	| | }| 
dgdgdgdgdgdgd|  dS )	zATest that from a post-processing token to an updated LLMFunction.r      r   r!   r	   Zprompts   )	Input Num
Prompt NumPrompt
Result Numr   r,   N)r   rB   	assertLenr/   r0   r   LLMFunctionImpl	model_lib	EchoModeladd_to_llm_functionr'   as_dictr   parsed_exprsllm_fnresultsr   r   r   test_parsed_post_process_add_fn   s0      z4PostProcessUtilsTest.test_parsed_post_process_add_fnc                 C  s~   t dgg}| |d | |d t j tjt dgd}|d 	| | }| 
dgdgdgdgdgd|  d S )Nr   rD   r   r!   rE   HELLO)rG   rH   rI   rJ   r,   )r   rB   rK   r/   r4   r   rL   rM   rN   rO   r'   rP   rQ   r   r   r   #test_parsed_post_process_replace_fn   s.      z8PostProcessUtilsTest.test_parsed_post_process_replace_fnc                 C  s   t dgdgdgdgdgdgg}|D ]}| |t j q&tjt dgd}|D ]}|| qR| }| 	d	gd	gdgd	gd
gd
gd
gd
gdgd	|
  d S )Nr   r   r   r6   r9   r;   r!   rE   r   rF   rV   )	rG   rH   rI   rJ   r   r   Zadd_length_decorated_1r6   r,   )r   rB   r/   ZParsedPostProcessExprr   rL   rM   rN   rO   r'   rP   )r   rR   fnrS   r*   rT   r   r   r   #test_resolve_post_processing_tokens   s<    	 z8PostProcessUtilsTest.test_resolve_post_processing_tokensN)r=   r>   r?   rC   rU   rW   rY   r   r   r   r   r@      s   r@   )"__doc__
__future__r   sysZunittestr   Zabsl.testingr   Zgoogle.generativeai.notebookr   r   r7   Z google.generativeai.notebook.libr   r   r	   rM   rA   r1   ZLLMFnOutputRowViewr   r   Zpost_process_add_fnr   Zpost_process_replace_fnr   patchdictmodulesr=   ZTestCaser   r@   mainr   r   r   r   <module>   s0   }^
