zmc
2023-12-22 9fdbf60165db0400c2e8e6be2dc6e88138ac719a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
U
O±dÇqã@s(dZddlZddlZddlZddlZddlmZmZmZm    Z    z ddl
Z
Wne k
r`dZ
YnXej j dkZejdkr~dZndZd    d
„Zd d „Zd d„Zdd„Ze d¡Ze d¡Ze d¡ZdeiZdd„ZGdd„dƒZdd„Zde_Gdd„dƒZGdd„dƒZdd „Z d!d"„Z!d#d$„Z"d%d&„Z#d'd(„Z$d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@œZ%dA &e% '¡¡Z(d)d*d+d,dBdCdDdEdDdEdFdGdHd6d7d9d:d<d=d>d?dIœZ)dA &e) '¡¡Z*dJdKdLdMdNœZ+GdOdP„dPƒZ,dQdR„Z-dSdT„Z.dUdV„Z/dWdX„Z0dYdZ„Z1d[d\„Z2d]d^„Z3d_d`„Z4dadb„Z5dcdd„Z6dedf„Z7dS)gzI
A place for internal code
 
Some things are more easily handled Python.
 
éNé)ÚdtypeÚarrayÚndarrayÚ promote_typesÚpypyÚlittleú<ú>c Csög}| ¡D]”\}}t|ƒ}t|tƒr.|dkr6tdƒ‚|dkrL|d|krLq t|dƒ}|dkrhtdƒ‚t|d|d}|dkrŠ|d}nd}| ||||f¡q |jdd    „d
d d „|Dƒ}    d d „|Dƒ}
dd „|Dƒ} dd „|Dƒ} |    |
| | fS)N)éézentry not a 2- or 3- tupler rrzinvalid offset.©ÚaligncSs|dS)Nr ©)ÚxrrúKd:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\numpy/core/_internal.pyÚ<lambda>,óz!_makenames_list.<locals>.<lambda>)ÚkeycSsg|] }|d‘qS©rr©Ú.0rrrrÚ
<listcomp>-sz#_makenames_list.<locals>.<listcomp>cSsg|] }|d‘qS©rrrrrrr.scSsg|] }|d‘qS)r rrrrrr/scSsg|] }|d‘qS)r rrrrrr0s)    ÚitemsÚlenÚ
isinstanceÚtupleÚ
ValueErrorÚintrÚappendÚsort) ÚadictrZ    allfieldsÚfnameÚobjÚnÚnumÚformatÚtitleÚnamesÚformatsÚoffsetsÚtitlesrrrÚ_makenames_lists* 
r-cCs¶z |d}Wntk
r$d}YnX|dkrBt||ƒ\}}}}n`g}g}g}|D]N}||}| |d¡| |d¡t|ƒdkr–| |d¡qR| d¡qRt||||dœ|ƒS)Néÿÿÿÿrrr )r)r*r+r,)ÚKeyErrorr-r rr)r"rr)r*r+r,ÚnameÚresrrrÚ
_usefields7s. 
  ýýr2c s€|j‰ˆdkr`|j}|dkrL|jdkr,|jS|j ¡}|rD|j|fS|jSnt|dƒ|dfS|j}‡fdd„|Dƒ}g}d}|D]Ì}|d|kr¾|d|}| dd|›f¡||7}n|d|krÒtdƒ‚t    |ƒdkrð|d    |df}    n|d    }    |djr(|    t|djdƒ|djdf}
n|    t|dƒf}
||dj
7}| |
¡q„|j
|kr||j
|}| dd|›f¡|S)
Nrrcsg|]}ˆ||f‘qSrrr©Úfieldsrrrhsz _array_descr.<locals>.<listcomp>Úz|VzLdtype.descr is not defined for types with overlapping or out-of-order fieldsr r ) r4ÚsubdtypeÚmetadataÚstrÚcopyÚ _array_descrr)r rrÚitemsize) Z
descriptorr6Únewr)Zordered_fieldsÚresultÚoffsetÚfieldr&r0Útuprr3rr:WsL
 
 
 
 ÿ   ÿ  
r:cCst |||¡S©N)rÚ__new__)ÚsubtypeÚshaperrrrÚ _reconstruct‹srEzw(?P<order1>[<>|=]?)(?P<repeats> *[(]?[ ,0-9]*[)]? *)(?P<order2>[<>|=]?)(?P<dtype>[A-Za-z0-9.?]*(?:\[[a-zA-Z0-9,.]+\])?)z\s*,\s*z\s+$ú=c
    Csld}g}|t|ƒkrhtj||d}z| ¡\}}}}Wn8ttfk
rptdt|ƒd›d|›dƒd‚YnX| ¡}|t|ƒkrÐtj||držt|ƒ}n2t    j||d}|sÈtdt|ƒd|fƒ‚| ¡}|dkrÞ|}nD|dkrì|}n6t
  ||¡}t
  ||¡}||krtd    ||fƒ‚|}|d
d t fkr6d}||}|dkrN|}    n|t  |¡f}    | |    ¡q|S) Nr)Úposzformat number rz of "z" is not recognizedz*format number %d of "%s" is not recognizedr5z/inconsistent byte-order specification %s and %sú|rF)rÚ    format_reÚmatchÚgroupsÚ    TypeErrorÚAttributeErrorrÚendÚspace_reÚsep_reÚ
_convorderÚgetÚ_nboÚastÚ literal_evalr )
ZastrZ
startindexr=ÚmoZorder1ZrepeatsZorder2rÚorderÚnewitemrrrÚ _commastringœsZÿþ 
ÿÿ  
ÿÿ
 rYc@s4eZdZdd„Zdd„Zdd„Zdd„Zd    d
„Zd S) Ú dummy_ctypecCs
||_dSrA©Ú_cls)ÚselfÚclsrrrÚ__init__Íszdummy_ctype.__init__cCs|SrAr©r]ÚotherrrrÚ__mul__Ïszdummy_ctype.__mul__cGs
| |¡SrAr[r`rrrÚ__call__Ñszdummy_ctype.__call__cCs |j|jkSrAr[r`rrrÚ__eq__Ószdummy_ctype.__eq__cCs |j|jkSrAr[r`rrrÚ__ne__Õszdummy_ctype.__ne__N)Ú__name__Ú
__module__Ú __qualname__r_rbrcrdrerrrrrZÌs
rZcCsxtj}|dk    r|Stdkr.ddl}t|jƒ}n@tdƒj}|dkrHtj}n&|dkrXtj    }n|dkrhtj
}ntj    }|t_|S)NrÚpÚiÚlÚq) Ú_getintp_ctypeÚcacheÚctypesÚnumpyrZZintprÚcharÚc_intÚc_longÚ
c_longlong)ÚvalÚnprqrrrrmØs  
rmc@s"eZdZdd„ZGdd„dƒZdS)Ú_missing_ctypescCs|jSrA©Úvalue)r]r&r$rrrÚcastðsz_missing_ctypes.castc@seZdZdd„ZdS)z_missing_ctypes.c_void_pcCs
||_dSrArx)r]Úptrrrrr_ôsz!_missing_ctypes.c_void_p.__init__N)rfrgrhr_rrrrÚc_void_pósr|N)rfrgrhrzr|rrrrrwïsrwc@s~eZdZddd„Zdd„Zdd„Zdd    „Zed
d „ƒZed d „ƒZ    edd„ƒZ
edd„ƒZ dd„Z dd„Z dd„Zdd„ZdS)Ú_ctypesNcCs\||_tr t|_|j |¡|_ntƒ|_|j |¡|_||j_|jjdkrRd|_nd|_dS)NrTF)    Ú_arrror}r|Ú_datarwÚ_objectsÚndimÚ_zerod)r]rr{rrrr_ùs z_ctypes.__init__cCs|j |j|¡}|j|_|S)aœ
        Return the data pointer cast to a particular c-types object.
        For example, calling ``self._as_parameter_`` is equivalent to
        ``self.data_as(ctypes.c_void_p)``. Perhaps you want to use the data as a
        pointer to a ctypes array of floating-point data:
        ``self.data_as(ctypes.POINTER(ctypes.c_double))``.
 
        The returned pointer will keep a reference to the array.
        )r}rzrr~)r]r$r{rrrÚdata_as
sz_ctypes.data_ascCs|jr
dS||jj|jjŽS)zˆ
        Return the shape tuple as an array of some other c-types
        type. For example: ``self.shape_as(ctypes.c_short)``.
        N)r‚r~rrD©r]r$rrrÚshape_assz_ctypes.shape_ascCs|jr
dS||jj|jjŽS)z
        Return the strides tuple as an array of some other
        c-types type. For example: ``self.strides_as(ctypes.c_longlong)``.
        N)r‚r~rÚstridesr„rrrÚ
strides_as&sz_ctypes.strides_ascCs|jjS)a
        A pointer to the memory area of the array as a Python integer.
        This memory area may contain data that is not aligned, or not in correct
        byte-order. The memory area may not even be writeable. The array
        flags and data-type of this array should be respected when passing this
        attribute to arbitrary C-code to avoid trouble that can include Python
        crashing. User Beware! The value of this attribute is exactly the same
        as ``self._array_interface_['data'][0]``.
 
        Note that unlike ``data_as``, a reference will not be kept to the array:
        code like ``ctypes.c_void_p((a + b).ctypes.data)`` will result in a
        pointer to a deallocated array, and should be spelt
        ``(a + b).ctypes.data_as(ctypes.c_void_p)``
        )rry©r]rrrÚdata/sz _ctypes.datacCs | tƒ¡S)aŽ
        (c_intp*self.ndim): A ctypes array of length self.ndim where
        the basetype is the C-integer corresponding to ``dtype('p')`` on this
        platform (see `~numpy.ctypeslib.c_intp`). This base-type could be
        `ctypes.c_int`, `ctypes.c_long`, or `ctypes.c_longlong` depending on
        the platform. The ctypes array contains the shape of
        the underlying array.
        )r…rmrˆrrrrDAs
z _ctypes.shapecCs | tƒ¡S)aj
        (c_intp*self.ndim): A ctypes array of length self.ndim where
        the basetype is the same as for the shape attribute. This ctypes array
        contains the strides information from the underlying array. This strides
        information is important for showing how many bytes must be jumped to
        get to the next element in the array.
        )r‡rmrˆrrrr†Ms    z_ctypes.stridescCs | tj¡S)ze
        Overrides the ctypes semi-magic method
 
        Enables `c_func(some_array.ctypes)`
        )rƒror|rˆrrrÚ_as_parameter_Xsz_ctypes._as_parameter_cCstjdtdd|jS)zYDeprecated getter for the `_ctypes.data` property.
 
        .. deprecated:: 1.21
        z,"get_data" is deprecated. Use "data" insteadr ©Ú
stacklevel)ÚwarningsÚwarnÚDeprecationWarningr‰rˆrrrÚget_datacs
ÿz_ctypes.get_datacCstjdtdd|jS)zZDeprecated getter for the `_ctypes.shape` property.
 
        .. deprecated:: 1.21
        z."get_shape" is deprecated. Use "shape" insteadr r‹)rrŽrrDrˆrrrÚ    get_shapels
ÿz_ctypes.get_shapecCstjdtdd|jS)z\Deprecated getter for the `_ctypes.strides` property.
 
        .. deprecated:: 1.21
        z2"get_strides" is deprecated. Use "strides" insteadr r‹)rrŽrr†rˆrrrÚ get_stridesus
ÿz_ctypes.get_stridescCstjdtdd|jS)zcDeprecated getter for the `_ctypes._as_parameter_` property.
 
        .. deprecated:: 1.21
        z>"get_as_parameter" is deprecated. Use "_as_parameter_" insteadr r‹)rrŽrrŠrˆrrrÚget_as_parameter~s þz_ctypes.get_as_parameter)N)rfrgrhr_rƒr…r‡Úpropertyr‰rDr†rŠrr‘r’r“rrrrr}øs 
        
 
 
 
 
 
            r}c    Cs¶|j}t|ƒ}t|tƒr|g}tƒ}t|ttfƒr¤|D]\}z| |¡Wn>tk
r†||krrtd|›ƒd‚ntd|›ƒd‚YnX| |¡q6tt|ƒ|ƒStd|›ƒ‚dS)zf
    Given a datatype and an order object, return a new names tuple, with the
    order indicated
    zduplicate field name: Nzunknown field name: zunsupported order value: )    r)Úlistrr8ÚsetrÚremoverÚadd)ÚdatatyperWZoldnamesZ    nameslistÚseenr0rrrÚ    _newnamesŠs 
 r›cs0|j‰ˆj‡fdd„ˆjDƒdœ}t||ddS)aReturn copy of structured array with padding between fields removed.
 
    Parameters
    ----------
    ary : ndarray
       Structured array from which to remove padding bytes
 
    Returns
    -------
    ary_copy : ndarray
       Copy of ary with padding bytes removed
    csg|]}ˆj|d‘qSrr3©rr0©Údtrrr°sz _copy_fields.<locals>.<listcomp>)r)r*T)rr9)rr)r)ZaryZ
copy_dtyperrrÚ _copy_fields¡s
ÿrŸc    Cs(|jdks |jdks |j|jkr(tdƒ‚||k}g}|jD]Œ}|j|}|j|}t|d|dƒ}|or||dk}|dd…|dd…kr”tdƒ‚t|ƒdkr°| ||f¡q:| |d|f|f¡q:t||jpÖ|jd}|r$|j|jkr$|jD](}|j|d|j|dkrö|Sqö|S|S)a“ Perform type promotion for two structured dtypes.
 
    Parameters
    ----------
    dt1 : structured dtype
        First dtype.
    dt2 : structured dtype
        Second dtype.
 
    Returns
    -------
    out : dtype
        The promoted dtype
 
    Notes
    -----
    If one of the inputs is aligned, the result will be.  The titles of
    both descriptors must match (point to the same field).
    Nzinvalid type promotionrr r r)    r)rLr4rrr rZisalignedstructr;)    Zdt1Zdt2Z    identicalÚ
new_fieldsr0Zfield1Zfield2Z    new_descrr1rrrÚ_promote_fields³s* 
 
 
 
 
r¡cCsl|js |jrh|dkr ||kr dS|jdk    r`|jD].}|j|d|kr0|j|d|kr0dSq0tdƒ‚dS)a Checks safety of getfield for object arrays.
 
    As in _view_is_safe, we need to check that memory containing objects is not
    reinterpreted as a non-object datatype and vice versa.
 
    Parameters
    ----------
    oldtype : data-type
        Data type of the original ndarray.
    newtype : data-type
        Data type of the field being accessed by ndarray.getfield
    offset : int
        Offset of the field being accessed by ndarray.getfield
 
    Raises
    ------
    TypeError
        If the field access is invalid
 
    rNrz'Cannot get/set field of an object array)Ú    hasobjectr)r4rL)ÚoldtypeÚnewtyper>r0rrrÚ_getfield_is_safeês 
 
ÿr¥cCs$||kr dS|js|jr tdƒ‚dS)az Checks safety of a view involving object arrays, for example when
    doing::
 
        np.zeros(10, dtype=oldtype).view(newtype)
 
    Parameters
    ----------
    oldtype : data-type
        Data type of original ndarray
    newtype : data-type
        Data type of the view
 
    Raises
    ------
    TypeError
        If the new type is incompatible with the old type.
 
    Nz)Cannot change data-type for object array.)r¢rL)r£r¤rrrÚ _view_is_safe
s
 r¦ú?ZS1ÚbÚBÚhÚHrjÚIrkÚLrlÚQÚeÚfÚdÚgÚFÚDÚGÚSÚUÚOÚV)r§Úcr¨r©rªr«rjr¬rkr­rlr®r¯r°r±r²ÚZfÚZdZZgÚsÚwr¸rr5Úi2Úu2Úi4Zu4Úi8Úu8Úf2)r§rºr¨r©rªr«rjr¬rkr­rlr®r¯r°r±r»r¼r½r¾r¸rz UCS-2 stringsZpointersZ    bitfieldszfunction pointers)Úuú&ÚtÚXc@s@eZdZdd„Zdd„Zdd„Zdd„Zed    d
„ƒZd d „Z    d S)Ú_StreamcCs||_d|_dS)Nú@)r½Ú    byteorder)r]r½rrrr_fsz_Stream.__init__cCs"|jd|…}|j|d…|_|SrA©r½)r]r%r1rrrÚadvancejsz_Stream.advancecCs,|jdt|ƒ…|kr(| t|ƒ¡dSdS)NTF)r½rrÍ)r]rºrrrÚconsumeosz_Stream.consumecCsht|ƒr<d}|t|jƒkr2||j|ƒs2|d}q | |¡S|j |¡}| |¡}| t|ƒ¡|SdS)Nrr)Úcallablerr½rÍÚindex)r]rºrjr1rrrÚ consume_untilus
 
 
z_Stream.consume_untilcCs
|jdS)NrrÌrˆrrrÚnextsz _Stream.nextcCs
t|jƒSrA)Úboolr½rˆrrrÚ__bool__…sz_Stream.__bool__N)
rfrgrhr_rÍrÎrÑr”rÒrÔrrrrrÉes 
rÉcCst|ƒ}t|dd\}}|S)NF©Ú is_subdtype)rÉÚ__dtype_from_pep3118)ÚspecÚstreamrrrrrÚ_dtype_from_pep3118‰srÚcCsdtgggdd}d}d}d}|rÜd}| d¡r4qÜd}| d¡r`| d¡}ttt| d¡ƒƒ}|jd    kr†| d¡}|d
kr€d }||_    |j    d kršt
}    t }
nt }    t }
| d d„¡} | r¾t| ƒ} nd} d}| d¡rât|dd\}} nº|j|
krd|jdkr| d¡}n
| d¡}|dk}|    |}|dkr:|d| 7}d} ddd œ |j    |j    ¡}t||ƒ}|j} n8|jtkrŽt|j}td |j|¡ƒ‚ntd|jƒ‚d}|j    dkr| | }|j | }||7}|dkr
| dksö|dk    rt|ƒdkrt||ƒ}n||7}t| |ƒ}| dkr,t|| ffƒ}|dk    rBt||fƒ}| d¡rZ| d¡}nd}|rn|dksÀ|dk    r–||dkr–td|›dƒ‚|d |¡|d |¡|d  |¡||j7}||7}||d!<q|j    dkrþ|d!| |7<|ddgkrL|d ddkrL|d!|ddjkrL|sL|dd}nt|ƒt|ƒ}||fS)"Nr©r)r*r+r;rFÚ}ú(ú)ú,)rÊrFr    r
ú^ú!rár
)rÊràcSs
| ¡ SrA)Úisdigit)rºrrrr·rz&__dtype_from_pep3118.<locals>.<lambda>zT{TrÕÚZr rZUSVz%drFz,Unrepresentable PEP 3118 data type {!r} ({})z'Unknown PEP 3118 data type specifier %rrÊú:r)zDuplicate field name 'z' in PEP3118 formatr*r+r;)ÚdictrÎrÑrÚmaprÚsplitrÒrÍrËÚ_pep3118_native_mapÚ_pep3118_native_typecharsÚ_pep3118_standard_mapÚ_pep3118_standard_typecharsr×rRrÚ    alignmentÚ_pep3118_unsupported_mapÚNotImplementedErrorr'rr½r;Ú_prodÚ_add_trailing_paddingÚ_lcmÚ RuntimeErrorr Ú
_fix_names)rÙrÖÚ
field_specr>Zcommon_alignmentZ
is_paddingryrDrËZtype_mapZtype_map_charsZ itemsize_strr;rZtypecharZ    dtypecharZnumpy_byteorderÚdescZ extra_offsetZ start_paddingZ intra_paddingr0Úretrrrr׎sÈü
 
 
 
 
 
 
 
ÿ    
 
 
ÿ  
ÿÿ 
 
" 
 
 
 
 
 ÿþýr×cCsR|d}t|ƒD]<\}}|dk    r"qd}d|›}||kr:qD|d}q&|||<qdS)z< Replace names which are None with the next unused f%d name r)Nrr°r)Ú    enumerate)rôr)rjr0Újrrrrós
 
rócsv|jdkr$tdg|gdg|jd}n:|j‰|j}t|‡fdd„|Dƒ‡fdd„|Dƒ|jd}|d|7<t|ƒS)    zBInject the specified number of padding bytes at the end of a dtypeNZf0rrÛcsg|]}ˆ|d‘qSrrrœr3rrr;sz)_add_trailing_padding.<locals>.<listcomp>csg|]}ˆ|d‘qSrrrœr3rrr<sr;)r4rår;r)r)ryÚpaddingrôr)rr3rrð-s"
üürðcCsd}|D] }||9}q|S)Nrr)ÚarirrrrrïCs
rïcCs|r|||}}q|S)z0Calculate the greatest common divisor of a and br©rúr¨rrrÚ_gcdIsrücCs|t||ƒ|SrA)rürûrrrrñOsrñcOsZd dd„|Dƒdd„| ¡Dƒ¡}|| dd¡}d dd„|Dƒ¡}d     ||||¡S)
ú= Format the error message for when __array_ufunc__ gives up. ú, cSsg|]}d |¡‘qS)z{!r}©r'©rÚargrrrrTsz0array_ufunc_errmsg_formatter.<locals>.<listcomp>cSsg|]\}}d ||¡‘qS)z{}={!r}rÿ)rÚkÚvrrrrUsÿÚoutrcss|]}tt|ƒjƒVqdSrA)ÚreprÚtyperfrrrrÚ    <genexpr>Xsz/array_ufunc_errmsg_formatter.<locals>.<genexpr>zToperand type(s) all returned NotImplemented from __array_ufunc__({!r}, {!r}, {}): {})ÚjoinrrRr')ÚdummyÚufuncÚmethodÚinputsÚkwargsZ args_stringÚargsZ types_stringrrrÚarray_ufunc_errmsg_formatterRsÿÿþrcCs d |j|j¡}d |t|ƒ¡S)rýz{}.{}zOno implementation found for '{}' on types that implement __array_function__: {})r'rgrfr•)Z
public_apiÚtypesÚ    func_namerrrÚarray_function_errmsg_formatter^s
ÿrcCs°|jdkrd}nd dd„t|jƒDƒ¡}|jdkr:d}n>|jdkrJd}n.d    jd d
d„t|jƒDƒ¡td |jƒd }d }|jdkr”d|›d}n|d7}dj|j|||dS)zz
    Builds a signature string which resembles PEP 457
 
    This is used to construct the first line of the docstring
    rrrþcss|]}d|d›VqdS)rrNr©rrjrrrrpsz1_ufunc_doc_signature_formatter.<locals>.<genexpr>rz , /, out=()z , /, out=Nonez%[, {positional}], / [, out={default}]css|]}d |d¡VqdS)zout{}rNrÿrrrrrysrA)Ú
positionalÚdefaultz8, casting='same_kind', order='K', dtype=None, subok=TrueNz , where=Truez[, signature, extobj]z![, signature, extobj, axes, axis]z&{name}({in_args}{out_args}, *{kwargs}))r0Úin_argsÚout_argsr )ZninrÚrangeZnoutr'rÚ    signaturerf)r
rrr rrrÚ_ufunc_doc_signature_formatteres0
 
 
 
ÿ ýÿ
ürcCsBz&tr|jd}n
|jd}d|jkWStk
r<YdSXdS)Néýÿÿÿéþÿÿÿr}F)ÚIS_PYPYÚ__mro__rgÚ    Exception)r^Z
ctype_baserrrÚnpy_ctypes_check•s 
 r )8Ú__doc__rTÚreÚsysrZ
multiarrayrrrrroÚ ImportErrorÚimplementationr0rrËrSr-r2r:rEÚcompilerIrPrOrQrYrZrmrnrwr}r›rŸr¡r¥r¦rèrÚkeysrérêrërírÉrÚr×rórðrïrürñrrrr rrrrÚ<module>sÆ 
 
 4
 
 
0     7 !éëü$ 0