U C^@sddlmZddlmZddlZddlmZddlmZz ddl Z Wne k r\dZ YnXe dej Z e dZdd Zd d Zd d ZeejZedjdddZeeZedjdddZeeed<edZedZedZedZedZedZedZ edZ!edZ"edZ#edZ$eeZ%d/d dZ&d0d!dZ'd1d#dZ(d2d$dZ)d3d%d&Z*d4d'dZ+d5d(dZ,d6d)dZ-d7d*dZ.d8d+dZ/d9d,dZ0d:d-dZ1d;d.dZ2dS)<)unicode_literals)assert_allcloseN)Path) defaultdictz&extern \"C\" __global__.+?(?=extern|$)z(?<=void )\w+(?=\()cCs.i}t|D]}t|}|||<q|SN) kernel_refindallname_researchgroup)srckernelskernelnamer?/tmp/pip-install-6_kvzl1k/thinc/thinc/neural/_custom_kernels.py parse_kernelss  rcCs.tdkrtddSt|}dd|DS)NcSsdSrrrrrrz!compile_kernels..cSsi|]\}}|t||qSrcupyZ RawKernel).0rr rrr sz#compile_kernels..)rrritems)r r rrrcompile_kernelss rcCstdkr dSt|dS)NZ hash_datar)r rrr compile_mmhsrz_custom_kernels.curutf8)encodingz _murmur3.cuhashseq2colmaxoutmishsum_poolmax_poolbackprop_seq2colbackprop_maxout backprop_mishbackprop_sum_poolbackprop_mean_poolbackprop_max_poolcCsd|dkr2tj|jd|jd|ddfdd}|jd}|jd}t|f|f|||||f|S)NrfZdtype)rzerosshapeseq2col_kernel)XnWoutthreads_per_block num_blocksBIrrrr 9s *  c Csf|j\}}}|dkr:tj||fdd}tj||fdd}nd\}}t|f|f||||||f||fS)Nr.r/i)r1rr0 maxout_kernel) r3r5r6r7r8r9Pbestwhichrrrr!As  cCs:|j}|dkrtj|jdd}t|f|f||||f|S)Nr.r/)sizerr0r1 mish_kernel)r3r5 thresholdr6r7Nrrrr"Ms  c Cs`|dkr$tjt||jdfdd}t|}|jd}|jd}t|f|f||||||f|S)Nr,r.r/r)rr0lenr1sum_pool_kernelr3lengthsr5r6r7r8TOrrrr#Vs  c Csn|dkr$tjt||jdfdd}t|}|jd}|jd}t|f|f||||||f||d}|S)Nr,r.r/r)r,)rr0rDr1rEZreshaperFrrr mean_pool`s  rKc Cs|dkrBtjt||jdfdd}tjt||jdfdd}n|\}}t|}|jd}|jd} t|f|f||||||| f||fS)Nr,r.r/r:r)rr0rDr1max_pool_kernel) r3rGr5r6r7Zmaxesr>r8rHrIrrrr$ks   cCs\|jd}|dd}|jd|}|dkr>tj||fdd}t|f|f|||||f|S)Nrr-r,r.r/)r1rr0backprop_seq2col_kernel)dYr4r5r6r7r8ZnFr9rrrr%ys    c CsP|jd}|jd}|dkr0tj|||fdd}t|f|f||||||f|SNrr,r.r/)r1rr0backprop_maxout_kernel)rNr>r<r5r6r7r8r9rrrr&s   c CsP|jd}|jd}|dkr.tj||fdd}t|f|f||||||f|SrO)r1rr0backprop_mish_kernel)rNr3r5rBr6r7r8r9rrrr's   c CsXt|}t|}|jd}|dkr8tj||fdd}t|f|f||||||f|SNr,r.r/)rDintsumr1rr0backprop_sum_pool_kernel)Zd_sumrGr5r6r7r8rHrIrrrr(s   c CsXt|}t|}|jd}|dkr8tj||fdd}t|f|f||||||f|SrR)rDrSrTr1rr0backprop_mean_pool_kernel)Zd_meanrGr5r6r7r8rHrIrrrr)s   c CsZt|}t|}|jd}|dkr8tj||fdd}t|f|f|||||||f|SrR)rDrSrTr1rr0backprop_max_pool_kernel) Zd_maxesr>rGr5r6r7r8rHrIrrrr*s   c CsX|dkr tj|jddfdd}d}d}|jd}t|f|f|||||jd|f|S)NrZuint32r/)rr0r1hash_data_kernel)idsseedr5r6r7Zout_sizeZin_sizerHrrrrs  )Nr+r+)Nr+r+)Nr?r+r+)Nr+r+)Nr+r+)Nr+r+)Nr+r+)Nr+r+)Nr?r+r+)Nr+r+)Nr+r+)Nr+r+)Nr+r+)3 __future__rZ numpy.testingrrepathlibr collectionsrr ImportErrorcompileDOTALLrr rrr__file__parentZPWDopenreadZSRCZKERNELSZMMH_SRCr2r;rArErLrMrPrQrUrVrWr[r r!r"r#rKr$r%r&r'r(r)r*rrrrrs\