B
    \5                 @   sr  d Z ddlmZ ddlZddlZddlZddlmZ ddlm	Z	 yddl
mZ W nF ek
r   yddlmZ W n  ek
r   ddlmZ Y nX Y nX ydd	lmZ W n  ek
r   dd	l
mZ Y nX ydd
lmZ W nJ ek
r$   ydd
l
mZ W n" ek
r   dd
lmZ Y nX Y nX edZedZedZdd Zdd Zdd Zdd ZdddZdS )a5  
    This is the h5py completer extension for ipython.  It is loaded by
    calling the function h5py.enable_ipython_completer() from within an
    interactive IPython session.

    It will let you do things like::

      f=File('foo.h5')
      f['<tab>
      # or:
      f['ite<tab>

    which will do tab completion based on the subgroups of `f`. Also::

      f['item1'].at<tab>

    will perform tab completion for the attributes in the usual way. This should
    also work::

      a = b = f['item1'].attrs.<tab>

    as should::

      f['item1/item2/it<tab>
    )absolute_importN   )AttributeManager)HLObject)get_ipython)get)generics)TryNextz(?:.*\=)?(.+\[.*\].*)\.(\w*)$z,(?:.*\=)?(.*)\[(?P<s>['|"])(?!.*(?P=s))(.*)$z(?:.*\=)?(.+?)(?:\[)c             C   sF   d| krt  yt| |jj}W n  tk
r@   t| |j}Y nX |S )z! Filter function for completion. ()
ValueErrorevalshellZuser_nsAttributeError)namecontextobj r   1lib/python3.7/site-packages/h5py/ipy_completer.py_retrieve_objQ   s    r   c                s   t |ddd \} yt|| }W n tk
r:   g S X t \}y,rlfdd|  D }n| }W n tk
r   g S X t|}t	d  fdd|D S )	z3Compute possible item matches for dict-like objectsr         c             3   s   | ]}t  |V  qd S )N)	posixpathjoin).0r   )pathr   r   	<genexpr>r   s    z&h5py_item_completer.<locals>.<genexpr>z 	
`!@#$^&*()=+[{]}\|;:'",<>?c                s$   g | ]}|d t    kr|qS )N)len)r   i)itemr   r   
<listcomp>{   s    z'h5py_item_completer.<locals>.<listcomp>)
re_item_matchsplitr   	Exceptionr   keysr   listreadlineset_completer_delims)r   commandbaser   _itemsr   )r   r   r   h5py_item_completerd   s    
r+   c                sB  t |dd \  yt| }W n tk
r@   g S X t|}yt||}W n tk
rn   Y nX d}yt	 j
j}W n tk
r   Y nX |dkryt	 j}W n tk
r   Y nX |dkryt	 jj}W n tk
r   d}Y nX |dkrdd |D }n|dkr$dd |D }td	  fd
d|D S )z:Compute possible attr matches for nested dict-like objectsr      Nr   c             S   s   g | ]}| d s|qS )__)
startswith)r   ar   r   r   r      s    z'h5py_attr_completer.<locals>.<listcomp>r   c             S   s   g | ]}| d s|qS )r)   )r.   )r   r/   r   r   r   r      s    z =c                s,   g | ]$}|d t    krd|f qS )Nz%s.%s)r   )r   r/   )attrr(   r   r   r      s    )re_attr_matchr!   stripr   r"   dirr   Zcomplete_objectr	   r   Z	Completeromit__namesr   Zreadline_omit__namesZoptionsr%   r&   )r   r'   r   Zattrsr4   r   )r0   r(   r   h5py_attr_completer~   s@    



r5   c             C   sv   t |jd }t| |dttfs.tyt	| |jS  t
k
rN   Y nX yt| |jS  t
k
rp   Y nX g S )z. Completer function to be loaded into IPython r   r   )re_object_matchr!   line
isinstanceZ_ofindr   r   r   r	   r5   r   r+   )selfZeventr(   r   r   r   h5py_completer   s    r:   c             C   s"   | dkrt  } | jdtdd dS )z& Load completer function into IPython NZcomplete_commandz(?:.*\=)?(.+?)\[)Zre_key)r   Zset_hookr:   )Zipr   r   r   load_ipython_extension   s    r;   )N)__doc__Z
__future__r   r   rer%   Z	_hl.attrsr   Z_hl.baser   ZIPythonr   ImportErrorZIPython.core.ipapir   ZIPython.ipapiZIPython.utilsr   ZIPython.core.errorr	   compiler1   r    r6   r   r+   r5   r:   r;   r   r   r   r   <module>(   s@   


-