B eð]Dã@sàddlmZddlmZmZmZmZddlmZddl m Z ddl m Z ddl mZmZddl mZmZdd l mZd d „Zd d „Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zd d!„Zd"d#„Zd$S)%é)Úunicode_literals)ÚSequenceÚSizedÚIterableÚCallable)Úndarrayé)Ú integer_types)Úwrapt)ÚUndefinedOperatorErrorÚDifferentLengthError)ÚExpectedTypeErrorÚShapeMismatchError)ÚOutsideRangeErrorcCsTddlm}||}t|tƒs.tt|ƒdgƒ‚t|d|ƒsPtt|dƒdgƒ‚dS)Nr)ÚDocrzspacy.tokens.doc.Doc)Zspacy.tokens.docrÚ isinstancerr Útype)Úarg_idÚargsÚkwargsrZdocs©rú./tmp/pip-install-b8evvk6i/thinc/thinc/check.pyÚis_docss   rcGsVxPt|ƒD]D\}}t|tƒs(t|dgƒ‚|dkr t|ƒt|dƒkr t||ƒ‚q WdS)z/Check that arguments have the same length. rrrN)Ú enumeraterrr Úlenr )rÚiÚargrrrÚ equal_lengths   rcs¤ˆ dd¡‰x’t|ƒD]†\}}t|tƒs4t|dgƒ‚ˆdkr`ˆd|jˆkr`t|jˆˆgƒ‚|dkr|jˆ|djˆkr‡fdd„|Dƒ}t||ƒ‚qWdS) zCCheck that elements have the same dimension on specified axis. Úaxiséÿÿÿÿrrrcsg|]}|jˆ‘qSr)Úshape)Ú.0Úa)rrrú ,szequal_axis..N)Úgetrrrr r rr )rrrrÚlengthsr)rrÚ equal_axis"s    r&cs‡fdd„}|S)z¶Check that a particular argument is an array with a given shape. The shape may contain string attributes, which will be fetched from arg0 to the function (usually self). csº|d}||}t|dƒs&t|dgƒ‚g}x,ˆD]$}t|tƒsJt||dƒ}| |¡q0Wtˆƒt|jƒkr|t|jt |ƒˆƒ‚x8t |ƒD],\}}|dk r†|j||kr†t|j|ˆƒ‚q†WdS)Nrr Úarray) Úhasattrr rr ÚgetattrÚappendrr rÚtupler)rrrÚselfrZ shape_valuesZdimr)r rrÚhas_shape_inner6s     z"has_shape..has_shape_innerr)r r-r)r rÚ has_shape0s r.cKsN||}t|tƒst|dgƒ‚x*|D]"}t|tƒr:|dkr$t|dgƒ‚q$WdS)NÚiterablerzvalid shape (positive ints))rrr r )rrÚ func_kwargsrrÚvaluerrrÚis_shapeJs    r2cCs,||}t|tƒs(t|dƒs(t|dgƒ‚dS)NÚ __getitem__r/)rrr(r )rrrrrrrÚ is_sequenceSsr4cKsj||}t|tƒst|dgƒ‚d|krB||dkrBt||ddƒ‚d|krf||dkrft||ddƒ‚dS)NÚfloatÚminz>=Úmaxz<=)rr5r r)rrr0rrrrrÚis_floatYs  r8cKsj||}t|tƒst|dgƒ‚d|krB||dkrBt||ddƒ‚d|krf||dkrft||ddƒ‚dS)NÚintr6z>=r7z<=)rr r r)rrr0rrrrrÚis_intcs  r:cKs"||}t|tƒst|dgƒ‚dS)Nr)rrr )rrr0rrrrrÚis_arrayms r;cKs.||}t|tƒrd|jjkr*t|dgƒ‚dS)Nrz ndarray[int])rrZdtypeÚkindr )rrr0rrrrrÚ is_int_arrayssr=cstj‡fdd„ƒ}|S)NcsR|dkr|d}|dkr$t|dgƒ‚ˆ|jkrDtˆ||d|jƒ‚n |||ŽSdS)NrZModel)r Ú _operatorsr )ÚwrappedÚinstancerr)ÚoprrÚcheckerzs  z$operator_is_defined..checker)r Ú decorator)rArBr)rArÚoperator_is_definedys rDcs"tjdd„ƒ‰‡‡‡fdd„}|S)NcSs†t|dƒs|||ŽS|dk r,|gt|ƒ}nt|ƒ}xF|j ¡D]8\}}x.|D]&}t|tƒsht|dgƒ‚||||ƒqNWq@W|||ŽS)NÚchecksr)r(ÚlistrEÚitemsrrr )r?r@rrZfix_argsrrEÚcheckrrrÚchecked_function‰s     zarg..checked_functioncs@t|dƒr"|j ˆg¡ ˆ¡|Sˆ|ƒ}ˆtˆƒi|_|SdS)NrE)r(rEÚ setdefaultÚextendrF)Úfuncr?)rrIÚ constraintsrrÚarg_check_adder™s  zarg..arg_check_adder)r rC)rrMrNr)rrIrMrrˆs rcstj‡fdd„ƒ}|S)Ncs6x*ˆD]"}t|tƒs t|dgƒ‚||ŽqW|||ŽS)Nr)rrr )r?r@rrrH)rMrrrN¦s     zargs..arg_check_adder)r rC)rMrNr)rMrr¥srN) Ú __future__rÚ collectionsrrrrZnumpyrÚcompatr Úextrar Ú exceptionsr r r rrrrr&r.r2r4r8r:r;r=rDrrrrrrÚs(