U
    è½|e3›  ã                   @   sæ  d dl mZ d dlZd dlZd dlZd dlZd dlm	Z	m
Z
mZmZmZ d dlmZmZ d dlZd dlmZ e ejd¡ dZe ej¡jd Ze ej¡jd Zed	d
ddddgƒZejddd… Zej dd…ddd…f Z!ej Z"e #e d¡e d¡f¡Z$ejddd… Z%ej&ej' (ejddd… ejddd… ee"f¡ejdd…ddd…f ejddd… ej)ddd… ƒej*ej*ejddd… ejejej*ej*ej*ej*dœ	dddd�dd„ ƒZ+ej&ej' (ejddd… ejddd… ee"f¡ejdd…ddd…f ejddd… ej)ddd… ƒej*ej*ejddd… ejejej*ej*ej*ej*dœ	dddd�dd„ ƒZ,ej&dddej'jddd… ej'jddd… ej'jej'j*dœd�dd„ ƒZ-ej&dddd�dd„ ƒZ.ej&dej'jej'jdœd�dbd"d#„ƒZ/ej&dej' 0e$¡ej'jej'jd$œd�dcd%d&„ƒZ1ej&dej'jej'jdœd�ddd'd(„ƒZ2ej&dej'jej'jdœd�ded)d*„ƒZ3ej&dd+�dfd-d.„ƒZ4ej&dd+�dgd/d0„ƒZ5ej&d1ej' 6ej'j7ej'jdddd2�ej'jej'j7ej'jdddd2�ej'j7ej'j)ddd,d2�¡gdej'jej'j8ej'j9d3œdd4�d5d6„ ƒZ:ej&d7ej'j7ej'jdddd2�ej'j7ej'jdddd2�ej'j7ej'jd8ddd2�ej'j7ej'jdddd2�ej'j7ej'jd8ddd2�ej'j7ej'jdddd2�ej'j7ej'j)ddd,d2�ƒgej'j*ej'j6d9œdd:�d;d<„ ƒZ;ej&ddd=�d>d?„ ƒZ<ej&d@ej'j*idd:�dAdB„ ƒZ=dhdCdD„Z>ej&dddE�dFdG„ ƒZ?dHdI„ Z@dJdK„ ZAe &¡ dLdM„ ƒZBe &¡ dNdO„ ƒZCej&ddP�dQdR„ ƒZDdSdT„ ZEd ZFdZGd8ZHdUZIdVZJdWdX„ ZKdYdZ„ ZLej&dej)ddd… ejej*d[œd,d\�d]d^„ ƒZMej&dd@ejid,d_�d`da„ ƒZNdS )ié    )ÚwarnN)Ú
sparse_mulÚsparse_diffÚ
sparse_sumÚarr_intersectÚsparse_dot_product)Útau_rand_intÚnorm)Ú
namedtupleÚCg:Œ0âŽyE>é   ÚFlatTreeÚhyperplanesÚoffsetsÚchildrenÚindicesÚ	leaf_sizeéÿÿÿÿ)	Ún_leftÚn_rightÚhyperplane_vectorÚhyperplane_offsetÚmarginÚdÚiÚ
left_indexÚright_indexT)ÚlocalsÚfastmathÚnogilÚcachec                 C   sº  | j d }t|ƒ|j d  }t|ƒ|j d  }|||k7 }||j d  }|| }|| }t| | ƒ}t| | ƒ}	t|ƒtk r€d}t|	ƒtk r�d}	tj|tjd�}
t|ƒD ](}| ||f | | ||f |	  |
|< q¨t|
ƒ}t|ƒtk rêd}t|ƒD ]}|
| | |
|< qòd}d}t |j d tj	¡}t|j d ƒD ]¢}d}t|ƒD ]"}||
| | || |f  7 }�qBt|ƒtk �r¦t|ƒd ||< || dk�rœ|d7 }n|d7 }n,|dk�rÂd||< |d7 }nd||< |d7 }�q2|dk�sê|dk�r8d}d}t|j d ƒD ]6}t|ƒd ||< || dk�r,|d7 }n|d7 }�q tj|tj
d�}tj|tj
d�}d}d}t|j d ƒD ]>}|| dk�r–|| ||< |d7 }n|| ||< |d7 }�qn|||
dfS )aM  Given a set of ``graph_indices`` for graph_data points from ``graph_data``, create
    a random hyperplane to split the graph_data, returning two arrays graph_indices
    that fall on either side of the hyperplane. This is the basis for a
    random projection tree, which simply uses this splitting recursively.
    This particular split uses cosine distance to determine the hyperplane
    and which side each graph_data sample falls on.
    Parameters
    ----------
    data: array of shape (n_samples, n_features)
        The original graph_data to be split
    indices: array of shape (tree_node_size,)
        The graph_indices of the elements in the ``graph_data`` array that are to
        be split in the current operation.
    rng_state: array of int64, shape (3,)
        The internal state of the rng
    Returns
    -------
    indices_left: array
        The elements of ``graph_indices`` that fall on the "left" side of the
        random hyperplane.
    indices_right: array
        The elements of ``graph_indices`` that fall on the "left" side of the
        random hyperplane.
    r   r   ç      ð?©Údtypeç        é   )Úshaper   r	   ÚabsÚEPSÚnpÚemptyÚfloat32ÚrangeÚint8Úint32)Údatar   Ú	rng_stateÚdimr   r   ÚleftÚrightÚ	left_normÚ
right_normr   r   Úhyperplane_normr   r   Úsider   r   Úindices_leftÚindices_right© r:   úQ/var/www/website-v5/atlas_env/lib/python3.8/site-packages/pynndescent/rp_trees.pyÚangular_random_projection_split)   sv    ,
ÿ
 





r<   c                 C   sp  | j d }t|ƒ|j d  }t|ƒ|j d  }|||k7 }||j d  }|| }|| }d}tj|tjd�}	t|ƒD ]H}
| ||
f | ||
f  |	|
< ||	|
 | ||
f | ||
f   d 8 }qtd}d}t |j d tj¡}t|j d ƒD ]¢}|}t|ƒD ] }
||	|
 | || |
f  7 }qøt|ƒtk �r^tt|ƒƒd ||< || dk�rT|d7 }n|d7 }qè|dk�rzd||< |d7 }qèd||< |d7 }qè|dk�s |dk�rîd}d}t|j d ƒD ]6}t|ƒd ||< || dk�râ|d7 }n|d7 }�q¶tj|tj	d�}tj|tj	d�}d}d}t|j d ƒD ]>}|| dk�rL|| ||< |d7 }n|| ||< |d7 }�q$|||	|fS )aP  Given a set of ``graph_indices`` for graph_data points from ``graph_data``, create
    a random hyperplane to split the graph_data, returning two arrays graph_indices
    that fall on either side of the hyperplane. This is the basis for a
    random projection tree, which simply uses this splitting recursively.
    This particular split uses euclidean distance to determine the hyperplane
    and which side each graph_data sample falls on.
    Parameters
    ----------
    data: array of shape (n_samples, n_features)
        The original graph_data to be split
    indices: array of shape (tree_node_size,)
        The graph_indices of the elements in the ``graph_data`` array that are to
        be split in the current operation.
    rng_state: array of int64, shape (3,)
        The internal state of the rng
    Returns
    -------
    indices_left: array
        The elements of ``graph_indices`` that fall on the "left" side of the
        random hyperplane.
    indices_right: array
        The elements of ``graph_indices`` that fall on the "left" side of the
        random hyperplane.
    r   r   r$   r"   ç       @r%   )
r&   r   r)   r*   r+   r,   r-   r'   r(   r.   )r/   r   r0   r1   r   r   r2   r3   r   r   r   r   r   r7   r   r   r8   r9   r:   r:   r;   Ú!euclidean_random_projection_split®   sd    ,
"ÿ






r>   )Únormalized_left_dataÚnormalized_right_datar6   r   )r   r   r    r   c           "      C   sJ  t |ƒ|jd  }t |ƒ|jd  }|||k7 }||jd  }|| }|| }| || ||d  … }	||| ||d  … }
| || ||d  … }||| ||d  … }t|
ƒ}t|ƒ}t|ƒtk rÎd}t|ƒtk rÞd}|
|  tj¡}||  tj¡}t|	|||ƒ\}}t|ƒ}t|ƒtk �r*d}t	|jd ƒD ]}|| | ||< �q8d}d}t 
|jd tj¡}t	|jd ƒD ]Ü}d}| |||  ||| d  … }||||  ||| d  … }t||||ƒ\}}|D ]}||7 }�qØt|ƒtk �r(t |ƒd ||< || dk�r|d7 }n|d7 }n,|dk�rDd||< |d7 }nd||< |d7 }�qz|dk�sl|dk�rºd}d}t	|jd ƒD ]6}t |ƒd ||< || dk�r®|d7 }n|d7 }�q‚tj
|tjd�}tj
|tjd�} d}d}t	|jd ƒD ]>}|| dk�r|| ||< |d7 }n|| | |< |d7 }�qðt ||f¡}!|| |!dfS )á  Given a set of ``graph_indices`` for graph_data points from a sparse graph_data set
    presented in csr sparse format as inds, graph_indptr and graph_data, create
    a random hyperplane to split the graph_data, returning two arrays graph_indices
    that fall on either side of the hyperplane. This is the basis for a
    random projection tree, which simply uses this splitting recursively.
    This particular split uses cosine distance to determine the hyperplane
    and which side each graph_data sample falls on.
    Parameters
    ----------
    inds: array
        CSR format index array of the matrix
    indptr: array
        CSR format index pointer array of the matrix
    data: array
        CSR format graph_data array of the matrix
    indices: array of shape (tree_node_size,)
        The graph_indices of the elements in the ``graph_data`` array that are to
        be split in the current operation.
    rng_state: array of int64, shape (3,)
        The internal state of the rng
    Returns
    -------
    indices_left: array
        The elements of ``graph_indices`` that fall on the "left" side of the
        random hyperplane.
    indices_right: array
        The elements of ``graph_indices`` that fall on the "left" side of the
        random hyperplane.
    r   r   r!   r$   r%   r"   )r   r&   r	   r'   r(   Úastyper)   r+   r   r,   r*   r-   r   r.   Úvstack)"ÚindsÚindptrr/   r   r0   r   r   r2   r3   Ú	left_indsÚ	left_dataÚ
right_indsÚ
right_datar4   r5   r?   r@   Úhyperplane_indsÚhyperplane_datar6   r   r   r   r7   r   r   Úi_indsÚi_dataÚ_Úmul_dataÚvalr8   r9   Ú
hyperplaner:   r:   r;   Ú&sparse_angular_random_projection_split%  sŠ    *   ÿ  





rR   )r   r   r    c                 C   s  t  t|ƒ¡|jd  }t  t|ƒ¡|jd  }|||k7 }||jd  }|| }|| }| || ||d  … }	||| ||d  … }
| || ||d  … }||| ||d  … }d}t|	|
||ƒ\}}t|	|
||ƒ\}}|d }t|||| t j¡ƒ\}}|D ]}||8 }�qd}d}t  	|jd t j
¡}t|jd ƒD ]à}|}| |||  ||| d  … }||||  ||| d  … }t||||ƒ\}}|D ]}||7 }�q t|ƒtk �rôtt|ƒƒd ||< || dk�rê|d7 }n|d7 }n,|dk�rd||< |d7 }nd||< |d7 }�qB|dk�s8|dk�rŠd}d}t|jd ƒD ]:}tt|ƒƒd ||< || dk�r~|d7 }n|d7 }�qNt j	|t jd�}t j	|t jd�}d}d}t|jd ƒD ]>}|| dk�rè|| ||< |d7 }n|| ||< |d7 }�qÀt  ||f¡}||||fS )rA   r   r   r$   r=   r%   r"   )r)   r'   r   r&   r   r   r   rB   r+   r*   r-   r,   r(   r.   rC   )rD   rE   r/   r   r0   r   r   r2   r3   rF   rG   rH   rI   r   rJ   rK   Úoffset_indsÚoffset_datarP   r   r   r7   r   r   rL   rM   rN   rO   r8   r9   rQ   r:   r:   r;   Ú(sparse_euclidean_random_projection_split¯  s†        ÿ   
ÿ  





rU   )Úleft_node_numÚright_node_num)r   r   é   éd   c	                 C   s  |j d |krÂ|dkrÂt| ||ƒ\}	}
}}t| |	|||||||d ƒ	 t|ƒd }t| |
|||||||d ƒ	 t|ƒd }| |¡ | |¡ | t |¡t |¡f¡ | tjdgtjd�¡ nJ| tjdgtjd�¡ | tj	 ¡ | t d¡t d¡f¡ | |¡ d S ©Nr   r   r   r"   g      ð¿)
r&   r>   Úmake_euclidean_treeÚlenÚappendr)   r.   Úarrayr+   Úinf©r/   r   r   r   r   Úpoint_indicesr0   r   Ú	max_depthÚleft_indicesÚright_indicesrQ   ÚoffsetrV   rW   r:   r:   r;   r[   &  sP    
û÷÷


r[   )r   rV   rW   c	                 C   s  |j d |krÂ|dkrÂt| ||ƒ\}	}
}}t| |	|||||||d ƒ	 t|ƒd }t| |
|||||||d ƒ	 t|ƒd }| |¡ | |¡ | t |¡t |¡f¡ | tjdgtjd�¡ nJ| tjdgtjd�¡ | tj	 ¡ | t d¡t d¡f¡ | |¡ d S rZ   )
r&   r<   Úmake_angular_treer\   r]   r)   r.   r^   r+   r_   r`   r:   r:   r;   rf   f  sP    
û÷÷


rf   c                 C   s"  |j d |	krÎ|
dkrÎt| ||||ƒ\}}}}t| |||||||||	|
d ƒ t|ƒd }t| |||||||||	|
d ƒ t|ƒd }| |¡ | |¡ | t |¡t |¡f¡ | tjdgtjd�¡ nP| tjdgdggtjd�¡ | tj	 ¡ | t d¡t d¡f¡ | |¡ d S rZ   )
r&   rU   Úmake_sparse_euclidean_treer\   r]   r)   r.   r^   Úfloat64r_   ©rD   rE   r/   r   r   r   r   ra   r0   r   rb   rc   rd   rQ   re   rV   rW   r:   r:   r;   rg   ª  sd        ÿûõõ


rg   c                 C   s"  |j d |	krÎ|
dkrÎt| ||||ƒ\}}}}t| |||||||||	|
d ƒ t|ƒd }t| |||||||||	|
d ƒ t|ƒd }| |¡ | |¡ | t |¡t |¡f¡ | tjdgtjd�¡ nP| tjdgdggtjd�¡ | tj	 ¡ | t d¡t d¡f¡ | |¡ d S rZ   )
r&   rR   Úmake_sparse_angular_treer\   r]   r)   r.   r^   rh   r_   ri   r:   r:   r;   rj   ò  sb        ÿûõõ

rj   )r   Fc           
   	   C   s–   t  | jd ¡ t j¡}tjj t	¡}tjj t
¡}tjj t¡}tjj t¡}|rlt| |||||||ƒ nt| |||||||ƒ t|||||ƒ}	|	S )Nr   )r)   Úaranger&   rB   r.   ÚnumbaÚtypedÚListÚ
empty_listÚdense_hyperplane_typeÚoffset_typeÚchildren_typeÚpoint_indices_typerf   r[   r   )
r/   r0   r   Úangularr   r   r   r   ra   Úresultr:   r:   r;   Úmake_dense_tree8  s8    øørv   c                 C   sž   t  |jd d ¡ t j¡}tjj t	¡}tjj t
¡}tjj t¡}	tjj t¡}
|rtt| ||||||	|
||ƒ
 nt| ||||||	|
||ƒ
 t|||	|
|ƒS ©Nr   r   )r)   rk   r&   rB   r.   rl   rm   rn   ro   Úsparse_hyperplane_typerq   rr   rs   rj   rg   r   )rD   rE   Zspdatar0   r   rt   r   r   r   r   ra   r:   r:   r;   Úmake_sparse_tree\  s>    ööry   zb1(f4[::1],f4,f4[::1],i8[::1]))Úreadonly)r   r1   r   )r   r   r    c                 C   st   |}|j d }t|ƒD ]}|| | ||  7 }qt|ƒtk r`t t|ƒ¡d }|dkrZdS dS n|dkrldS dS d S )Nr   r%   r   )r&   r,   r'   r(   r)   r   )rQ   re   Úpointr0   r   r1   r   r7   r:   r:   r;   Úselect_sideƒ  s    
r|   z<i4[::1](f4[::1],f4[:,::1],f4[::1],i4[:,::1],i4[::1],i8[::1])r%   )Únoder7   )r   r    c                 C   sn   d}||df dkrNt || || | |ƒ}|dkr@||df }q||df }q|||df  ||df  … S rw   )r|   )r{   r   r   r   r   r0   r}   r7   r:   r:   r;   Úsearch_flat_tree§  s    r~   )r   r    c           
      C   s¤   |}| j d }| d|d f dk r,|d8 }q| dd |…f  tj¡}| dd |…f }|t||||ƒ7 }t|ƒtk r�t|ƒd }	|	dkrŠdS dS n|dkrœdS dS d S )Nr   r   r$   r%   )r&   rB   r)   r.   r   r'   r(   r   )
rQ   re   Ú
point_indsÚ
point_datar0   r   Zhyperplane_sizerJ   rK   r7   r:   r:   r;   Úsparse_select_sideÂ  s(    

   ÿr�   r}   c           	      C   sp   d}||df dkrPt || || | ||ƒ}|dkrB||df }q||df }q|||df  ||df  … S rw   )r�   )	r   r€   r   r   r   r   r0   r}   r7   r:   r:   r;   Úsearch_sparse_flat_treeÝ  s        ÿr‚   c           	   
      sÖ   g }ˆdkrt dt |¡ƒ‰|dkr(d}|jtt|dfd� tj¡‰zftj	 
ˆ¡r~tj|dd�‡ ‡‡‡fdd	„t|ƒD ƒƒ}n*tj|dd�‡ ‡‡‡fd
d	„t|ƒD ƒƒ}W n" tttfk
rÌ   tdƒ Y nX t|ƒS )zøBuild a random projection forest with ``n_trees``.

    Parameters
    ----------
    data
    n_neighbors
    n_trees
    leaf_size
    rng_state
    angular

    Returns
    -------
    forest: list
        A list of random projection trees.
    Né
   r   é   )ÚsizeÚ	sharedmem©Ún_jobsÚrequirec                 3   s0   | ](}t  t¡ˆjˆjˆjˆ| ˆˆ ƒV  qd S ©N)ÚjoblibÚdelayedry   r   rE   r/   ©Ú.0r   ©rt   r/   r   Z
rng_statesr:   r;   Ú	<genexpr>  s   	øúzmake_forest.<locals>.<genexpr>c                 3   s&   | ]}t  t¡ˆˆ| ˆˆ ƒV  qd S rŠ   )r‹   rŒ   rv   r�   r�   r:   r;   r�      s   ÿz¸Random Projection forest initialisation failed due to recursionlimit being reached. Something is a little strange with your graph_data, and this may take longer than normal to compute.)Úmaxr)   r.   ÚrandintÚ	INT32_MINÚ	INT32_MAXrB   Úint64ÚscipyÚsparseÚisspmatrix_csrr‹   ÚParallelr,   ÚRuntimeErrorÚRecursionErrorÚSystemErrorr   Útuple)	r/   Ún_neighborsÚn_treesr   r0   Úrandom_staterˆ   rt   ru   r:   r�   r;   Úmake_forestî  s*    ÿ	÷
þÿ
r¡   )r   r    c                 C   sÊ   d}t t| jƒƒD ]0}| j| d dkr| j| d dkr|d7 }qtj|| jfdtjd�}d}t t| jƒƒD ]V}| j| d dks–| j| d dkrn| j| jd }| j| ||d |…f< |d7 }qn|S )Nr   r   r   r"   )	r,   r\   r   r)   Úfullr   r.   r   r&   )ÚtreeÚn_leavesr   ru   Z
leaf_indexr   r:   r:   r;   Úget_leaves_from_tree.  s    $
$
r¥   c                 C   s    t jddd�dd„ | D ƒƒ}|S )Nr   r†   r‡   c                 s   s   | ]}t  t¡|ƒV  qd S rŠ   )r‹   rŒ   r¥   )rŽ   Zrp_treer:   r:   r;   r�   A  s    z-rptree_leaf_array_parallel.<locals>.<genexpr>)r‹   r™   )Ú	rp_forestru   r:   r:   r;   Úrptree_leaf_array_parallel@  s    ÿr§   c                 C   s,   t | ƒdkrt t| ƒ¡S t dgg¡S d S )Nr   r   )r\   r)   rC   r§   r^   )r¦   r:   r:   r;   Úrptree_leaf_arrayG  s    r¨   c           
   
   C   sö   | j | d dk rZ|t| j| ƒ }| ||df< | ||df< | j| |||…< ||fS | j| ||< | j| ||< |d ||df< |}	t| |||||d || j | d ƒ\}}|d ||	df< t| |||||d || j | d ƒ\}}||fS d S rw   )r   r\   r   r   r   Úrecursive_convert©
r£   r   r   r   r   Znode_numZ
leaf_startZ	tree_nodeZleaf_endZold_node_numr:   r:   r;   r©   N  s@    ø
ø
r©   c           
   
   C   s  | j | d dk rZ|t| j| ƒ }| ||df< | ||df< | j| |||…< ||fS | j| ||d d …d | j| jd …f< | j| ||< |d ||df< |}	t| |||||d || j | d ƒ\}}|d ||	df< t| |||||d || j | d ƒ\}}||fS d S rw   )r   r\   r   r   r&   r   Úrecursive_convert_sparserª   r:   r:   r;   r«   u  sJ    þÿÿø
ø
r«   )r    c                 C   sP   d}d}t t| jƒƒD ]0}| j| d dk r>|d7 }|d7 }q|d7 }q||fS rw   )r,   r\   r   )r£   Ún_nodesr¤   r   r:   r:   r;   Únum_nodes_and_leavesž  s    

r­   c              
   C   s  t | ƒ\}}d}| jd jdkr:|}tj||ftjd�}n4d}|}tj|d|ftjd�}d|d d …dd d …f< tj|tjd�}t d¡tj|dftjd� }	t d¡tj|tjd� }
|rÜt| |||	|
ddt	| j
ƒd ƒ n t| |||	|
ddt	| j
ƒd ƒ t|||	|
| jƒS )NFr   r   r"   Tr%   r   )r­   r   Úndimr)   Úzerosr+   r.   Úonesr«   r\   r   r©   r   r   )r£   Ú	data_sizeZdata_dimr¬   r¤   Ú	is_sparseZhyperplane_dimr   r   r   r   r:   r:   r;   Úconvert_tree_format¬  sD           ÿ       ÿr³   r„   é   c                 C   s   | j | j| j| j| jf}|S rŠ   )r   r   r   r   r   ©r£   ru   r:   r:   r;   Údenumbaify_treeÐ  s    ûr¶   c                 C   s(   t | t | t | t | t | t ƒ}|S rŠ   )r   ÚFLAT_TREE_HYPERPLANESÚFLAT_TREE_OFFSETSÚFLAT_TREE_CHILDRENÚFLAT_TREE_INDICESÚFLAT_TREE_LEAF_SIZErµ   r:   r:   r;   Úrenumbaify_treeÜ  s    ûr¼   )Úintersectionru   r   )Úparallelr   r    c                 C   sr   d}t  |jd ¡D ]H}t|| | j| j| j| j|ƒ}t|| |ƒ}|t  	|jd dk¡7 }q|t  	|jd ¡ S )Nr$   r   r   )
rl   Úpranger&   r~   r   r   r   r   r   r+   )r£   Úneighbor_indicesr/   r0   ru   r   Zleaf_indicesr½   r:   r:   r;   Ú
score_treeè  s    
úrÁ   )r   r   r    c                 C   sº   d}t | jƒ}t|ƒD ]Ž}t |¡}| j| d }| j| d }|dkr|dkrt| j| jd ƒD ]>}| j| | }	t||	 | j| ƒ}
|t |
jd dk¡7 }qdq|t |jd ¡ S )Nr$   r   r   r   )	r\   r   r,   rl   r.   r   r&   r   r+   )r£   rÀ   ru   r¬   r   r}   Ú
left_childÚright_childÚjÚidxr½   r:   r:   r;   Úscore_linked_tree  s    

rÆ   )rX   rY   )rX   rY   )rX   rY   )rX   rY   )rX   F)rX   F)NF)OÚwarningsr   ÚlocaleÚnumpyr)   rl   Úscipy.sparser–   Úpynndescent.sparser   r   r   r   r   Úpynndescent.utilsr   r	   r‹   Úcollectionsr
   Ú	setlocaleÚ
LC_NUMERICr(   Úiinfor.   Úminr“   r‘   r”   r   r+   rp   rh   rx   rq   Útypeofrr   rs   ÚnjitÚtypesÚTupler•   Úuint32r<   r>   rR   rU   r[   ÚListTyperf   rg   rj   rv   ry   ÚbooleanÚArrayÚintpÚuint16r|   r~   r�   r‚   r¡   r¥   r§   r¨   r©   r«   r­   r³   r·   r¸   r¹   rº   r»   r¶   r¼   rÁ   rÆ   r:   r:   r:   r;   Ú<module>   sn   ÿ"ÿ  þ÷ï
r"ÿ  þ÷ï
düü

vþ  ÷<
ýþ  ÷<þ  õDþ  õB
#
&üþ	ýð
úþó


  ø
@

&
(

ýù	
