U
    ÅmœdÛb  ã                   @   s  d Z ddlZddlZddl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mZ ddlmZmZ dd	lmZmZmZmZmZmZmZ ddlZdd
lm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l0m1Z1 G dd„ deƒZ2e2j3Z4ede5ej6f Z7dZ8dd„ Z9eee:f ee; dœdd„Z<ee;e;f dœdd„Z=e;d œd!d"„Z>dbee;d#œd$d%„Z?ee;d#œd&d'„Z@d(d)„ ZAd*d+„ ZBe"edeCf eCd,œd-d.„ZDdcd/d0„ZEddd1d2„ZFdee"e;e;e,d5 eGee5 d6œd7d8„ZHd9d:„ ZIdfd<d=„ZJd>d?„ ZKd@dA„ ZLejMe5dBœdCdD„ZNdgee;ef ee;ef ee;ef dEœdFdG„ZOeejMe jPf dHœdIdJ„ZQdhdMdN„ZRdidOdP„ZSdjejMe5e5eejMejMf dQœdRdS„ZTdkejMe5e5eejMejMf dTœdUdV„ZUe	dWœdXdY„ZVdZd[„ ZWd\d]„ ZXG d^d_„ d_ƒZYd`da„ ZZdS )lzŽUtility functions and classes

This file largely consists of the old _utils.py file. Over time, these functions
should be moved of this file.
é    N)ÚEnum)ÚPath)ÚWeakSet)Ú
namedtuple)ÚpartialÚwraps)Ú
ModuleTypeÚ
MethodType)ÚUnionÚCallableÚOptionalÚMappingÚAnyÚDictÚTuple)Úrandom)Úsparse)ÚAnnDataÚ__version__)Údedent)Úversioné   )Úsettings)ÚLiteral)Úloggingé   )Úis_constantc                   @   s   e Zd ZdZdS )ÚEmptyr   N)Ú__name__Ú
__module__Ú__qualname__Útoken© r"   r"   úO/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/scanpy/_utils/__init__.pyr       s   r   gVçž¯Ò<c                  C   s€   ddl m}  | dƒ}t t¡t d¡k rJddlm} td|› dt› d�ƒ‚|t d	¡k r|d
dlm} t 	d|› d|› d�¡ d S )Nr   )Úpkg_versionz
umap-learnz0.6.10)r   zScanpy z% needs anndata version >=0.6.10, not z).
Run `pip install anndata -U --no-deps`.z0.3.0r   z! needs umap version >=0.3.0, not Ú.)
Ú_compatr$   r   ÚparseÚanndata_versionÚ r   ÚImportErrorÚloggÚwarning)r$   Zumap_versionr   r"   r"   r#   Úcheck_versions,   s    ÿÿr-   )Úc_or_fÚreturnc                    s|   t | dd ƒd krd S t | ¡}t| tƒr@t| dƒr@t | j¡‰ n
t | ¡‰ tdœ‡ fdd„‰d 	‡ ‡fdd„| 
d¡D ƒ¡S )	NÚ__doc__Ú__init__)Únamec                    sD   ˆ j |  }t|jdt|jƒƒ}|j|jk	r<|› d|j›d�S |S d S )Nr    z, optional (default: ú))Ú
parametersÚgetattrÚ
annotationÚreprÚdefaultÚempty)r2   ÚparamÚcls)Úsigr"   r#   Útype_docL   s
    
zgetdoc.<locals>.type_docÚ
c                 3   s2   | ]*}|  ¡ ˆ jkr&|› d ˆ|ƒ› �n|V  qdS )z : N)Ústripr4   )Ú.0Úline©r<   r=   r"   r#   Ú	<genexpr>T   s   ÿzgetdoc.<locals>.<genexpr>)r5   ÚinspectÚgetdocÚ
isinstanceÚtypeÚhasattrÚ	signaturer1   ÚstrÚjoinÚsplit)r.   Údocr"   rB   r#   rE   C   s    

þrE   ©Úarg_mappingc                    s   ‡ fdd„}|S )aX  
    Decorator which marks a functions keyword arguments as deprecated. It will
    result in a warning being emitted when the deprecated keyword argument is
    used, and the function being called with the new argument.

    Parameters
    ----------
    arg_mapping
        Mapping from deprecated argument name to current argument name.
    c                    s   t ˆ ƒ‡‡ fdd„ƒ}|S )Nc               	      sr   t  dt¡ ˆ  ¡ D ]F\}}||krt jd|› d|› d|› d�tdd� | |¡}|||< qt  dt¡ ˆ| |ŽS )	NÚalwayszKeyword argument 'z$' has been deprecated in favour of 'z'. 'z&' will be removed in a future version.r   )ÚcategoryÚ
stacklevelr8   )ÚwarningsÚsimplefilterÚDeprecationWarningÚitemsÚwarnÚpop)ÚargsÚkwargsÚoldÚnewÚval)rO   Úfuncr"   r#   Úfunc_wrapperg   s    û

z=deprecated_arg_names.<locals>.decorator.<locals>.func_wrapper)r   )r^   r_   rN   )r^   r#   Ú	decoratorf   s    z'deprecated_arg_names.<locals>.decoratorr"   )rO   r`   r"   rN   r#   Údeprecated_arg_namesZ   s    ra   )Úrootc                 C   s>   t | dƒo<| j d¡d  d¡ o<t| dt| d| jƒƒ |¡S )Nr   r%   éÿÿÿÿÚ_r   r    )rH   r   rL   Ú
startswithr5   )Úobjrb   r"   r"   r#   Ú_one_of_ours~   s    
ÿ  ÿþýrg   )Úmodrb   c                 c   sº   |d krt ƒ }t| ƒ ¡ D ]š}t||ƒs*qt|ƒrxt|tƒsx|V  t|tƒr´t|ƒ ¡ D ]}t|ƒrXt||ƒrX|V  qXqt|tƒr||kr|j	 
d¡r˜q| |¡ t|||ƒE d H  qd S )Nzscanpy.tests)r   ÚvarsÚvaluesrg   ÚcallablerF   r	   rG   r   r   re   ÚaddÚdescend_classes_and_funcs)rh   rb   Zencounteredrf   Úmr"   r"   r#   rm   ˆ   s     



rm   c                 C   s    t | |ƒD ]}tt|ƒ|_q
d S ©N)rm   r   rE   )rh   rb   r.   r"   r"   r#   Úannotate_doc_typesœ   s    rp   c                     s   ‡ fdd„}|S )zQ    Docstrings should start with "" in the first line for proper formatting.
    c                    s   | j | _t| j ƒ ˆ ¡| _ | S ro   )r0   Z__orig_doc__r   Ú
format_map)rf   ©Úkwdsr"   r#   Údec¦   s    z_doc_params.<locals>.decr"   )rs   rt   r"   rr   r#   Ú_doc_params¡   s    ru   c                  K   s2   dd„ |   ¡ D ƒ}t|ƒdkr.td|› d�ƒ‚dS )zˆChecks for invalid arguments when an array is passed.

    Helper for functions that work on either AnnData objects or array-likes.
    c                 S   s   g | ]\}}|d k	r|‘qS ro   r"   )r@   ÚkÚvr"   r"   r#   Ú
<listcomp>´   s      z3_check_array_function_arguments.<locals>.<listcomp>r   z
Arguments z/ are only valid if an AnnData object is passed.N)rV   ÚlenÚ	TypeError)rZ   Zinvalid_argsr"   r"   r#   Ú_check_array_function_arguments®   s
    
ÿr{   )ÚadataÚuse_rawr/   c                 C   s"   |dk	r|S | j dk	rdS dS dS )z’
    Normalize checking `use_raw`.

    My intentention here is to also provide a single place to throw a deprecation warning from in future.
    NTF)Úraw)r|   r}   r"   r"   r#   Ú_check_use_raw»   s
    
r   c                 C   s²   ddl }|  ¡ \}}| ||f }t|tjƒr2|j}|j|d�}| | jd ¡ | 	t
t||ƒƒ¡ z||jd< W n tk
r„   Y nX | ¡ | jd kr®t d| ¡ › d�¡ |S )z'Get igraph graph from adjacency matrix.r   N)ÚdirectedÚweightzThe constructed graph has only z8 nodes. Your adjacency matrix contained redundant nodes.)ZigraphZnonzerorF   ÚnpÚmatrixÚA1ZGraphZadd_verticesÚshapeZ	add_edgesÚlistÚzipÚesÚKeyErrorÚvcountr+   r,   )Z	adjacencyr€   ZigÚsourcesÚtargetsÚweightsÚgr"   r"   r#   Úget_igraph_from_adjacencyÏ   s"    ÿr�   c                 C   s˜   ddl m} |  ¡ }|d kr,dgt|ƒ }n
| j| }|  ¡ s\| dd„ |D ƒ¡ | |¡ |  ¡ }||f}t|ƒdkrŒ||t|Ž f|d�S ||ƒS d S )Nr   )Ú
csr_matrixr   c                 S   s   g | ]\}}||f‘qS r"   r"   )r@   Úurw   r"   r"   r#   rx   ï   s     z*get_sparse_from_igraph.<locals>.<listcomp>)r…   )	Zscipy.sparser�   Zget_edgelistry   rˆ   Zis_directedÚextendrŠ   r‡   )ÚgraphZweight_attrr�   Úedgesr�   r…   r"   r"   r#   Úget_sparse_from_igraphæ   s    

r•   Ú
predictionç{®Gáz„?)r–   Ú	reference)r|   r–   r˜   ÚnormalizationÚ	thresholdÚmax_n_namesc                    s¨  |dkrt dƒ‚t| ƒ | j| jj‰ˆD ] }|tjkr*t d|›d�¡ q*g }g ‰ t	| j| jjƒD �]\}}	d|	kr€t
|ƒ}	| j| j|	k}
|
 tj¡}ˆ g g7 ‰ | j| jjD ]Ž}| j| j|k tj¡}| ¡ }d||
< |dk�rt |¡t || ¡ t |¡ }n"t |¡t || ¡ t |¡ }ˆ d  |g7  < q´‡ ‡‡fd	d
„t ˆ d ¡ddd… D ƒ}|d |d|… ¡g7 }qftdddgƒ}||t ˆ ¡d�S )ay  Compute overlaps between groups.

    See ``identify_groups`` for identifying the groups.

    Parameters
    ----------
    adata
    prediction
        Field name of adata.obs.
    reference
        Field name of adata.obs.
    normalization
        Whether to normalize with respect to the predicted groups or the
        reference groups.
    threshold
        Do not consider associations whose overlap is below this fraction.
    max_n_names
        Control how many reference names you want to be associated with per
        predicted name. Set to `None`, if you want all.

    Returns
    -------
    asso_names
        List of associated reference names
        (`max_n_names` for each predicted name).
    asso_matrix
        Matrix where rows correspond to the predicted labels and columns to the
        reference labels, entries are proportional to degree of association.
    >   r˜   r–   z?`normalization` needs to be either "prediction" or "reference".zIgnoring category u.    as itâ€™s in `settings.categories_to_ignore`.ú?r   r–   rc   c                    s6   g | ].}ˆ d  | ˆkrˆ| t jkr.ˆ| nd‘qS )rc   r)   )r   Úcategories_to_ignore)r@   Úi©Úasso_matrixZcatsrš   r"   r#   rx   K  s   þz8compute_association_matrix_of_groups.<locals>.<listcomp>Nr>   Ú$compute_association_matrix_of_groupsÚ
asso_namesr    )r¢   r    )Ú
ValueErrorÚsanitize_anndataÚobsÚcatÚ
categoriesr   r�   r+   ÚinfoÚ	enumeraterJ   rj   Úastyper‚   Zint8ÚcopyÚsumÚargsortrK   r   Úarray)r|   r–   r˜   r™   rš   r›   r¦   r¢   Zipred_groupZ
pred_groupZ	mask_predZmask_pred_intZ	ref_groupZmask_refZmask_ref_or_predZratio_containedZname_list_predÚResultr"   rŸ   r#   r¡   þ   sP    %ÿ

ÿ

þþþ ÿr¡   c                    s   ‡ ‡fdd„t ˆ jd ƒD ƒS )Nc                    s,   g | ]$‰ ‡‡ ‡fd d„t ˆjd ƒD ƒ‘qS )c                    s   i | ]}ˆ| ˆ ˆ|f “qS r"   r"   )r@   Zi_ref)r    Úi_predÚreference_colorsr"   r#   Ú
<dictcomp>Y  s   ÿ z>get_associated_colors_of_groups.<locals>.<listcomp>.<dictcomp>r   ©Úranger…   )r@   ©r    r±   )r°   r#   rx   X  s   üþz3get_associated_colors_of_groups.<locals>.<listcomp>r   r³   )r±   r    r"   rµ   r#   Úget_associated_colors_of_groupsW  s    ûr¶   Fc                    sú   t j| dd�\}}tt||ƒƒ‰t j|dd�\}}tt||ƒƒ‰ i }i }|D ]˜‰t j|ˆ| k dd�\}	‰‡ ‡fdd„t|	ƒD ƒ}
‡‡‡fdd„t|	ƒD ƒ}t j|
|f }t j|dd�}t  |¡ddd	… }|	| |ˆ< || |ˆ< qL|rò||fS |S dS )
až  Which predicted label explains which reference label?

    A predicted label explains the reference label which maximizes the minimum
    of ``relative_overlaps_pred`` and ``relative_overlaps_ref``.

    Compare this with ``compute_association_matrix_of_groups``.

    Returns
    -------
    A dictionary of length ``len(np.unique(ref_labels))`` that stores for each
    reference label the predicted label that best explains it.

    If ``return_overlaps`` is ``True``, this will in addition return the overlap
    of the reference group with the predicted group; normalized with respect to
    the reference group size and the predicted group size, respectively.
    T)Zreturn_countsc                    s    g | ]\}}ˆ| ˆ |  ‘qS r"   r"   ©r@   rž   Ún)Ú	pred_dictÚsub_pred_countsr"   r#   rx   |  s    z#identify_groups.<locals>.<listcomp>c                    s    g | ]\}}ˆ| ˆ ˆ  ‘qS r"   r"   r·   )Úref_dictÚ	ref_labelrº   r"   r#   rx     s   ÿr   )ZaxisNrc   )r‚   ÚuniqueÚdictr‡   r©   Zc_Úminr­   )Z
ref_labelsZpred_labelsZreturn_overlapsZ
ref_uniqueZ
ref_countsZpred_uniqueZpred_countsZassociated_predictionsZassociated_overlapsZsub_pred_uniqueZrelative_overlaps_predZrelative_overlaps_refZrelative_overlapsZrelative_overlaps_minZpred_best_indexr"   )r¹   r»   r¼   rº   r#   Úidentify_groupsa  s2    
 ÿ
ÿþrÀ   c                 C   s   |   ¡  dS )z-Transform string annotations to categoricals.N)Ú	_sanitize©r|   r"   r"   r#   r¤   ”  s    r¤   c                 C   s&   | j r"tjddd� |  |  ¡ ¡ d S )Nz-Received a view of an AnnData. Making a copy.r   )rR   )Zis_viewrS   rW   Z_init_as_actualr«   rÂ   r"   r"   r#   Úview_to_actual™  s    þrÃ   )Úar¸   c                 C   sD   t j| td�}||d… |d| …  ||d…< ||d d… | S )a-  Moving average over one-dimensional array.

    Parameters
    ----------
    a
        One-dimensional array.
    n
        Number of entries to average over. n=2 means averaging over the currrent
        the previous entry.

    Returns
    -------
    An array view storing the moving average.
    ©ÚdtypeNr   )r‚   ZcumsumÚfloat)rÄ   r¸   Úretr"   r"   r#   Úmoving_average¢  s    "rÉ   )Ú
old_paramsÚ
new_paramsr/   c                 C   sb   t | ƒ}|r^| ¡ D ]H\}}|| krL|rLtd| d d tt|  ¡ ƒƒ ƒ‚|dk	r|||< q|S )aX      Update old_params with new_params.

    If check==False, this merely adds and overwrites the content of old_params.

    If check==True, this only allows updating of parameters that are already
    present in old_params.

    Parameters
    ----------
    old_params
    new_params
    check

    Returns
    -------
    updated_params
    ú'z ' is not a valid parameter key, zconsider one of 
N)r¾   rV   r£   rJ   r†   Úkeys)rÊ   rË   ÚcheckZupdated_paramsÚkeyr]   r"   r"   r#   Úupdate_params»  s$    ÿþýüÿ
rÐ   )ÚXc                 C   sn   ddl m} t| tjƒr| n| j}t |¡ ¡ r4dS t|j	j
|ƒrFdS t t t |d¡d¡ ¡rfdS dS dS )z-Checks values of X to ensure it is count datar   )ÚIntegralFTr   N)ÚnumbersrÒ   rF   r‚   ÚndarrayÚdataZsignbitÚanyÚ
issubclassrÆ   rG   Úequalrh   )rÑ   rÒ   rÕ   r"   r"   r#   Úcheck_nonnegative_integersç  s    rÙ   ÚallÚgroupsc           
   	   C   sÒ  | j | jj}|d | jkr,| j|d  }n tjt| j | jjƒ| j | jjft	d�}t
| j | jjƒD ]b\}}| j | jj| | j | jkr®| j | jj| | j | jk}nt|ƒ| j | jk}|||< qhttt|ƒƒƒ}|dk�rÄg }|D ],}| t | j | jjj|k¡d d ¡ qît|ƒdk�r`t t t t| j | jjƒ¡ t¡t |¡¡¡d }t|ƒdk�r¦t t |¡› d| j | jj› �¡ ddlm}	 |	dƒ || }| j | jj| j}n|j}||fS )z'Get subset of groups in adata.obs[key].Z_masksrÅ   rÚ   r   z7 invalid! specify valid groups_order (or indices) from )Úexit)r¥   r¦   r§   Úunsr‚   Zzerosry   rj   ÚsizeÚboolr©   rJ   r†   r´   ÚappendÚwhereZin1dÚarangerª   r®   r+   ÚdebugÚsysrÜ   )
r|   Zgroups_order_subsetrÏ   Zgroups_orderZgroups_masksZinamer2   ÚmaskZ
groups_idsrÜ   r"   r"   r#   Úselect_groupsø  sL     ÿ 

 ÿþÿûÿræ   c              	   C   s@   ddl }| ¡  t|dƒr|ntj}t t | ||||¡¡ dS )zÏGet full tracebacks when warning is raised by setting

    warnings.showwarning = warn_with_traceback

    See also
    --------
    http://stackoverflow.com/questions/22373927/get-traceback-of-warnings
    r   NÚwrite)	Ú	tracebackÚprint_stackrH   rä   Ústderrr   rç   rS   Úformatwarning)ÚmessagerQ   ÚfilenameÚlinenoÚfilerA   rè   Úlogr"   r"   r#   Úwarn_with_traceback&  s
    	ÿrñ   )rÑ   Ú	subsampleÚseedr/   c                 C   sÈ   |dkr(|dkr(| t j| jd td�fS |dkr^t jd| jd |td�}|j}t  | | ¡}nD|dk rttd|› �ƒ‚t| jd | ƒ}t j |¡ t	| |d�\}}t
 d|› d| jd › d�¡ ||fS )	a|      Subsample a fraction of 1/subsample samples from the rows of X.

    Parameters
    ----------
    X
        Data array.
    subsample
        1/subsample is the fraction of data sampled, n = X.shape[0]/subsample.
    seed
        Seed for sampling.

    Returns
    -------
    Xsampled
        Subsampled X.
    rows
        Indices of rows that are stored in Xsampled.
    r   r   rÅ   zInvalid seed value < 0: )r¸   z... subsampled to z of z data points)r‚   râ   r…   ÚintrÞ   r®   r£   r   ró   Úsubsample_nr+   rã   )rÑ   rò   ró   Úrowsr¸   ÚXsampledr"   r"   r#   rò   8  s    rò   )rÑ   r¸   ró   r/   c                 C   sh   |dk rt dƒ‚tj |¡ |dks2|| jd kr<| jd n|}tjj| jd |dd�}| | }||fS )a  Subsample n samples from rows of array.

    Parameters
    ----------
    X
        Data array.
    n
        Sample size.
    seed
        Seed for sampling.

    Returns
    -------
    Xsampled
        Subsampled X.
    rows
        Indices of rows that are stored in Xsampled.
    r   zn must be greater 0F)rÞ   Úreplace)r£   r‚   r   ró   r…   Úchoice)rÑ   r¸   ró   rö   r÷   r"   r"   r#   rõ   b  s    $rõ   )rí   c                 C   s"   |   ¡ sddlm} ||| ƒ dS )z,Check if file is present otherwise download.r   )Ú	_downloadN)Úis_fileZ	readwriterú   )rí   Z
backup_urlrú   r"   r"   r#   Úcheck_presence_download€  s    rü   c                 C   sZ   zt j|  W S  tk
rT   tj | ¡}tj |¡}tj |j¡}| 	|¡ | Y S X dS )uD   Imports a module in a way that itâ€™s only executed on member accessN)
rä   Úmodulesr‰   Ú	importlibÚutilÚ	find_specÚmodule_from_specÚ
LazyLoaderÚloaderÚexec_module)Z	full_nameÚspecÚmoduler  r"   r"   r#   Úlazy_importˆ  s    
r  c                 C   s8   |d kr|| kr| | }|d kr0|| kr0| | }||fS ro   r"   )ÚdctZconnsÚdistsZ	conns_keyZ	dists_keyr"   r"   r#   Ú_fallback_to_unsš  s
    r
  c                   @   s*   e Zd ZdZd	dd„Zdd„ Zdd„ ZdS )
ÚNeighborsViewa  Convenience class for accessing neighbors graph representations.

    Allows to access neighbors distances, connectivities and settings
    dictionary in a uniform manner.

    Parameters
    ----------

    adata
        AnnData object.
    key
        This defines where to look for neighbors dictionary,
        connectivities, distances.

        neigh = NeighborsView(adata, key)
        neigh['distances']
        neigh['connectivities']
        neigh['params']
        'connectivities' in neigh
        'params' in neigh

        is the same as

        adata.obsp[adata.uns[key]['distances_key']]
        adata.obsp[adata.uns[key]['connectivities_key']]
        adata.uns[key]['params']
        adata.uns[key]['connectivities_key'] in adata.obsp
        'params' in adata.uns[key]
    Nc                 C   sà   d | _ d | _|d ks|dkrHd|jkr.tdƒ‚|jd | _d| _d| _n>||jkrbtd|› d�ƒ‚|j| | _| jd | _| jd | _| j|jkr |j| j | _ | j|jkrº|j| j | _t| j| j | j| j| jƒ\| _ | _d S )	NÚ	neighborszNo "neighbors" in .unsÚconnectivitiesÚ	distancesúNo "z	" in .unsZconnectivities_keyZdistances_key)	Ú_connectivitiesÚ
_distancesrÝ   r‰   Ú_neighbors_dictÚ
_conns_keyÚ
_dists_keyÚobspr
  )Úselfr|   rÏ   r"   r"   r#   r1   Â  s0    

ûzNeighborsView.__init__c                 C   s^   |dkr(d| kr"t d| j› d�ƒ‚| jS |dkrPd| krJt d| j› d�ƒ‚| jS | j| S d S )Nr  r  z
" in .obspr  )r‰   r  r  r  r  r  ©r  rÏ   r"   r"   r#   Ú__getitem__á  s    zNeighborsView.__getitem__c                 C   s2   |dkr| j d k	S |dkr$| jd k	S || jkS d S )Nr  r  )r  r  r  r  r"   r"   r#   Ú__contains__í  s
    

zNeighborsView.__contains__)N)r   r   r    r0   r1   r  r  r"   r"   r"   r#   r  £  s   
r  c                 C   sP   |dk	r|dk	rt dƒ‚|dk	r*| j| S t| |ƒ}d|krDt dƒ‚|d S dS )z<Choose connectivities from neighbbors or another obsp columnNzCYou can't specify both obsp, neighbors_key. Please select only one.r  zEYou need to run `pp.neighbors` first to compute a neighborhood graph.)r£   r  r  )r|   r  Zneighbors_keyr  r"   r"   r#   Ú_choose_graphö  s    ÿ

ÿr  )N)N)N)r–   r—   r   )F)F)rÚ   rÛ   )NN)r   r   )r   r   )[r0   rä   rD   rS   Úimportlib.utilrþ   Úenumr   Úpathlibr   Úweakrefr   Úcollectionsr   Ú	functoolsr   r   Útypesr   r	   Útypingr
   r   r   r   r   r   r   Únumpyr‚   r   Zscipyr   Zanndatar   r   r(   Útextwrapr   Ú	packagingr   Z	_settingsr   r&   r   r)   r   r+   Zcompute.is_constantr   r   r!   Ú_emptyrô   ZRandomStateZ	AnyRandomZEPSr-   rG   rJ   rE   ra   rg   rm   rp   ru   r{   rß   r   r�   r•   rÇ   r¡   r¶   rÀ   r¤   rÃ   rÔ   rÉ   rÐ   ZspmatrixrÙ   ræ   rñ   rò   rõ   rü   r  r
  r  r  r"   r"   r"   r#   Ú<module>   s¤   $$


   úúY

3	 ý


ü,
.
  ýü+   ÿ  þ	S