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.opt-1.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>)�sortedZ	_sequence�	TypeError)�selfZ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�pickleZDEFAULT_PROTOCOLZHIGHEST_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 �updateZ	hexdigest)r�objZ
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&Z	func_nameZinst�clsr	r	r
r1Ms!		zHasher.savecCs't|t�rdStj||�dS)N)r)rr�memoize)rr&r	r	r
r3`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__)r6r7)�dict�sys�version_infor�save_globalrr#�getattrr�modulesr.�setattr)rr&r4r5�kwargs�moduleZmy_name�modr	r	r
r<ks	
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
rE�s
 
zHasher._batch_setitemscCstj|t|��dS)N)rr1r)rZ	set_itemsr	r	r
�save_set�szHasher.save_set)rrrrrrr1r3�structr5r<r�dispatch�copyr,�len�objectrr"rErH�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�npr.rP�
_getbuffer�
memoryview)rr!rQrSr	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.
        ZHASHEDN)r)rSZndarrayZdtypeZ	hasobject�shapeZflatten�flags�c_contiguous�f_contiguous�Tr r%rTZviewZuint8rQZmemmapr0�stridesZdescrrr1)rr&Zobj_c_contiguous�klassr	r	r
r1�s$"			$	zNumpyHasher.saveN)rrrrrr1r	r	r	r
rO�srOrFcCsCdtjkr'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
    rRr!rQ)r:r>rOrr)r&r!rQZhasherr	r	r
r�s
r)rrrr:r*rIrZ_compatrrZ_PicklerrrMrrrrOrr	r	r	r
�<module>s	mU