ó $¬Zc@sKddlmZddlZddlmZddlmZddlmZdefd„ƒYZ defd „ƒYZ d efd „ƒYZ d efd „ƒYZ defd„ƒYZ defd„ƒYZdefd„ƒYZdefd„ƒYZdefd„ƒYZdefd„ƒYZd„Zdefd„ƒYZdS(iÿÿÿÿ(t OrderedDictN(tconfig(t Transformer(tequiziptMaximumFrameCachecBs>eZdZd„Zd„Zdd„Zd„Zd„ZRS(sñCache examples, and create batches of maximum number of frames. Given a data stream which reads large chunks of data, this data stream caches these chunks and returns batches with a maximum number of acoustic frames. Parameters ---------- max_frames : int maximum number of frames per batch Attributes ---------- cache : list of lists of objects This attribute holds the cache at any given point. It is a list of the same size as the :attr:`sources` attribute. Each element in this list is a deque of examples that are currently in the cache. The cache gets emptied at the start of each epoch, and gets refilled when needed through the :meth:`get_data` method. cCsitt|ƒj|ƒ||_tg|jD]}|gf^q,ƒ|_g|_||_t |_ dS(N( tsuperRt__init__t max_framesRtsourcestcachet num_framestrngtFalsetproduces_examples(tselft data_streamRR tname((s./datasets/transformers.pyR s +  cCsgd}xQt|jƒD]@\}}t||ƒ}||d}||jkr|dSqWt|jƒS(Nii(t enumerateR tmaxRtlen(Rtcurr_maxtitn_framesttotal((s./datasets/transformers.pyt next_request)s cCsÃ|j|jjƒds'|jƒng}|jƒ}x2|jD]'}|jtj|j|| ƒƒqCWtg|jjƒD]\}}|||f^qƒ|_|j ||_ t |ƒS(Ni( R tkeyst_cacheRtappendtnumpytasarrayRt iteritemsR ttuple(Rtrequesttdatat source_nameRtdt((s./datasets/transformers.pytget_data3s  %5cKsJtg|jD]}|gf^q ƒ|_g|_tt|ƒj|S(N(RRR R RRtget_epoch_iterator(RtkwargsR((s./datasets/transformers.pyR%@s+ cCsßt|jƒ}tt|dƒƒ}|jj|ƒg|D]#}g|D]}||^qI^q<}tgt|jj |ƒD]#\}}||j ||f^q~ƒ|_ |j j g|dD]}|j d^qÁƒdS(Ni(tnexttchild_epoch_iteratortrangeRR tshuffleRRRRR R textendtshape(RR!tindexesR#RRtx((s./datasets/transformers.pyREs0BN( t__name__t __module__t__doc__RRtNoneR$R%R(((s./datasets/transformers.pyR s  t TransposecBs#eZdZd„Zdd„ZRS(s"Transpose axes of datastream. cCs,tt|ƒj|ƒ||_t|_dS(N(RR3Rt axes_listR R (Rt datastreamR4((s./datasets/transformers.pyRRs cCsUt|jƒ}g}x9t|j|ƒD]%\}}|jtj||ƒƒq(W|S(N(R'R(tzipR4RRt transpose(RR R!ttransposed_datataxes((s./datasets/transformers.pyR$Ws N(R/R0R1RR2R$(((s./datasets/transformers.pyR3Os tAddUniformAlignmentMaskcBs#eZdZd„Zdd„ZRS(sZAdds an uniform alignment mask to the incoming batch. Parameters ---------- cCs-tt|ƒj|ƒ|jjd|_dS(Nt alignment(R;(RR:RRR(RR((s./datasets/transformers.pyRfscCs¶t|jƒ}|jj}|jdƒ}|jdƒ}|jdƒ}|jdƒ}||jd}||jd} ||jd} | || f} tj| dtj ƒ} xñt |ƒD]ã} tj ||dd…| fƒ}tj ||dd…| fƒ}t ||ƒ}tj tj|dtj ƒtj| |dtj ƒgƒ}|| d| f¾s(RRqRt data_sourceRtRRR(RRuRtR&((Rts./datasets/transformers.pyRºs  cCs–t|jƒ}tt|jj|ƒƒ}|j|jƒ}g}x:t||j|ƒD]"\}}|j |j |ƒƒqYW|||j<|j ƒS(N( R'R(RR6RRtpopRtRuRtreshapeR_(RR R!tshapest reshaped_dataR#R,((s./datasets/transformers.pyR$Ás# N(R/R0R1RR2R$(((s./datasets/transformers.pyRq¸s t ConvReshapecBseZd„Zdd„ZRS(cKsKtt|ƒj|||_td„|jjDƒƒ|_||_dS(Ncss|] }|VqdS(N((RrRs((s./datasets/transformers.pys Ïs(RRzRRuRRRt quaternion(RRuR{R&((s./datasets/transformers.pyRÌs cCs—t|jƒ}tt|jj|ƒƒ}g}|jdkrîxò||jD]š}d|jdd|jddf}|jrÑt j d|dd|dfƒ}|j t j |j |ƒ|gddƒƒqM|j |j |ƒƒqMWnFxC||jD]4}t j|jƒdf}|j |j |ƒƒqüWt|ƒdkr³|d}t j|ddddƒ|dtt|ƒj|ƒ||_||_||_t|_dS(N(RR’RtmeanststdstoverR R (RRR“R”R•((s./datasets/transformers.pyR;s    cCsŒt|jƒ}tt|jj|ƒƒ}xUtt||jƒƒD]:}||j|c|j 8<||j|c|j :s  E.+. #