U
    h                     @  s   d Z ddlmZ ddlmZ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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 G dd dZdddddZdS )zMagicsEngine class.    )annotations)AbstractSetSequence)argument_parser)cmd_line_parser)command)compare_cmd)compile_cmd)eval_cmd)ipython_env)model_registry)parsed_args_lib)post_process_utils)run_cmd)prompt_utilsc                   @  sV   e Zd ZdZddddddZdd	d
dddZdd	ddddZdddddZdS )MagicsEnginezImplementation of functionality used by Magics.

  This class provides the implementation for Magics, decoupled from the
  details of integrating with Colab Magics such as registration.
  Nz#model_registry.ModelRegistry | Nonezipython_env.IPythonEnv | None)registryenvc                 C  sb   || _ |pt }tjjtj||dtjjt	j
||dtjjtj|dtjjtj||di| _d S )N)modelsr   )r   )_ipython_envr   ZModelRegistryr   ZCommandNameZRUN_CMDr   Z
RunCommandZCOMPILE_CMDr	   ZCompileCommandZCOMPARE_CMDr   ZCompareCommandZEVAL_CMDr
   ZEvalCommand_cmd_handlers)selfr   r   r    r   N/tmp/pip-unpacked-wheel-doshhd5e/google/generativeai/notebook/magics_engine.py__init__)   s,           zMagicsEngine.__init__strzAbstractSet[str]zGtuple[parsed_args_lib.ParsedArgs, parsed_args_lib.PostProcessingTokens])lineplaceholdersreturnc                 C  s   t  ||S )N)r   ZCmdLineParser
parse_line)r   r   r   r   r   r   r   ?   s    zMagicsEngine.parse_linezftuple[command.Command, parsed_args_lib.ParsedArgs, Sequence[post_process_utils.ParsedPostProcessExpr]]c                 C  s4   |  ||\}}|j}| j| }||}|||fS )aY  Given the command line, parse and return all components.

    Args:
      line: The LLM Magics command line.
      placeholders: Placeholders from prompts in the cell contents.

    Returns:
      A three-tuple containing:
      - The command (e.g. "run")
      - Parsed arguments for the command,
      - Parsed post-processing expressions
    )r   cmdr   Zparse_post_processing_tokens)r   r   r   parsed_argsZpost_processing_tokenscmd_namehandlerpost_processing_fnsr   r   r   _get_handlerF   s    
zMagicsEngine._get_handler)r   cell_contentc           
   
   C  s   t |}t|}z"| ||\}}}||||W S  tjk
rv } z"| jdk	r^|| j | W Y S d}~X Y nX tj	k
r } z8|
| j | rd| d nd}	t|	|W 5 d}~X Y nX dS )z2Executes the supplied magic line and cell payload.NzGot parser error: {} )_clean_cellr   Zget_placeholdersr%   executer   ZParserNormalExitr   Zset_ipython_envZParserErrorZdisplayZmsgsformat
SystemExit)
r   r   r&   cellr   r#   r!   r$   e	error_msgr   r   r   execute_cella   s"    
 

zMagicsEngine.execute_cell)NN)__name__
__module____qualname____doc__r   r   r%   r0   r   r   r   r   r   "   s     r   r   )r&   r   c                 C  s   | }| dr|d d }|S )N
r'   )endswith)r&   r-   r   r   r   r)      s    
r)   N)r4   
__future__r   typingr   r   Zgoogle.generativeai.notebookr   r   r   r   r	   r
   r   r   r   r   r   Z google.generativeai.notebook.libr   r   r)   r   r   r   r   <module>   s    `