U
    hâËd2  ã                   @   s¤   d Z ddlZzddlZddlZW n ek
r<   edƒ‚Y nX G dd„ dƒZG dd„ dƒZG dd	„ d	ƒZG d
d„ dƒZG dd„ dƒZ	dd„ Z
ej e ¡ e
ƒ ¡ dS )z(gdb printing extension for Numba types.
é    Nz$GDB python support is not available.c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚNumbaArrayPrinterc                 C   s
   || _ d S ©N©Úval©Úselfr   © r   úW/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/numba/misc/gdb_print_extension.pyÚ__init__   s    zNumbaArrayPrinter.__init__c           )   
   C   sö  zdd l }d}W n tk
r(   d}Y nX �z”d}| jd }| jd }| jd }| jd }d}t| jjƒ}	|�rŠd|	ks‚d	|	k�rŠ|	 d
d¡ ¡ }	t d¡}
dd„ |
 	|	¡ 
¡ D ƒ}|\}}}d}t 	||¡}| 
¡ \}}}|dk}| d¡}g }|D ]Œ}| d¡}|d }|dd … }t|ƒdk�r4td| ƒ‚n@|d }d|k�rRtd| ƒ‚| d¡d  d¡d }| |¡}| ||f¡ qö|}nJt d¡}
dd„ |
 	|	¡ 
¡ D ƒ}|\}}}d|k�rÔ|dd…  dd¡}dd„ }||ƒ}||ƒ}||k�rœ|�rŽ| dd„ |D ƒ¡}| |¡} | ||  ¡}!|!t|ƒ7 }!|j||d �}"|"}t ¡ }#|# t|ƒ|!¡}$|j|$|d!�}%|jjj|%||d"�}&d#t|&ƒ W S d$||f W S td%gƒ}'d&d' |'¡ d( d) W S W n0 tk
�rð }( zd*|(  W Y ¢S d }(~(X Y nX d S )+Nr   TFÚdataÚitemsizeÚshapeÚstridesZalignedZRecordz
unaligned Ú z%array\((Record.*), (.*), (.*)\)\ \(.*c                 S   s   g | ]}|  ¡ ‘qS r   ©Ústrip©Ú.0Úxr   r   r	   Ú
<listcomp>8   s     z/NumbaArrayPrinter.to_string.<locals>.<listcomp>z(Record\((.*\[.*\]);([0-9]+);(True|False)ÚTrueú,ú[é   zUnsupported sub-type: %sZnestedarrayú;ú=zarray\((.*),(.*),(.*)\)\ \(.*c                 S   s   g | ]}|  ¡ ‘qS r   r   r   r   r   r	   r   R   s     z	unichr x éÿÿÿÿz<Uc                    s<   ˆ j  ¡ }|d j  ¡ \}}t‡ fdd„t||d ƒD ƒƒS )Nr   c                    s   g | ]}t ˆ | ƒ‘qS r   )Úintr   ©Údwarrr   r	   r   \   s     zGNumbaArrayPrinter.to_string.<locals>.dwarr2inttuple.<locals>.<listcomp>r   )ÚtypeÚfieldsÚrangeÚtuple)r   r!   ÚloÚhir   r   r	   Údwarr2inttupleX   s    
z3NumbaArrayPrinter.to_string.<locals>.dwarr2inttuplec                 S   s   g | ]}t d |d ƒ‘qS )r   r   )Úmaxr   r   r   r	   r   h   s     )Úalign)Údtype)r   r   Ú
z array([...], dtype=%s, shape=%s)zNULL/Uninitializedzarray([ú, ú]ú)z%array[Exception: Failed to parse. %s])ÚnumpyÚImportErrorr   Ústrr    Úreplacer   ÚreÚcompileÚmatchÚgroupsÚsplitÚlenÚ	TypeErrorr)   ÚappendÚarrayÚsumr   ÚgdbÚselected_inferiorÚread_memoryZ
frombufferÚlibZstride_tricksZ
as_stridedÚlistÚjoinÚ	Exception))r   ÚnpZ
HAVE_NUMPYÚNULLr   r   ZrshpZrstridesZ
is_alignedZty_strZmatcherZarr_infoZ	dtype_strZndim_strZ	order_strZrstrZ
rstr_matchr!   ZbalignZis_aligned_strZ	field_dtsZstruct_entriesÚfZsplittedÚnameZdt_partZ	dt_as_strr)   r&   r   r   Zshp_arrZstrd_arrZextentZdtype_clazzÚ	this_procÚmemZarr_dataZnew_arrÚbufÚer   r   r	   Ú	to_string   s„    
















þ
zNumbaArrayPrinter.to_stringN©Ú__name__Ú
__module__Ú__qualname__r
   rK   r   r   r   r	   r      s   r   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚNumbaComplexPrinterc                 C   s
   || _ d S r   r   r   r   r   r	   r
   �   s    zNumbaComplexPrinter.__init__c                 C   s   d| j d | j d f S )Nz%s+%sjÚrealÚimagr   )r   r   r   r	   rK   „   s    zNumbaComplexPrinter.to_stringNrL   r   r   r   r	   rP      s   rP   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚNumbaTuplePrinterc                 C   s
   || _ d S r   r   r   r   r   r	   r
   Š   s    zNumbaTuplePrinter.__init__c                 C   s>   g }| j j ¡ }|D ]}| t| j |j ƒ¡ qdd |¡ S )Nú(%s)r+   )r   r    r!   r9   r0   rF   rA   )r   rI   r!   rE   r   r   r	   rK   �   s
    zNumbaTuplePrinter.to_stringNrL   r   r   r   r	   rS   ˆ   s   rS   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚNumbaUniTuplePrinterc                 C   s
   || _ d S r   r   r   r   r   r	   r
   —   s    zNumbaUniTuplePrinter.__init__c                 C   sX   | j j ¡ }|d j ¡ \}}g }t||d ƒD ]}| t| j | ƒ¡ q0dd |¡ S )Nr   r   rT   r+   )r   r    r!   r"   r9   r0   rA   )r   r!   r$   r%   rI   Úir   r   r	   rK   š   s    zNumbaUniTuplePrinter.to_stringNrL   r   r   r   r	   rU   •   s   rU   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚNumbaUnicodeTypePrinterc                 C   s
   || _ d S r   r   r   r   r   r	   r
   ¦   s    z NumbaUnicodeTypePrinter.__init__c                 C   sz   d}| j d }| j d }| j d }||krjt ¡ }| t|ƒ|| ¡}t|tƒr^t|ƒ ¡ }qr| d¡}nt	|ƒ}d| S )Nr   r   ÚlengthÚkindzutf-8z'%s')
r   r<   r=   r>   r   Ú
isinstanceÚ
memoryviewÚbytesÚdecoder0   )r   rD   r   ZnitemsrY   rG   rH   rI   r   r   r	   rK   ©   s    



z!NumbaUnicodeTypePrinter.to_stringNrL   r   r   r   r	   rW   ¤   s   rW   c                  C   sd   t j d¡} |  ddt¡ |  ddt¡ |  ddt¡ |  dd	t¡ |  d
dt¡ |  ddt¡ | S )NZNumbazNumba unaligned array printerz^unaligned array\(zNumba array printerz^array\(zNumba complex printerz^complex[0-9]+\ zNumba Tuple printerz^Tuple\(zNumba UniTuple printerz^UniTuple\(zNumba unicode_type printerz^unicode_type\s+\()	r<   ÚprintingZRegexpCollectionPrettyPrinterZadd_printerr   rP   rS   rU   rW   )Úprinterr   r   r	   Ú_create_printers»   s$    ÿÿÿÿÿr`   )Ú__doc__r2   Zgdb.printingr<   r/   r   rP   rS   rU   rW   r`   r^   Zregister_pretty_printerZcurrent_objfiler   r   r   r	   Ú<module>   s   s	