Ë
    Æ[;jòk  ã                   ó  — d dl mZ d dlmZ d dlmZ d dlmZ d dlmZmZ d dl	m
Z
 d dl	mZ d dl	mZ d d	l	mZ d d
l	mZ d:d„Z G d„ de«      ZdZd ddddœZd ZdZdZdZdZdZdZdZdZd;d„Z G d„ d«      Zd„ Zd „ Zd!„ Z d"„ Z!d#„ Z"d$„ Z#d%„ Z$d&„ Z%d'„ Z&d(„ Z'd)„ Z(d*„ Z)d+„ Z*d,„ Z+d-„ Z,d<d.„Z-d<d/„Z. e/e
j`                  ¬0«      Z1 e.d1e1¬2«      Z2 e.d3«      Z3 e.d4«      Z4 e.d5«      Z5 e.d6«      Z6 e.d7e1¬2«      Z7 e.d8e1¬2«      Z8 e.d9«      Z9y)=é   )ÚCythonTransform)Ú
ModuleNode)ÚCompileError)ÚCythonUtilityCode)ÚUtilityCodeÚTempitaUtilityCode)ÚOptions)ÚInterpreter)Ú
PyrexTypes)ÚNaming)ÚSymtabc                 ó¢   — ddl m}  || «      } |dkD  r6d|z  }dj                  | j                  d«      D �cg c]  }||z   ‘Œ	 c}«      } | S c c}w )Né    )ÚdedentÚ Ú
)Útextwrapr   ÚjoinÚsplit)ÚtextÚreindentr   ÚindentÚxs        ú_G:\00. PROJECTS\API\Inventory\templateJSON\kerjaOCR\Lib\site-packages\Cython/Compiler/Buffer.pyr   r      sU   € ÝÙ�$‹<€DØ�!‚|Ø�x‘ˆØ�y‰y¨d¯j©j¸Ô.>Ó?Ñ.>¨˜& 1›*Ð.>Ñ?Ó@ˆØ€Kùò @s   ·Ac                   ó8   ‡ — e Zd ZdZdZˆ fd„Zd„ Zd„ Zd„ Zˆ xZ	S )ÚIntroduceBufferAuxiliaryVarsFc                 óš   •— t        |t        «      sJ ‚d| _        t        ‰| �  |«      }| j
                  rt        |j                  «       |S )Nr   )Ú
isinstancer   Úmax_ndimÚsuperÚ__call__Úbuffers_existsÚuse_bufstruct_declare_codeÚscope)ÚselfÚnodeÚresultÚ	__class__s      €r   r!   z%IntroduceBufferAuxiliaryVars.__call__   sC   ø€ Ü˜$¤
Ô+Ð+Ð+ØˆŒÜ‘Ñ! $Ó'ˆØ×ÒÜ& t§z¡zÔ2àˆó    c           	      ó  ‡‡‡‡— ‰j                   j                  «       }|D ��cg c]  \  }}|j                  j                  sŒ|‘Œ  }}}t	        |«      dkD  r|j                  d„ ¬«       d| _        |D ��cg c]  \  }}|j                  j                  sŒ|‘Œ  }}}t	        |«      dkD  rd| _        |D ].  \  ŠŠ‰dk(  sŒt        ‰j                  t        «      sŒ'd| _         n ~t        ‰t        «      r$t	        |«      dkD  rt        ‰j                  d«      ‚|D �]A  Š‰j                  j                  j                   rt        ‰j                  d«      ‚‰j"                  Š‰j                  }|j$                  t&        j(                  kD  r't        ‰j                  dt&        j(                  z  «      ‚|j$                  | j*                  kD  r|j$                  | _        ˆˆˆˆfd	„}	t,        j.                  t0        j2                  ft,        j4                  t0        j6                  ff}
|
D ��cg c]  \  }} |	||«      ‘Œ c}}\  }}t9        j:                  ||«      ‰_        �ŒD |‰_        ‰| _         y c c}}w c c}}w c c}}w )
Nr   c                 ó   — | j                   S ©N)Úname)Úentrys    r   Ú<lambda>z;IntroduceBufferAuxiliaryVars.handle_scope.<locals>.<lambda>2   s   € ¨5¯:ª:r)   )ÚkeyTÚ
memoryviewz'Buffer vars not allowed in module scopez-Buffers with pointer types not yet supported.z1Buffer ndims exceeds Options.buffer_max_dims = %dc                 ó�   •— ‰j                  |‰«      }‰j                  d || ‰j                  ¬«      }‰j                  rd|_        |S )N)r-   ÚcnameÚtypeÚposT)ÚmangleÚdeclare_varr5   Úis_argÚused)r4   Úprefixr3   Úaux_varr.   r-   r&   r$   s       €€€€r   Údecvarz9IntroduceBufferAuxiliaryVars.handle_scope.<locals>.decvarP   sI   ø€ ØŸ™ V¨TÓ2�Ø×+Ñ+°¸UØ15¸4¿8¹8ð ,ó E�à—<’<Ø#'�G”Là�r)   )!ÚentriesÚitemsr4   Ú	is_bufferÚlenÚsortr"   Úis_memoryviewslicer   Úutility_code_definitionr   Úusing_memoryviewr   r   r5   ÚdtypeÚis_ptrr-   Úndimr	   Úbuffer_max_dimsr   r   Úc_pyx_buffer_nd_typer   Úpybuffernd_prefixÚc_pyx_buffer_typeÚpybufferstruct_prefixr   Ú	BufferAuxÚ
buffer_auxÚbuffer_entriesr$   )r%   r&   r$   Úscope_itemsr-   r.   ÚbufvarsÚmemviewslicevarsÚbuftyper<   Úauxvarsr4   r:   Ú
pybufferndÚrcbuffers    `` ``         r   Úhandle_scopez)IntroduceBufferAuxiliaryVars.handle_scope+   s  û€ ð —m‘m×)Ñ)Ó+ˆÙ,7ÔP©K™[˜T 5¸5¿:¹:×;OÓ;O’5¨KˆÑPÜˆw‹<˜!ÒØ�L‰LÑ5ˆLÔ6Ø"&ˆDÔá5@Ôb±[¡k d¨EÀEÇJÁJ×DaÓDašE°[ÐÑbÜÐÓ  1Ò$Ø"&ˆDÔó )‰MˆT�5Ø�|Ó#¬
°5×3PÑ3PÔRcÕ(dØ(,�Ô%Ùð )ð ä�dœJÔ'¬C°«L¸1Ò,<ä˜tŸx™xÐ)RÓSÐSÜˆEØ�z‰z×Ñ×&Ò&Ü" 4§8¡8Ð-\Ó]Ð]à—:‘:ˆDØ—j‘jˆGØ�|‰|œg×5Ñ5Ò5Ü" 4§8¡8ØKÌg×NeÑNeÑeógð gà�|‰|˜dŸm™mÒ+Ø '§¡�”÷ô #×7Ñ7¼×9QÑ9QÐRÜ"×4Ñ4´f×6RÑ6RÐSðUˆGáOVÔ#WÉw¹^¸dÀF¡F¨4°Õ$8ÈwÒ#WÑ ˆJ˜ä%×/Ñ/°
¸HÓEˆEÖð5 ð8  'ˆÔØˆ�
ùóa Qùó
 cùóL $Xs   ¤I0ÁI0Á7I6ÂI6È)I<c                 ó`   — | j                  ||j                  «       | j                  |«       |S r,   )rW   r$   Úvisitchildren©r%   r&   s     r   Úvisit_ModuleNodez-IntroduceBufferAuxiliaryVars.visit_ModuleNodeb   s)   € Ø×Ñ˜$ §
¡
Ô+Ø×Ñ˜4Ô Øˆr)   c                 ó`   — | j                  ||j                  «       | j                  |«       |S r,   )rW   Úlocal_scoperY   rZ   s     r   Úvisit_FuncDefNodez.IntroduceBufferAuxiliaryVars.visit_FuncDefNodeg   s+   € Ø×Ñ˜$ × 0Ñ 0Ô1Ø×Ñ˜4Ô Øˆr)   )
Ú__name__Ú
__module__Ú__qualname__r"   rD   r!   rW   r[   r^   Ú__classcell__)r(   s   @r   r   r      s%   ø„ ð €NØÐôò5ònö
r)   r   )rE   rG   ÚmodeÚnegative_indicesÚcastÚfullTF)rG   rc   rd   re   z"%s" is not a buffer optionzToo many buffer optionsz#"%s" buffer option already suppliedz"%s" missingz[Only allowed buffer modes are: "c", "fortran", "full", "strided" (as a compile-time string)z#ndim must be a non-negative integerz0dtype must be "object", numeric type or a structz"%s" must be a booleanNc                 ó‚  ‡ ‡— |€t         }t        j                  |||d¬«      \  }}t        |«      t        kD  rt        |d   d   t        «      ‚i Š|j                  «       D ](  \  }\  }}|t        vrt        |t        |z  «      ‚|‰|<   Œ* t        t        |«      D ]?  \  }\  }}|t        vrt        |t        |z  «      ‚|‰v rt        |t        |z  «      ‚|‰|<   ŒA t        D ]  }|‰vsŒ	 ||   ‰|<   Œ ‰j                  d«      }	|	r|	j                  rt        ‰ t         «      ‚‰j                  d«      }
|
r%t#        |
t$        «      r|
dk  rt        ‰ t&        «      ‚‰j                  d«      }|r|d	vrt        ‰ t(        «      ‚ˆ ˆfd
„} |d«        |d«       ‰S # t        $ r |rt        ‰ t        |z  «      ‚Y ŒÙw xY w)aO  
    Must be called during type analysis, as analyse is called
    on the dtype argument.

    posargs and dictargs should consist of a list and a dict
    of tuples (value, pos). Defaults should be a dict of values.

    Returns a dict containing all the options a buffer can have and
    its value (with the positions stripped).
    )r   rE   )Útype_envÚ	type_argséÿÿÿÿr   rE   rG   r   rc   )rf   ÚstridedÚcÚfortranc                 ón   •— ‰j                  | «      }t        |t        «      st        ‰t        | z  «      ‚y r,   )Úgetr   Úboolr   ÚERR_BUF_BOOL)r-   r   Ú	globalposÚoptionss     €€r   Úassert_boolz+analyse_buffer_options.<locals>.assert_bool²   s2   ø€ Ø�K‰K˜ÓˆÜ˜!œTÔ"Ü˜y¬,¸Ñ*=Ó>Ð>ð #r)   rd   re   )Úbuffer_defaultsr
   Úinterpret_compiletime_optionsr@   Úbuffer_positional_options_countr   ÚERR_BUF_TOO_MANYr>   Úbuffer_optionsÚERR_BUF_OPTION_UNKNOWNÚzipÚERR_BUF_DUPÚKeyErrorÚERR_BUF_MISSINGro   Úis_extension_typeÚERR_BUF_DTYPEr   ÚintÚERR_BUF_NDIMÚERR_BUF_MODE)rr   ÚenvÚposargsÚdictargsÚdefaultsÚneed_completer-   Úvaluer5   rE   rG   rc   rt   rs   s   `            @r   Úanalyse_buffer_optionsrŠ   |   sÜ  ù€ ð ÐÜ"ˆä#×AÑAØ� C°<ôAÑ€GˆXô ˆ7ƒ|Ô5Ò5Ü˜7 2™; q™>Ô+;Ó<Ð<à€GØ&Ÿn™nÖ.Ñˆ‰lˆu�cØ”~Ñ%Ü˜sÔ$:¸TÑ$AÓBÐBØˆ�Šð /ô
 "¤.°'Ö:Ñˆ‰lˆu�cØ”~Ñ%Ü˜sÔ$:¸TÑ$AÓBÐBØ�7‰?Ü˜s¤K°$Ñ$6Ó7Ð7Øˆ�Šð ;÷ ˆØ�wÒðJØ (¨¡�˜’ð ð �K‰K˜Ó €EÙ�×(Ò(Ü˜9¤mÓ4Ð4à�;‰;�vÓ€DÙ”Z ¤cÔ*¨d°QªhÜ˜9¤lÓ3Ð3à�;‰;�vÓ€DÙ�TÐ@Ñ@Ü˜9¤lÓ3Ð3õ?ñ
 Ð"Ô#Ù�Ôà€Nøô1 ò JÙ Ü& y´/ÀDÑ2HÓIÐIñ !ðJús   Ã-FÆF>Æ=F>c                   ó6   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	y)	ÚBufferEntryc                 óü   — || _         |j                  | _        |j                  j                  j                  | _        d| j                  z  | _        |j                  j                  | _        | j                  «        y )Nz%s.rcbuffer->pybuffer.buf)	r.   r4   rN   Úbuflocal_nd_varr3   Úbuf_ptrÚbuffer_ptr_typeÚbuf_ptr_typeÚinit_attributes)r%   r.   s     r   Ú__init__zBufferEntry.__init__Â   s[   € ØˆŒ
Ø—J‘JˆŒ	Ø×%Ñ%×5Ñ5×;Ñ;ˆŒ
Ø2°T·Z±ZÑ?ˆŒØ!ŸJ™J×6Ñ6ˆÔØ×ÑÕr)   c                 ó‚   — | j                  «       | _        | j                  «       | _        | j	                  «       | _        y r,   )Úget_buf_shapevarsÚshapeÚget_buf_stridevarsÚstridesÚget_buf_suboffsetvarsÚ
suboffsets©r%   s    r   r’   zBufferEntry.init_attributesÊ   s2   € Ø×+Ñ+Ó-ˆŒ
Ø×.Ñ.Ó0ˆŒØ×4Ñ4Ó6ˆ�r)   c                 ó$   — | j                  d«      S )Nz%s.diminfo[%d].suboffsets©Ú_for_all_ndimr›   s    r   r™   z!BufferEntry.get_buf_suboffsetvarsÏ   s   € Ø×!Ñ!Ð"=Ó>Ð>r)   c                 ó$   — | j                  d«      S )Nz%s.diminfo[%d].stridesr�   r›   s    r   r—   zBufferEntry.get_buf_stridevarsÒ   s   € Ø×!Ñ!Ð":Ó;Ð;r)   c                 ó$   — | j                  d«      S )Nz%s.diminfo[%d].shaper�   r›   s    r   r•   zBufferEntry.get_buf_shapevarsÕ   s   € Ø×!Ñ!Ð"8Ó9Ð9r)   c                 ó„   — t        | j                  j                  «      D �cg c]  }|| j                  |fz  ‘Œ c}S c c}w r,   )Úranger4   rG   r3   )r%   ÚsÚis      r   rž   zBufferEntry._for_all_ndimØ   s6   € Ü-2°4·9±9·>±>Ô-BÓCÑ-B¨��T—Z‘Z �OÓ#Ð-BÑCÐCùÒCs   ¢=c           	      ó�  — g }| j                   j                  }| j                   j                  }|dk(  rqt        || j	                  «       | j                  «       «      D ]9  \  }}}|j                  |«       |j                  |«       |j                  |«       Œ; d|z  }	t        }
ny|dk(  rd|z  }	t        }
n$|dk(  rd|z  }	t        }
n|dk(  rd|z  }	t        }
nJ ‚t        || j	                  «       «      D ]'  \  }}|j                  |«       |j                  |«       Œ) |	|j                  j                  vrO|j                  j                  j                  |	«       |j                  d	   }|j                  d
   } |
|||	|¬«       | j                  j                  «       }|	›d|›d| j                   ›ddj#                  |«      ›d�}|S )Nrf   z__Pyx_BufPtrFull%ddrk   z__Pyx_BufPtrStrided%ddrl   z__Pyx_BufPtrCContig%ddrm   z__Pyx_BufPtrFortranContig%ddÚutility_code_protoÚutility_code_def)r-   ÚndÚ(ú, Ú))r4   rG   rc   r{   r—   r™   ÚappendÚbuf_lookup_full_codeÚbuf_lookup_strided_codeÚbuf_lookup_c_codeÚbuf_lookup_fortran_codeÚglobalstateÚutility_codesÚaddr‘   Úempty_declaration_coder�   r   )r%   ÚcodeÚindex_cnamesÚparamsr¨   rc   r¤   r£   ÚoÚfuncnameÚfuncgenÚ	protocodeÚdefcodeÚbuf_ptr_type_codeÚptrcodes                  r   Úgenerate_buffer_lookup_codez'BufferEntry.generate_buffer_lookup_codeÛ   s©  € ð ˆØ�Y‰Y�^‰^ˆØ�y‰y�~‰~ˆØ�6Š>Ü˜|Ø#×6Ñ6Ó8Ø#×9Ñ9Ó;ö=‘��1�að —‘˜aÔ Ø—‘˜aÔ Ø—‘˜aÕ ð=ð -¨rÑ1ˆHÜ*‰Gà�yÒ Ø3°bÑ8�Ü1‘Ø˜’Ø3°bÑ8�Ü+‘Ø˜Ò"Ø9¸BÑ>�Ü1‘à�uÜ˜L¨$×*AÑ*AÓ*CÖD‘��1Ø—‘˜aÔ Ø—‘˜aÕ ð Eð
 ˜4×+Ñ+×9Ñ9Ñ9Ø×Ñ×*Ñ*×.Ñ.¨xÔ8Ø×(Ñ(Ð)=Ñ>ˆIØ×&Ñ&Ð'9Ñ:ˆGÙ�I˜w¨X¸"Õ=à ×-Ñ-×DÑDÓFÐÚ&.Ò0AÀ4Ç<Ã<Ø&*§i¡i°Õ&7ð9ˆàˆr)   N)
r_   r`   ra   r“   r’   r™   r—   r•   rž   r¿   © r)   r   rŒ   rŒ   Á   s&   „ òò7ò
?ò<ò:òDó*r)   rŒ   c                 ó    — d}|j                   }|dk(  r|dz  }n#|dk(  r|dz  }n|dk(  r|dz  }n|dk(  r|d	z  }nJ ‚| j                  r|d
z  }|S )NÚPyBUF_FORMATrf   z| PyBUF_INDIRECTrk   z| PyBUF_STRIDESrl   z| PyBUF_C_CONTIGUOUSrm   z| PyBUF_F_CONTIGUOUSz| PyBUF_WRITABLE)rc   Úwritable_needed)rN   Úbuffer_typeÚflagsrc   s       r   Ú	get_flagsrÆ     sy   € Ø€EØ×Ñ€DØˆv‚~ØÐ#Ñ#‰Ø	�Ò	ØÐ"Ñ"‰Ø	�ŠØÐ'Ñ'‰Ø	�Ò	ØÐ'Ñ'‰àˆuØ×!Ò! 5Ð,>Ñ#> 5Ø€Lr)   c                 ó`   — | j                   }d|j                  _        d|j                  _        y ©NT)rN   rŽ   r9   Ú	rcbuf_var)r.   rN   s     r   Úused_buffer_aux_varsrÊ     s)   € Ø×!Ñ!€JØ&*€J×ÑÔ#Ø $€J×ÑÕr)   c                 óv  — | j                   | j                  j                  }}|j                  j                  }ddg}|dk(  r|j                  d«       g }t        | j                  j                  «      D ]#  }|D ]  }|j                  d||||||fz  «       Œ Œ% |j                  dj                  |«      «       y )Nr˜   r–   rf   rš   z1%s.diminfo[%d].%s = %s.rcbuffer->pybuffer.%s[%d];r   )
rN   r4   rc   rŽ   r3   r¬   r¢   rG   Úputlnr   )	Ú	buf_entryrµ   rN   rc   Úpybuffernd_structÚfldnamesÚlnr¤   Úfldnames	            r   Ú put_unpack_buffer_aux_into_scoperÒ     s²   € ð !×+Ñ+¨Y¯^©^×-@Ñ-@�€JØ"×2Ñ2×8Ñ8Ðà˜7Ð#€HØˆv‚~Ø�‰˜Ô%à	€BÜ�9—>‘>×&Ñ&Ö'ˆÛˆGØ�I‰IÐIØ! 1 gØ! 7¨AðMñ õ ñ  ð (ð 	‡J�Jˆs�x‰x˜‹|Õr)   c                 ó  — | j                   }|j                  j                  }|j                  j                  }|j	                  d|z  «       |j	                  d|z  «       |j	                  d|z  «       |j	                  |›d|›d�«       y )Nz%s.pybuffer.buf = NULL;z%s.refcount = 0;z%s.data = NULL;z.rcbuffer = &Ú;)rN   rŽ   r3   rÉ   rÌ   )r.   rµ   ÚbufauxrÎ   Úpybuffer_structs        r   Úput_init_varsr×   0  s{   € Ø×Ñ€FØ×.Ñ.×4Ñ4ÐØ×&Ñ&×,Ñ,€Oà‡J�JÐ(¨?Ñ:Ô;Ø‡J�JÐ! OÑ3Ô4ð 	‡J�JÐ Ð#4Ñ4Ô5Ø‡J�JÒ'8º/ÐJÕKr)   c                 óp  — | j                   }t        || j                  || j                  «      }|j	                  d«       |j	                  d| j                  j
                  j                  «       z  «       |j	                  |j                  d|z  |«      «       |j	                  d«       t        | |«       y )NÚ{ú'__Pyx_BufFmt_StackElem __pyx_stack[%d];ú%s == -1Ú})	rN   Úget_getbuffer_callr3   r4   rÌ   rE   Ústruct_nesting_depthÚerror_goto_ifrÒ   )r.   rµ   r5   rN   Ú	getbuffers        r   Úput_acquire_arg_bufferrá   >  sŒ   € Ø×!Ñ!€JÜ" 4¨¯©°jÀ%Ç*Á*ÓM€Ið 	‡J�Jˆs„OØ‡J�JÐ8¸5¿:¹:×;KÑ;K×;`Ñ;`Ó;bÑbÔcØ‡J�Jˆt×!Ñ! *¨yÑ"8¸#Ó>Ô?Ø‡J�Jˆs„Oô % U¨DÕ1r)   c                 ó¦   — | j                   j                  t        «       | j                  d|j                  j
                  j                  z  «       y )Nú0__Pyx_SafeReleaseBuffer(&%s.rcbuffer->pybuffer);)r±   Úuse_utility_codeÚacquire_utility_coderÌ   rN   rŽ   r3   )rµ   r.   s     r   Úput_release_buffer_coderæ   L  s;   € Ø×Ñ×%Ñ%Ô&:Ô;Ø‡J�JÐAÀE×DTÑDT×DdÑDd×DjÑDjÑjÕkr)   c                 ó  — |j                   }t        |j                  «      }t        ||«      }|j                  j
                  }t        | |j                  «      }| j                  j                  t        «       dt        «       z  S )Nz __Pyx_GetBufferAndValidate(&%(pybuffernd_struct)s.rcbuffer->pybuffer, (PyObject*)%(obj_cname)s, &%(dtype_typeinfo)s, %(flags)s, %(ndim)d, %(cast)d, __pyx_stack))rG   r�   re   rÆ   rŽ   r3   Úget_type_information_cnamerE   r±   rä   rå   Úlocals)	rµ   Ú	obj_cnamerN   rÄ   rG   re   rÅ   rÎ   Údtype_typeinfos	            r   rÝ   rÝ   Q  sv   € Ø×Ñ€DÜˆ{×ÑÓ €DÜ�j +Ó.€EØ"×2Ñ2×8Ñ8Ðä/°°k×6GÑ6GÓH€Nà×Ñ×%Ñ%Ô&:Ô;ð%ä'-£xñ0ð 1r)   c           	      óf  ‡— |j                   |j                  }}|j                  j                  }t	        ||«      }	‰j                  d«       ‰j                  d|j                  j                  «       z  «       t        ‰d||«      }
|�rã‰j                  d|z  «       ‰j                  j                  t        j                  d¬«      }‰j                  |›d|
|z  ›d�«       ‰j                  d	‰j                  d
|z  «      z  «       t        ˆfd„t        d«      D «       «      }‰j                  d|z  «       ‰j                  d	‰j                  d|
| z  z  «      z  «       ‰j                  d|z  «       ‰j                   j#                  t$        «       ‰j                  d«       ‰j                  d«       ‰j                  d|z  «       ‰j                  d«       ‰j                  d|z  «       |D ]  }‰j                  j'                  |«       Œ ‰j                  d«       t)        |‰«       ‰j                  ‰j+                  ||«      «       ‰j                  j'                  |«       n´‰j                  d	‰j                  d|
|z  z  «      z  «       ‰j                  | ›dt        j,                  |t        j.                  d«      ›d|›d�«       ‰j                  ‰j1                  |«      «       ‰j3                  d«       t)        |‰«       ‰j                  d«       ‰j                  d«       y)aJ  
    Generate code for reassigning a buffer variables. This only deals with getting
    the buffer auxiliary structure and variables set up correctly, the assignment
    itself and refcounting is the responsibility of the caller.

    However, the assignment operation may throw an exception so that the reassignment
    never happens.

    Depending on the circumstances there are two possible outcomes:
    - Old buffer released, new acquired, rhs assigned to lhs
    - Old buffer released, new acquired which fails, reaqcuire old lhs buffer
      (which may or may not succeed).
    rÙ   rÚ   z%srã   F©Ú
manage_refz = rÔ   ú	if (%s) {ú%s < 0c              3   ót   •K  — | ]/  }‰j                   j                  t        j                  d ¬«      –— Œ1 y­w)Frí   N)Ú	funcstateÚallocate_tempr   Úpy_object_type)Ú.0Ú_rµ   s     €r   Ú	<genexpr>z'put_assign_to_buffer.<locals>.<genexpr>ƒ  s4   øè ø€ ð -Ù#+˜að Ÿ.™.×6Ñ6´z×7PÑ7PÐ]bÐ6×cÙ#+ùs   ƒ58é   zPyErr_Fetch(&%s, &%s, &%s);rÛ   z/Py_XDECREF(%s); Py_XDECREF(%s); Py_XDECREF(%s);z!__Pyx_RaiseBufferFallbackError();z} else {zPyErr_Restore(%s, %s, %s);rÜ   z%s = %s = %s = 0;ÚPy_Nonez; __Pyx_INCREF(Py_None); z.rcbuffer->pybuffer.buf = NULL;N)rN   r4   rŽ   r3   rÆ   rÌ   rE   rÞ   rÝ   rò   ró   r   Ú
c_int_typeÚunlikelyÚtupler¢   r±   rä   Úraise_buffer_fallback_codeÚrelease_temprÒ   Úerror_goto_if_negÚtypecastrô   Ú
error_gotoÚput)Ú	lhs_cnameÚ	rhs_cnamerÍ   Úis_initializedr5   rµ   rN   rÄ   rÎ   rÅ   rà   Úretcode_cnameÚ	exc_tempsÚts        `        r   Úput_assign_to_bufferr	  _  s”  ø€ ð  (×2Ñ2°I·N±N�€JØ"×2Ñ2×8Ñ8ÐÜ�j +Ó.€Eà‡J�Jˆs„OØ‡J�JÐ8¸;×;LÑ;L×;aÑ;aÓ;cÑcÔdä" 4¨¨z¸;ÓG€Iâà�
‰
ÐEÐHYÑYÔZàŸ™×4Ñ4´Z×5JÑ5JÐW\Ð4Ó]ˆØ�
‰
¢°	¸IÓ0EÐFÔGØ�
‰
�; $§-¡-°¸=Ñ0HÓ"IÑJÔKô
 ó -Ü#(¨¤8ó-ó -ˆ	à�
‰
Ð0°9Ñ<Ô=Ø�
‰
�; §¡¨z¸YÈÑ=RÑ/SÓ!TÑTÔUØ�
‰
ÐDÀyÑPÔQØ×Ñ×)Ñ)Ô*DÔEØ�
‰
Ð6Ô7Ø�
‰
�:ÔØ�
‰
Ð/°)Ñ;Ô<Ø�
‰
�3ŒØ�
‰
Ð&¨Ñ2Ô3ÛˆAØ�N‰N×'Ñ'¨Õ*ð à�
‰
�3Œä(¨°DÔ9Ø�
‰
�4×)Ñ)¨-¸Ó=Ô>Ø�‰×#Ñ# MÕ2ð
 	�
‰
�; §¡¨z¸YÈÑ=RÑ/SÓ!TÑTÔUØ�
‰
ÚÜ×'Ñ'¨´Z×5NÑ5NÐPYÕZÚ%ð'ô 	(ð 	�
‰
�4—?‘? 3Ó'Ô(Ø�‰�Ôä(¨°DÔ9Ø�
‰
�3Œà‡J�Jˆs…Or)   c           
      óÂ  — |d   xr |}|d   �rø|j                   j                  t        j                  d¬«      }|j	                  d|z  «       t        t        ||| j                  «       «      «      D ]Ã  \  }	\  }
}}|
dk7  r~|j	                  d|z  «       |rA|j	                  |›d|›d	�«       |j	                  d
|j                  d|z  «      ||	fz  «       n|j	                  d||	fz  «       |j                  d«       |
dk7  rd}nd}|j	                  d
|j                  |›d|›|›�«      ||	fz  «       ŒÅ |r"|j                  j                  t        «       d}n!|j                  j                  t        «       d}|j	                  d|j                  d|z  «      z  «       |j	                  |›d|›d�«       |j	                  |j                  |«      «       |j	                  d«       |j                   j                  |«       nG|rEt        ||| j                  «       «      D ]'  \  }
}}|
dk7  sŒ|j	                  d|›d|›d|›d	�«       Œ) | j!                  ||«      S )ae  
    Generates code to process indices and calculate an offset into
    a buffer. Returns a C string which gives a pointer which can be
    read from or written to at will (it is an expression so caller should
    store it in a temporary if it is used more than once).

    As the bounds checking can have any number of combinations of unsigned
    arguments, smart optimizations etc. we insert it directly in the function
    body. The lookup however is delegated to a inline function that is instantiated
    once per ndim (lookup with suboffsets tend to get quite complicated).

    entry is a BufferEntry
    Ú
wraparoundÚboundscheckFrí   z%s = -1;r   zif (%s < 0) {z += rÔ   zif (%s) %s = %d;rð   z%s = %d;z} else Ú z(size_t)z >= Ú __Pyx_RaiseBufferIndexErrorNogilÚ__Pyx_RaiseBufferIndexErrorrï   z%s != -1r©   ú);rÜ   zif (z < 0) )rò   ró   r   rú   rÌ   Ú	enumerater{   r•   rû   r  r±   rä   Úraise_indexerror_nogilÚraise_indexerror_coder  rþ   r¿   )r.   Úindex_signedsr¶   Ú
directivesr5   rµ   rd   Úin_nogil_contextÚfailed_dim_tempÚdimÚsignedr3   r–   re   Úfuncs                  r   Úput_buffer_lookup_coder  §  s1  € ð " ,Ñ/ÒDÐ4DÐà�-Ó ð
 Ÿ.™.×6Ñ6´z×7LÑ7LÐY^Ð6Ó_ˆØ�
‰
�: Ñ/Ô0Ü+4´S¸ÈÐV[×VmÑVmÓVoÓ5pÖ+qÑ'ˆCÑ'�&˜% Ø˜Š{à—
‘
˜?¨UÑ2Ô3Ù#Ø—J‘Jªe²UÐ;Ô<Ø—J‘JÐ1ØŸ™ h°Ñ&6Ó7Ø'¨ð5.ñ  .õ /ð —J‘J˜z¨_¸cÐ,BÑBÔCØ—‘˜Ô#à˜Š{Ø‘à!�Ø�J‰JÐ)Ø—‘ªe±T¹5ÐAÓBØ ð-&ñ &õ 'ð# ,rñ* Ø×Ñ×-Ñ-Ô.DÔEØ5‰Dà×Ñ×-Ñ-Ô.CÔDØ0ˆDà�
‰
�; §¡¨z¸OÑ/KÓ!LÑLÔMØ�
‰
¢¢oÐ6Ô7Ø�
‰
�4—?‘? 3Ó'Ô(Ø�
‰
�3ŒØ�‰×#Ñ# OÕ4Ù	ä$'¨°|ÀU×E\ÑE\ÓE^Ö$_Ñ ˆF�E˜5Ø˜‹{Ø—
’
²eºUÂEÐJÕKð %`ð ×,Ñ,¨T°<Ó@Ð@r)   c                 ó.   — | j                  t        «       y r,   )rä   Úbuffer_struct_declare_code)r„   s    r   r#   r#   é  s   € Ø×ÑÔ3Õ4r)   c                 óü  — dj                  t        |«      D �cg c]
  }d|||fz  ‘Œ c}«      }| j                  d|›d|›d|›d|›d�	«       dj                  t        |«      D �cg c]
  }d|||fz  ‘Œ c}«      }| j                  d	|›d
|›d�«       |j                  t        d«      ||fz  dj                  t        |«      D �cg c]  }t        d«      ||||fz  ‘Œ c}«      z   dz   «       yc c}w c c}w c c}w )ú‹
    Generates a buffer lookup function for the right number
    of dimensions. The function gives back a void* at the right location.
    rª   zi%d, s%d, o%dú#define ú(type, buf, z	) (type)(z
_imp(buf, z))z.Py_ssize_t i%d, Py_ssize_t s%d, Py_ssize_t o%dzstatic CYTHON_INLINE void* z_imp(void* buf, r  zf
        static CYTHON_INLINE void* %s_imp(void* buf, %s) {
          char* ptr = (char*)buf;
        r  zX          ptr += s%d * i%d;
          if (o%d >= 0) ptr = *((char**)ptr) + o%d;
        z
return ptr;
}N)r   r¢   rÌ   r   )ÚprotoÚdefinr-   r¨   r¤   Ú	macroargsÚfuncargss          r   r­   r­   í  s#  € ð —	‘	ÄÀbÄ	ÓJÁ	¸1˜?¨a°°A¨YÓ6À	ÑJÓK€IØ	‡K‚KÂtÊYÒX\Ò^gÐhÔià�y‰yÔ`eÐfhÔ`iÓjÑ`iÐ[\ÐJÈaÐQRÐTUÈYÓVÐ`iÑjÓk€HØ	‡K‚KÂtÊXÐVÔWØ	‡K�K”ð ó ð �hÐñ ð #%§'¡'ô &+¨2¤Yó+0ñ &/ ô ,2ð 3ó ,ð �1�a˜ˆ|ó,ð &/ñ+0ó #
ñ
ð ñõ  ùò Kùò kùò
+0s   ™C/Á%C4ÃC9c           	      ó  — dj                  t        |«      D �cg c]	  }d||fz  ‘Œ c}«      }dj                  t        |«      D �cg c]	  }d||fz  ‘Œ c}«      }| j                  d|›d|›d|›d�«       y	c c}w c c}w )
r  rª   úi%d, s%dú + ú	i%d * s%dr   r!  z) (type)((char*)buf + r«   N)r   r¢   rÌ   ©r"  r#  r-   r¨   r¤   ÚargsÚoffsets          r   r®   r®     st   € ð �9‰9´5¸´9Ó=±9¨a�j A q 6Ó)°9Ñ=Ó>€DØ�Z‰Z´u¸R´yÓA±y°!˜¨¨1 vÓ-°yÑAÓB€FØ	‡K‚KÂtÊTÒSYÐZÕ[ùò >ùÚAs   ™A7ÁA<c                 ó<  — |dk(  r| j                  d|z  «       ydj                  t        |«      D �cg c]	  }d||fz  ‘Œ c}«      }dj                  t        |dz
  «      D �cg c]	  }d||fz  ‘Œ c}«      }| j                  d||||dz
  fz  «       yc c}w c c}w )	z§
    Similar to strided lookup, but can assume that the last dimension
    doesn't need a multiplication as long as.
    Still we keep the same signature for now.
    r   ú.#define %s(type, buf, i0, s0) ((type)buf + i0)rª   r'  r(  r)  ú9#define %s(type, buf, %s) ((type)((char*)buf + %s) + i%d)N©rÌ   r   r¢   r*  s          r   r¯   r¯     s£   € ð 
ˆQ‚wØ�‰ÐDÀtÑKÕLà�y‰y´u¸R´yÓA±y°!˜*¨¨1 vÓ-°yÑAÓBˆØ—‘¼5ÀÀaÁ¼=ÓI¹=°a˜[¨A¨q¨6Ó1¸=ÑIÓJˆØ�‰ÐOÐSWÐY]Ð_eÐgiÐlmÑgmÐRnÑnÕoùò BùÚIs   ³BÁ#Bc                 ó2  — |dk(  r| j                  d|z  «       y	dj                  t        |«      D �cg c]	  }d||fz  ‘Œ c}«      }dj                  t        d|«      D �cg c]	  }d||fz  ‘Œ c}«      }| j                  d|||dfz  «       y	c c}w c c}w )
zB
    Like C lookup, but the first index is optimized instead.
    r   r.  rª   r'  r(  r)  r/  r   Nr0  r*  s          r   r°   r°     s›   € ð 
ˆQ‚wØ�‰ÐDÀtÑKÕLà�y‰y´u¸R´yÓA±y°!˜*¨¨1 vÓ-°yÑAÓBˆØ—‘¼5ÀÀB¼<ÓH¹<°a˜[¨A¨q¨6Ó1¸<ÑHÓIˆØ�‰ÐOÐSWÐY]Ð_eÐghÐRiÑiÕjùò BùÚHs   ³BÁ!Bc                 ó–   — | j                   ry| j                  ry| j                  s| j                  rd}nd}|| j	                  «       z   S )NÚobjectÚptrÚnn_r  )Úis_pyobjectrF   Ú
is_typedefÚis_struct_or_unionÚspecialization_name)rE   r:   s     r   Úmangle_dtype_namer:  '  sI   € ð ×ÒØØ	�ŠØà×Ò˜u×7Ò7Ø‰FàˆFØ˜×1Ñ1Ó3Ñ3Ð3r)   c                 ó€  — t        |«      }d|z  }d|z  }|j                  ry|€|j                  «       }|dk  rJ ‚|| j                  j                  v�rß| j                  j                  j                  |«       | j                  d   }g }|j                  r@|j                  r4|j                  |j                  «       |j                  }|j                  rŒ4|j                  xr |j                  «       }|j                  «       }	|j                  «       rd}�n2|j                  �r#|j                  }
|j                   r|
j"                  }
|
j$                  }t'        |«      dkD  sJ ‚|D �cg c]  }t)        | |j*                  |dz
  «      ‘Œ }}|j-                  d|z  d	¬
«       |j                   r|j.                  j                  «       }n|j                  «       }t1        ||«      D ]9  \  }}|j-                  d|›d|j2                  ›d|›d|j4                  ›d�	d	¬
«       Œ; |j-                  dd	¬
«       |j-                  dd	¬
«       nJ ‚t7        |«      }d}d}|t8        j:                  u rd|	z  }d}nj|j<                  rd|	z  }d|z  }nS|s|j>                  rd}nB|j@                  rd}n3|j                  rd}|jB                  rd}n|jD                  rd}nJ |«       ‚d}||||	djG                  |D �cg c]  }t7        |«      ‘Œ c}«      xs dt'        |«      |||f	}|j-                  ||z  d	¬
«       |S c c}w c c}w )ar  
    Output the run-time type information (__Pyx_TypeInfo) for given dtype,
    and return the name of the type info struct.

    Structs with two floats of the same size are encoded as complex numbers.
    One can separate between complex numbers declared as struct or with native
    encoding by inspecting to see if the fields field of the type is
    filled in.
    z__Pyx_TypeInfo_%sz__Pyx_StructFields_%sz<error>r   ÚtypeinfoÚNULLr   z'static const __Pyx_StructField %s[] = {T)Úsafez  {&z, "z", offsetof(rª   z)},z  {NULL, NULL, 0}z};Ú0z__PYX_IS_UNSIGNED(%s)z'H'z%s ? 'U' : 'I'z'C'z'R'z'S'Ú__PYX_BUF_FLAGS_PACKED_STRUCTz'O'zRstatic const __Pyx_TypeInfo %s = { "%s", %s, sizeof(%s), { %s }, %s, %s, %s, %s };)$r:  Úis_errorrÞ   r±   r²   r³   Úis_arrayr¬   ÚsizeÚ	base_typer8  Úcan_be_complexr´   Úis_simple_buffer_dtypeÚ	is_structr$   Úis_cv_qualifiedÚbase_type_scopeÚvar_entriesr@   rè   r4   rÌ   Úcv_base_typer{   r-   r3   Ústrr   Úc_char_typeÚis_intÚ
is_complexÚis_floatÚpackedr6  r   )rµ   rE   ÚmaxdepthÚ
namesuffixr-   Ústructinfo_nameÚtypecodeÚ
arraysizesÚcomplex_possibleÚdeclcodeÚstruct_scopeÚfieldsÚfÚtypesÚstruct_typer<  ÚreprÅ   Úis_unsignedÚ	typegroupr   Útups                         r   rè   rè   5  s  € ô # 5Ó)€JØ Ñ+€DØ-°
Ñ:€Oà‡~‚~˜ið Ð E×$>Ñ$>Ó$@˜Ø�1‚}Øˆuà�4×#Ñ#×1Ñ1Ò1Ø×Ñ×&Ñ&×*Ñ*¨4Ô0Ø×#Ñ# JÑ/ˆàˆ
Ø�>Š>Ø—.’.Ø×!Ñ! %§*¡*Ô-ØŸ™�ð —.“.ð !×3Ñ3ÒN¸×8LÑ8LÓ8NÐà×/Ñ/Ó1ˆØ×'Ñ'Ô)Ø$ŠOØ�_‹_Ø Ÿ;™;ˆLØ×$Ò$Ø+×;Ñ;�à!×-Ñ-ˆFÜ�v“; ’?Ð"�?á$ó&Ù$˜ô 0°°a·f±f¸hÈ¹lÕKØ$ð ð &à�N‰NÐDÀÑVÐ]aˆNÔbà×$Ò$à#×0Ñ0×GÑGÓI‘à#×:Ñ:Ó<�ä" 6¨5Ö1‘��8Ø—’Ú (¨!¯&«&²+¸q¿w»wð HØNRð õ Tð  2ð �N‰NÐ.°TˆNÔ:Ø�N‰N˜4 dˆNÕ+à�5ä�%‹jˆàˆØˆØ”J×*Ñ*Ñ*Ø1°HÑ<ˆKØ‰IØ�\Š\Ø1°HÑ<ˆKØ(¨;Ñ6‰IÙ ×!1Ò!1Ø‰IØ�^Š^Ø‰IØ�_Š_ØˆIØ�|Š|Ø7‘Ø×ÒØ‰Ià˜%Ó�5ðLˆà�S˜/¨8Ø�y‰y©*Ó5©* Qœ#˜a�&¨*Ñ5Ó6Ò=¸#¼sÀ:»Ø˜+ uð.ˆð 	�‰�x #‘~¨DˆÔ1à€Kùòc&ùòZ 6s   Å*!L6Ë3L;c                 óf   — |€t        j                  | dfi |¤ŽS t        j                  | dfd|i|¤ŽS )NzBuffer.cÚcontext)r   Úloadr   )Úutil_code_namerc  Úkwargss      r   Úload_buffer_utilityrg  ”  s=   € Ø€Ü×Ñ °
ÑE¸fÑEÐEä!×&Ñ& ~°zÑ]È7Ð]ÐV\Ñ]Ð]r)   )Úmax_dimsÚBufferStructDeclare)rc  ÚBufferFormatStructsÚBufferIndexErrorÚBufferIndexErrorNogilÚBufferFallbackErrorÚBufferGetAndValidateÚBufferFormatCheckÚTypeInfoToFormat)r   rÈ   r,   ):ÚVisitorr   r   ÚErrorsr   r   r   ÚCoder   r  r	   r
   r   r   r   r   r   ry   ru   rw   rz   rx   r|   r~   rƒ   r‚   r€   rq   rŠ   rŒ   rÆ   rÊ   rÒ   r×   rá   ræ   rÝ   r	  r  r#   r­   r®   r¯   r°   r:  rè   rg  ÚdictrH   rc  r  Úbuffer_formats_declare_coder  r  rý   rå   Úbuffer_format_check_codeÚ_typeinfo_to_format_coderÀ   r)   r   Ú<module>rx     so  ðÝ $Ý "Ý  Ý *ß 1å Ý Ý Ý Ý óôU ?ô Uðt G€Ø fÀ$ÐPUÑV€Ø"#Ð à6Ð Ø,Ð Ø3€Ø €Øl€Ø4€ØB€Ø'€ó>÷JDñ DòNò %ò
ò&Lò2òlò
1òEòP?AòD5ò ò*\òpò	kò4ó]ó~^ñ ˜×/Ñ/Ô
0€Ù0Ð1FÐPWÔXÐ Ù1Ð2GÓHÐ ñ ,Ð,>Ó?Ð Ù,Ð-DÓEÐ Ù0Ð1FÓGÐ á*Ð+AÈ7ÔSÐ Ù.Ð/BÈGÔTÐ ñ /Ð/AÓBÑ r)   