Your IP : 216.73.216.213


Current Path : /opt/alt/python35/lib/python3.5/site-packages/joblib/__pycache__/
Upload File :
Current File : //opt/alt/python35/lib/python3.5/site-packages/joblib/__pycache__/hashing.cpython-35.pyc



��X�'�@s�dZddlZddlZddlZddlZddlZddlZddlmZm	Z	e	rvej
Zn	ejZGdd�de�Z
Gdd�de�ZGd	d
�d
e�ZGdd�de�Zd
ddd�ZdS)zb
Fast cryptographic hash of Python objects, with a special case for fast
hashing of numpy arrays.
�N�)�_bytes_or_unicode�PY3_OR_LATERc@s"eZdZdZdd�ZdS)�_ConsistentSetza Class used to ensure the hash of Sets is preserved
        whatever the order of its items.
    cCsHyt|�|_Wn.tk
rCtdd�|D��|_YnXdS)Ncss|]}t|�VqdS)N)�hash)�.0�e�r	�?/opt/alt/python35/lib/python3.5/site-packages/joblib/hashing.py�	<genexpr>)sz*_ConsistentSet.__init__.<locals>.<genexpr>)�sorted�	_sequence�	TypeError)�self�set_sequencer	r	r
�__init__s
z_ConsistentSet.__init__N)�__name__�
__module__�__qualname__�__doc__rr	r	r	r
rsrc@s"eZdZdZdd�ZdS)�_MyHashz7 Class used to hash objects that won't normally pickle cGs
||_dS)N)�args)rrr	r	r
r/sz_MyHash.__init__N)rrrrrr	r	r	r
r,src@s�eZdZdZddd�Zddd�Zdd	�Zd
d�Zdej	d
d�Z
ejj
�Ze
eee�<e
eee�<e
eee�<e
eeej�<dd�Zdd�Zeeee��<dS)�HasherzW A subclass of pickler, to do cryptographic hashing, rather than
        pickling.
    �md5cCsVtj�|_trtjntj}tj||jd|�t	j
|�|_dS)N�protocol)�io�BytesIO�streamr�pickle�DEFAULT_PROTOCOL�HIGHEST_PROTOCOL�Picklerr�hashlib�new�_hash)r�	hash_namerr	r	r
r8s
	zHasher.__init__TcCs�y|j|�WnGtjk
rZ}z$|jd||ff7_�WYdd}~XnX|jj�}|jj|�|r�|jj�SdS)Nz"PicklingError while hashing %r: %r)	�dumpr�
PicklingErrorrr�getvaluer$�update�	hexdigest)r�obj�
return_digestr�dumpsr	r	r
rBszHasher.hashcCs�t|tjtij�f�r�t|d�r?|jj}n	|j}|j}t|�tt	�kr~t
||j�}n<|dkr�t
||�}n|jj}t
|||�}tj
||�dS)N�__func__)�
isinstance�types�
MethodType�type�pop�hasattrr.r�__self__rr�	__class__r!�save)rr+�	func_name�inst�clsr	r	r
r7Ms!		zHasher.savecCs't|t�rdStj||�dS)N)r/rr!�memoize)rr+r	r	r
r;`szHasher.memoizeNcCs�td|d|�}tjdkr+|d=ytj|||�Wn�tjk
r�tj|||�t|dd�}|dkr�|}|dkr�|j}tj	|}t
||�s�t|||�YnXdS)N�name�pack��r�__main__)r>r?)�dict�sys�version_infor!�save_globalrr'�getattrr�modulesr4�setattr)rr+r<r=�kwargs�module�my_name�modr	r	r
rDks	
zHasher.save_globalcCsby tj|tt|���Wn;tk
r]tj|ttdd�|D����YnXdS)Ncss'|]\}}t|�|fVqdS)N)r)r�k�vr	r	r
r�sz)Hasher._batch_setitems.<locals>.<genexpr>)r!�_batch_setitems�iterrr)r�itemsr	r	r
rN�s
 
zHasher._batch_setitemscCstj|t|��dS)N)r!r7r)r�	set_itemsr	r	r
�save_set�szHasher.save_set)rrrrrrr7r;�structr=rDr!�dispatch�copyr2�len�objectrr&rNrR�setr	r	r	r
r3s
rc@s4eZdZdZdddd�Zdd�ZdS)	�NumpyHasherz7 Special case the hasher for when numpy is loaded.
    rFcCs\||_tj|d|�ddl}||_t|d�rO|j|_n	t|_dS)a
            Parameters
            ----------
            hash_name: string
                The hash algorithm to be used
            coerce_mmap: boolean
                Make no difference between np.memmap and np.ndarray
                objects.
        r%rN�	getbuffer)	�coerce_mmaprr�numpy�npr4rZ�
_getbuffer�
memoryview)rr%r[r]r	r	r
r�s
		zNumpyHasher.__init__cCsBt||jj�r�|jjr�|jfkr@|j�}n9|jjrU|}n$|jj	rm|j
}n|j�}|jj|j
|j|jj���|jr�t||jj�r�|jj}n	|j}|d|j|j|jff}n3t||jj�r.|j}|d|jff}tj||�dS)z� Subclass the save method, to hash ndarray subclass, rather
            than pickling them. Off course, this is a total abuse of
            the Pickler class.
        �HASHEDN)r/r]�ndarray�dtype�	hasobject�shape�flatten�flags�c_contiguous�f_contiguous�Tr$r)r^�view�uint8r[�memmapr6�strides�descrrr7)rr+�obj_c_contiguous�klassr	r	r
r7�s$"			$	zNumpyHasher.saveN)rrrrrr7r	r	r	r
rY�srYrFcCsCdtjkr'td|d|�}ntd|�}|j|�S)al Quick calculation of a hash to identify uniquely Python objects
        containing numpy arrays.


        Parameters
        -----------
        hash_name: 'md5' or 'sha1'
            Hashing algorithm used. sha1 is supposedly safer, but md5 is
            faster.
        coerce_mmap: boolean
            Make no difference between np.memmap and np.ndarray
    r\r%r[)rBrFrYrr)r+r%r[�hasherr	r	r
r�s
r)rrr"rBr0rSr�_compatrr�_Picklerr!rWrrrrYrr	r	r	r
�<module>s	mU