Coverage for cuda/core/_memory/_buffer.pyx: 76.11%
314 statements
« prev ^ index » next coverage.py v7.16.2, created at 2026-10-16 01:23 +0000
« prev ^ index » next coverage.py v7.16.2, created at 2026-10-16 01:23 +0000
1# SPDX-FileCopyrightText: Copyright (c) 2024-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
2#
3# SPDX-License-Identifier: Apache-2.0
5from __future__ import annotations
7cimport cython
8from libc.stdint cimport uintptr_t
9from libcpp.atomic cimport memory_order_acquire, memory_order_release
11from cuda.bindings cimport cydriver
12from cuda.core._memory._device_memory_resource import DeviceMemoryResource
13from cuda.core._memory._pinned_memory_resource import PinnedMemoryResource
14from cuda.core._memory._ipc cimport IPCBufferDescriptor, IPCDataForBuffer
15from cuda.core._memory cimport _ipc
16from cuda.core._rt cimport (
17 DevicePtrHandle,
18 StreamHandle,
19 ContextHandle,
20 deviceptr_create_with_owner,
21 deviceptr_create_with_mr,
22 register_mr_dealloc_callback,
23 live_owned_mempool_count,
24 live_va_reservation_count,
25 as_intptr,
26 as_cu,
27 get_current_context,
28 set_deallocation_stream,
29)
30from cuda.core.typing import DevicePointerType
32from cuda.core._memory._copy_attributes cimport _with_attributes_available
33from cuda.core._memory._copy_attributes cimport _to_cu_memcpy_attributes # no-cython-lint
35from cuda.core._stream cimport Stream, Stream_accept, Stream_is_legacy_default_token, default_stream
36from cuda.core._utils.cuda_utils cimport HANDLE_RETURN, _parse_fill_value
39# Process-wide counts of live *owned* driver resources, read by the test suite.
40# Counting lives in the C++ RAII layer (owned CUmemoryPool and VA reservations),
41# so borrowed pool references and MemoryResource subclasses that hold no pool or
42# reservation are excluded. conftest.py reads these to gate the per-test collect.
43def _live_owned_mempool_count() -> int:
44 return live_owned_mempool_count() 2IjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfkgkhkikjkkklkmknkokpkqkrksktkukvkwkxkykzkAkBkCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,k-k.k/k:k;k=k?k@k[k]k^k_k`k{k|k}k~kalblcldlelflglhliljlklllmlnlolplqlrlsltlulvlwlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGmHmImJmKmLmMmNmOmPmQmRmSmTmUmVmWmXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCoDoEoFoGoHoIoJoKoLoMoNoOoPoQoRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*xyfvizfwiAfxi+x,x-x.xBfyiCfzi/x:xDfAiEfBiFfCiGfDi;x=xHfEiIfFi?x@x[x]x^x_x`x{xJfGiKfHiLfIiMfJiNfKiOfLiPfMiQfNiRfOiSfPiTfQiUfRi|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y~f9iag!ibg#icg$idg%ieg'i^y_y`y{yfg(i0i|i|y}ygg)i1i}ihg*iig+i2i~i~yazjg,i3iajbzczkg-ilg.idzezfzgzhzizjzkzlzmznzozpzqzrzszU@tzuzV@vzwzW@xzyzX@zzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0z1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z:z;z=z?z@z[z]z^z_z`z{z|z}z~zaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!A#A$A%A'A(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBdBeBfBgBhBiBjBkBlBmBnBoBpBqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCMCNCOCPCQCRCSCTCUCVCWCXCYCZC0C1C2C3C4C5C6C7C8C9C!C#C$C%C'C(C)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuDvDwDxDyDzDADBDCDDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfFgFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFAFBFCFDFEFFFGFHFIFJFKFLFMFNFOFPFQFRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F9F!F#F$F%F'F(F)F*F+F,F-F.F/F:F;F=F?F@F[F]F^F_F`F{F|F}F~FaGbGcGdGeGfGgGhGiGjGkGlGmGnGoGpGqGrGsGtGuGvGwGxGyGzGAGBGCGDGEGFGGGHGIGJGKGLGMGNGOGPGQGRGSGTGUGVGWGXGYGZG0G1G2G3G4G5G6G7G8G9G!G#G$G%G'G(G)G*G+G,G-G.G/G:G;G=G?G@G[G]G^G_G`G{G|G}G~GaHbHcHdHeHfHgHhHiHjHkHlHmHnHoHpHqHrHsHtHuHvHwHxHyHzHAHBHCHDHEHFHGHHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H$H%H'H(H)H*H+H,H-H.H/H:H;H=H?H@H[H]H^H_H`H{H|H}H~HaIbIcIdIeIfIgIhIiIjIkIlImInIoIpIqIrIsItIuIvIwIxIyIzIAIBICIDIEIFIGIHIIIJIKILIMINIOIPIQIRISITIUIVIWIXIYIZI0I1I2I3I4I5I6I7I8I9I!I#I$I%I'I(I)I*I+I,I-I.I/I:I;I=I?I@I[I]I^I_I`I{I|I}I~IaJbJcJdJeJfJgJhJiJjJkJlJmJnJoJpJqJrJsJtJuJvJwJxJyJzJAJBJCJDJEJFJGJHJIJJJKJLJMJNJOJPJQJRJSJTJUJVJWJXJYJZJ0J1J2J3J4J5J6J7J8J9J!J#J$J%J'J(J)J*J+J,J-J.J/J:J;J=J?J@J[J]J^J_J`J{J|J}J~JaKbKcKdKeKfKgKhKiKjKkKlKmKnKoKpKqKrKsKtKuKvKwKxKyKzKAKBKCKDKEKFKGKHKIKJKKKLKMKNKOKPKQKRKSKTKUKVKWKXKYKZK0K1K2K3K4K5K6K7K8K9K!K#K$K%K'K(K)K*K+K,K-K.K/K:K;K=K?K@K[K]K^K_K`K{K|K}K~KaLbLcLdLeLfLgLhLiLjLkLlLmLnLoLpLqLrLsLtLuLvLwLxLyLzLALBLCLDLELFLGLHLILJLKLLLMLNLOLPLQLRLSLTLULVLWLXLYLZL0L1L2L3L4L5L6L7L8L9L!L#L$L%L'L(L)L*L+L,L-L.L/L:L;L=L?L@L[L]L^L_L`L{L|L}L~LaMbMcMdMeMfMgMhMiMjMkMlMmMnMoMpMqMrMsMtMuMvMwMxMyMzMAMBMCMDMEMFMGMHMIMJMKMLMMMNMOMPMQMRMSMTMUMVMWMXMYMZM0M1M2M3M4M5M6M7M8M9M!M#M$M%M'M(M)M*M+M,M-M.M/M:M;M=M?M@M[M]M^M_M`M{M|M}M~MaNbNcNdNeNfNgNhNiNjNkNlNmNnNoNpNqNrNsNtNuNvNwNxNyNzNANBNCNDNENFNGNHNINJNKNLNMNNNONPNQNRNSNTNUNVNWNXNYNZN0N1N2N3N4N5N6N7N8N9N!N#N$N%N'N(N)N*N+N,N-N.N/N:N;N=N?N@N[N]N^N_N`N{N|N}N~NaObOcOdOeOfOgOhOiOjOkOlOmOnOoOpOqOrOsOtOuOvOwOxOyOzOAOBOCODOEOFOGOHOIOJOKOLOMONOOOPOQOROSOTOUOVOWOXOYOZO0O1O2O3O4O5O6O7O8O9O!O#O$O%O'O(O)O*O+O,O-O.O/O:O;O=O?O@O[O]O^O_O`O{O|O}O~OaPbPcPdPePfPgPhPiPjPkPlPmPnPoPpPqPrPsPtPuPvPwPxPyPzPAPBPCPDPEPFPGPHPIPJPKPLPMPNPOPPPQPRPSPTPUPVPWPXPYPZP0P1P2P3P4P5P6P7P8P9P!P#P$P%P'P(P)P*P+P,P-P.P/P:P;P=P?P@P[P]P^P_P`P{P|P}P~PaQbQcQdQeQfQgQhQiQjQkQlQmQnQoQpQqQrQsQtQuQvQwQxQyQzQAQBQCQDQEQFQGQHQIQJQKQLQMQNQOQPQQQRQSQTQUQVQWQXQYQZQ0Q1Q2Q3Q4Q5Q6Q7Q8Q9Q!Q#Q$Q%Q'Q(Q)Q*Q+Q,Q-Q.Q/Q:Q;Q=Q?Q@Q[Q]Q^Q_Q`Q{Q|Q}Q~QaRbRcRdReRfRgRhRiRjRkRlRmRnRoRpRqRrRsRtRuRvRwRxRyRzRARBRCRDRERFRGRHRIRJRKRLRMRNRORPRQRRRSRTRURVRWRXRYRZR0R1R2R3R4R5R6R7R8R9R!R#R$R%R'R(R)R*R+R,R-R.R/R:R;R=R?R@R[R]R^R_R`R{R|R}R~RaSbScSdSeSfSgShSiSjSkSlSmSnSoSpSqSrSsStSuSvSwSxSySzSASBSCSDSESFSGSHSISJSKSLSMSNSOSPSQSRSSSTSUSVSWSXSYSZS0S1S2S3S4S5S6S7S8S9S!S#S$S%S'S(S)S*S+S,S-S.S/S:S;S=S?S@S[S]S^S_S`S{S|S}S~SaTbTcTdTeTfTgThTiTjTkTlTmTnToTpTqTrTsTtTuTvTwTxTyTzTATBTCTDTETFTGTHTITJTKTLTMTNTOTPTQTRTSTTTUTVTWTXTYTZT0T1T2T3T4T5T6T7T8T9T!T#T$T%T'T(T)T*T+T,T-T.T/T:T;T=T?T@T[T]T^T_T`T{T|T}T~TaUbUcUdUeUfUgUhUiUjUkUlUmUnUoUpUqUrUsUtUuUvUwUxUyUzUAUBUCUDUEUFUGUHUIUJUKULUMUNUOUPUQURUSUTUUUVUWUXUYUZU0U1U2U3U4U5U6U7U8U9U!U#U$U%U'U(U)U*U+U,U-U.U/U:U;U=U?U@U[U]U^U_U`U{U|U}U~UaVbVcVdVeVfVgVhViVjVkVlVmVnVoVpVqVrVsVtVuVvVwVxVyVzVAVBVCVDVEVFVGVHVIVJVKVLVMVNVOVPVQVRVSVTVUVVVWVXVYVZV0V1V2V3V4V5V6V7V8V9V!V#V$V%V'V(V)V*V+V,V-V.V/V:V;V=V?V@V[V]V^V_V`V{V|V}V~VaWbWcWdWeWfWgWhWiWjWkWlWmWnWoWpWqWrWsWtWuWvWwWxWyWzWAWBWCWDWEWFWGWHWIWJWKWLWMWNWOWPWQWRWSWTWUWVWWWXWYWZW0W1W2W3W4W5W6W7W8W9W!W#W$W%W'W(W)W*W+W,W-W.W/W:W;W=W?W@W[W]W^W_W`W{W|W}W~WaXbXcXdXeXfXgXhXiXjXkXlXmXnXoXpXqXrXsXtXuXvXwXxXyXzXAXBXCXDXEXFXGXHXIXJXKXLXMXNXOXPXQXRXSXTXUXVXWXXXYXZX0X1X2X3X4X5X6X7X8X9X!X#X$X%X'X(X)X*X+X,X-X.X/X:X;X=X?X@X[X]X^X_X`X{X|X}X~XaYbYcYdYeYfYgYhYiYjYkYlYmYnYoYpYqYrYsYtYuYvYwYxYyYzYAYBYCYDYEYFYGYHYIYJYKYLYMYNYOYPYQYRYSYTYUYVYWYXYYYZY0Y1Y2Y3Y4Y5Y6Y7Y8Y9Y!Y#Y$Y%Y'Y(Y)Y*Y+Y,Y-Y.Y/Y:Y;Y=Y?Y@Y[Y]Y^Y_Y`Y{Y|Y}Y~YaZbZcZdZeZfZgZhZiZjZkZlZmZnZoZpZqZrZsZtZuZvZwZxZyZzZAZBZCZDZEZFZGZHZIZJZKZLZMZNZVfOZPZQZRZSZTZUZVZWZWfnjXZYZZZ0Z1Z2Z3Z4Z5Z6Z7Z8Z9Z!Z#Z$Z%Z'Z(Z)Z*Z+Z,Z-Z.Z/Z:Z;Z=Z?Z@Z[Z]Z^Z_Z`Z{Z|Z}Z~Za0b0c0d0e0Xfojf0g0h0i0j0k0l0m0Yfpjn0o0p0q0r0s0t0u0v0w0x0y0z0A0B0C0D0E0F0G0H0I0J0K0L0M0N0O0P0Q0R0S0T0U0V0W0X0Y0Z00010203040506070Zfqj8090!0#0$0%0'0(0)0*0+0,0-0.0/0:0;0=0?0@0[0]0^0_0`0{0|0}0~0a1b1c1d1e1f1g1h1i1j1k1l1m1n1o1p10fq1r1s1t1u11fv12fw1x1y1z1A1B1C1D1E1F1G13frjH1I1J1K1L1M1N1O1P1Q1R1S1T1U1V1W1X1Y1Z101112131415161718191!1#1$1%1'1(1)1*1+1,1-1.1/1:1;1=1?1@1[1]1^1_1`1{1|1}1~1a24fsjb2c2d2e2f2g2h2i2j2k2l2m2n2o2p2q2r2s2t2u2v2w2x2y2z2A2B2C2D2E2F2G2H2I2J2K2L2M2N2O2P2Q2R2S2T2U2V25ftjW2X2Y2Z202122232425262728292!2#2$2%2'2(2)2*2+2,2-2.2/2:2;2=2?2@2[2]2^2_2`2{2|2}2~2a3b3c3d3e3f36fujg3h3i3j3k3l3m3n3o3p3q3r3s3t3u3v3w3x3y3z3A3B3C3D3E3F3G3H3I3J3K3L3M3N3O3P3Q3R3S3T3U3V3W3X3Y3Z3037fvj132333435363738393!3#3$3%3'3(3)3*3+3,3-3.3/3:3;3=3?3@3[3]3^3_3`3{3|3}3~3a4b4c4d4e4f4g4h4i4j4k48fwjl4m4n4o4p4q4r4s4t4u4v4w4x4y4z4A4B4C4D4E4F4G4H4I4J4K4L4M4N4O4P4Q4R4S4T4U4V4W4X4Y4Z40414243444549fxj64748494!4#4$4%4'4(4)4*4+4,4-4.4/4:4;4=4?4@4[4]4^4_4`4{4|4}4~4a5b5c5d5e5f5g5h5i5j5k5l5m5n5o5p5q5r5!fyjs5t5u5v5w5x5y5z5A5B5C5D5E5F5G5H5I5J5K5L5M5N5O5P5Q5R5S5T5U5V5W5X5Y5Z505152535455565758595!5#5$5%5'5(5)5*5+5,5-5.5/5:5;5=5?5@5[5]5^5_5`5{5|5}5~5a6b6c6d6e6f6g6h6i6j6k6l6m6n6o6p6q6r6s6t6u6v6w6x6y6z6A6B6C6D6E6F6G6H6I6J6K6L6M6N6O6P6Q6R6S6T6U6V6W6X6Y6Z606162636465666768696!6#6$6%6'6(6)6*6+6,6-6.6/6:6;6=6?6@6[6]6^6_6`6{6|6}6~6a7b7c7d7e7f7g7h7i7j7k7l7m7n7o7p7q7r7s7t7u7v7w7x7y7z7A7B7C7D7E7F7G7H7I7J7K7L7M7N7O7P7Q7R7S7T7U7V7W7X7Y7Z707172737475767778797!7#7$7%7'7(7)7*7+7,7-7.7/7:7;7=7?7@7[7]7^7_7`7{7|7}7~7a8b8c8d8e8f8g8h8i8j8k8l8m8n8o8p8q8r8s8t8u8v8w8x8y8z8A8B8C8D8E8F8G8H8I8J8K8L8M8N8O8P8Q8R8S8T8U8V8W8X8Y8Z808182838485868788898!8#8$8%8'8(8)8*8+8,8-8.8/8:8;8=8?8@8[8]8^8_8`8{8|8}8~8a9b9c9d9e9f9g9h9i9j9k9l9m9n9o9p9q9r9s9t9u9v9w9x9y9z9A9B9C9D9E9F9G9H9I9J9K9L9M9N9O9P9Q9R9S9T9U9V9W9X9Y9Z909192939495969798999!9#9$9%9'9(9)9*9+9,9-9.9/9:9;9=9?9@9[9]9^9_9`9{9|9}9~9a!b!c!d!e!f!g!h!i!j!k!l!m!n!o!p!q!r!s!t!u!v!w!x!y!z!A!B!C!D!E!F!G!H!I!J!K!L!M!N!O!P!Q!R!S!T!U!V!W!X!Y!Z!0!1!2!3!4!5!6!7!8!9!!!#!$!%!'!(!)!*!+!,!-!.!/!:!;!=!?!@![!]!^!_!`!{!|!}!~!a#b#c#d#e#f#g#h#i#j#k#l#m#n#o#p#q#r#s#t#u#v#w#x#y#z#A#B#C#D#E#F#G#H#I#J#K#L#M#N#O#P#Q#R#S#T#U#V#W#X#Y#Z#0#1#2#3#4#5#6#7#8#9#!###$#%#'#(#)#*#+#,#-#.#/#:#;#=#?#@#[#]#^#_#`#{#|#}#~#a$b$c$d$e$f$g$h$i$j$k$l$m$n$o$p$q$r$s$t$u$v$w$x$y$z$A$B$C$D$E$F$G$H$I$J$K$L$M$N$O$P$Q$R$S$T$U$V$W$X$Y$Z$0$1$2$3$4$5$6$7$8$9$!$#$$$%$'$($)$*$+$,$-$.$/$:$;$=$?$@$[$]$^$_$`${$|$}$~$a%b%c%d%e%f%g%h%i%j%k%l%m%n%o%p%q%r%s%t%u%v%w%x%y%z%A%B%C%D%E%F%G%H%I%J%K%L%M%N%O%P%Q%R%S%T%U%V%W%X%Y%Z%0%1%2%3%4%5%6%7%8%9%!%#%$%%%'%(%)%*%+%,%-%.%/%:%;%=%?%@%[%]%^%_%`%{%|%}%~%a'b'c'd'e'f'g'h'i'j'k'l'm'n'o'p'q'r's't'u'v'w'x'y'z'A'B'C'D'E'F'G'H'I'J'K'L'M'N'O'P'Q'R'S'T'U'V'W'X'Y'Z'0'1'2'3'4'5'6'7'8'9'!'#'$'%'''(')'*'+','-'.'/':';'='?'@'[']'^'_'`'{'|'}'~'a(b(c(d(e(f(g(h(i(j(k(l(m(n(o(p(q(r(s(t(u(v(w(x(y(z(A(B(C(D(E(F(G(H(I(J(K(L(M(N(O(P(Q(R(S(T(U(V(W(X(Y(Z(0(1(2(3(4(5(6(7(8(9(!(#($(%('((()(*(+(,(-(.(/(:(;(=(?(@([(](^(_(`({(|(}(~(a)b)c)d)e)f)g)h)i)j)k)l)m)n)o)p)q)r)s)t)u)v)w)x)y)z)A)B)C)D)E)F)G)H)I)J)K)L)M)N)O)P)Q)R)S)T)U)V)W)X)Y)Z)0)1)2)3)4)5)6)7)8)9)!)#)$)%)')()))*)+),)-).)/):);)=)?)@)[)])^)_)`){)|)})~)a*b*c*d*e*f*g*h*i*j*k*l*m*n*o*p*q*r*s*t*u*v*w*x*y*z*A*B*C*D*E*F*G*H*I*J*K*L*M*N*O*P*Q*R*S*T*U*V*W*X*Y*Z*0*1*2*3*4*5*6*7*8*9*!*#*$*%*'*(*)***+*,*-*.*/*:*;*=*?*@*[*]*^*_*`*{*|*}*~*a+b+c+d+e+f+g+h+i+j+k+l+m+n+o+p+q+r+s+t+u+v+w+x+y+z+A+B+C+D+E+F+G+H+I+J+K+L+M+N+O+P+Q+R+S+T+U+V+W+X+Y+Z+0+1+2+3+4+5+6+7+8+9+!+#+$+%+'+(+)+*+++,+-+.+/+:+;+=+?+@+[+]+^+_+`+{+|+}+~+a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,0,1,2,3,4,5,6,7,8,9,!,#,$,%,',(,),*,+,,,-,.,/,:,;,=,?,@,[,],^,_,`,{,|,},~,a-b-c-d-e-f-g-h-i-j-k-l-m-n-o-p-q-r-s-t-u-v-w-x-y-z-A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z-0-1-2-3-4-5-6-7-8-9-!-#-$-%-'-(-)-*-+-,---.-/-:-;-=-?-@-[-]-^-_-`-{-|-}-~-a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.A.B.C.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.U.V.W.X.Y.Z.0.1.2.3.4.5.6.7.8.9.!.#.$.%.'.(.).*.+.,.-.../.:.;.=.?.@.[.].^._.`.{.|.}.~.a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/0/1/2/3/4/5/6/7/8/9/!/#/$/%/'/(/)/*/+/,/-/.///:/;/=/?/@/[/]/^/_/`/{/|/}/~/a:b:c:d:e:f:g:h:i:j:k:l:m:n:o:p:q:r:s:t:u:v:w:x:y:z:A:B:C:D:E:F:G:H:I:J:K:L:M:N:O:P:Q:R:S:T:U:V:W:X:Y:Z:0:1:2:3:4:5:6:7:8:9:!:#:$:%:':(:):*:+:,:-:.:/:::;:=:?:@:[:]:^:_:`:{:|:}:~:a;b;c;d;e;f;g;h;i;j;k;l;m;n;o;p;q;r;s;t;u;v;w;x;y;z;A;B;C;D;E;F;G;H;I;J;K;L;M;N;O;P;Q;R;S;T;U;V;W;X;Y;Z;0;1;2;3;4;5;6;7;8;9;!;#;$;%;';(;);*;+;,;-;.;/;:;;;=;?;@;[;];^;_;`;{;|;};~;a=b=c=d=e=f=g=h=i=j=k=l=m=n=o=p=q=r=s=t=u=v=w=x=y=z=A=B=C=D=E=F=G=H=I=J=K=L=M=N=O=P=Q=R=S=T=U=V=W=X=Y=Z=0=1=2=3=4=5=6=7=8=9=!=#=$=%='=(=)=*=+=,=-=.=/=:=;===?=@=[=]=^=_=`={=|=}=~=a?b?c?d?e?f?g?h?i?j?k?l?m?n?o?p?q?r?s?t?u?v?w?x?y?z?A?B?C?D?E?F?G?H?I?J?K?L?M?N?O?P?Q?R?S?T?U?V?W?X?Y?Z?0?1?2?3?4?5?6?7?8?9?!?#?$?%?'?(?)?*?+?,?-?.?/?:?;?=???@?[?]?^?_?`?{?|?}?~?a@b@c@d@e@f@g@h@i@j@k@l@m@n@o@p@q@r@s@t@u@v@w@x@y@z@A@B@C@D@E@F@G@H@I@J@K@L@M@N@O@P@Q@R@S@
47def _live_va_reservation_count() -> int:
48 return live_va_reservation_count() 2IjJjKjLjMjNjOjPjQjRjSjTjUjVjWjXjYjZj0j1j2j3j4j5j6j7j8j9j!j#j$j%j'j(j)j*j+j,j-j.j/j:j;j=j?j@j[j]j^j_j`j{j|j}j~jakbkckdkekfkgkhkikjkkklkmknkokpkqkrksktkukvkwkxkykzkAkBkCkDkEkFkGkHkIkJkKkLkMkNkOkPkQkRkSkTkUkVkWkXkYkZk0k1k2k3k4k5k6k7k8k9k!k#k$k%k'k(k)k*k+k,k-k.k/k:k;k=k?k@k[k]k^k_k`k{k|k}k~kalblcldlelflglhliljlklllmlnlolplqlrlsltlulvlwlxlylzlAlBlClDlElFlGlHlIlJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZl0l1l2l3l4l5l6l7l8l9l!l#l$l%l'l(l)l*l+l,l-l.l/l:l;l=l?l@l[l]l^l_l`l{l|l}l~lambmcmdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmumvmwmxmymzmAmBmCmDmEmFmGmHmImJmKmLmMmNmOmPmQmRmSmTmUmVmWmXmYmZm0m1m2m3m4m5m6m7m8m9m!m#m$m%m'm(m)m*m+m,m-m.m/m:m;m=m?m@m[m]m^m_m`m{m|m}m~manbncndnenfngnhninjnknlnmnnnonpnqnrnsntnunvnwnxnynznAnBnCnDnEnFnGnHnInJnKnLnMnNnOnPnQnRnSnTnUnVnWnXnYnZn0n1n2n3n4n5n6n7n8n9n!n#n$n%n'n(n)n*n+n,n-n.n/n:n;n=n?n@n[n]n^n_n`n{n|n}n~naobocodoeofogohoiojokolomonooopoqorosotouovowoxoyozoAoBoCoDoEoFoGoHoIoJoKoLoMoNoOoPoQoRoSoToUoVoWoXoYoZo0o1o2o3o4o5o6o7o8o9o!o#o$o%o'o(o)o*o+o,o-o.o/o:o;o=o?o@o[o]o^o_o`o{o|o}o~oapbpcpdpepfpgphpipjpkplpmpnpopppqprpsptpupvpwpxpypzpApBpCpDpEpFpGpHpIpJpKpLpMpNpOpPpQpRpSpTpUpVpWpXpYpZp0p1p2p3p4p5p6p7p8p9p!p#p$p%p'p(p)p*p+p,p-p.p/p:p;p=p?p@p[p]p^p_p`p{p|p}p~paqbqcqdqeqfqgqhqiqjqkqlqmqnqoqpqqqrqsqtquqvqwqxqyqzqAqBqCqDqEqFqGqHqIqJqKqLqMqNqOqPqQqRqSqTqUqVqWqXqYqZq0q1q2q3q4q5q6q7q8q9q!q#q$q%q'q(q)q*q+q,q-q.q/q:q;q=q?q@q[q]q^q_q`q{q|q}q~qarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurvrwrxryrzrArBrCrDrErFrGrHrIrJrKrLrMrNrOrPrQrRrSrTrUrVrWrXrYrZr0r1r2r3r4r5r6r7r8r9r!r#r$r%r'r(r)r*r+r,r-r.r/r:r;r=r?r@r[r]r^r_r`r{r|r}r~rasbscsdsesfsgshsisjskslsmsnsospsqsrssstsusvswsxsyszsAsBsCsDsEsFsGsHsIsJsKsLsMsNsOsPsQsRsSsTsUsVsWsXsYsZs0s1s2s3s4s5s6s7s8s9s!s#s$s%s's(s)s*s+s,s-s.s/s:s;s=s?s@s[s]s^s_s`s{s|s}s~satbtctdtetftgthtitjtktltmtntotptqtrtstttutvtwtxtytztAtBtCtDtEtFtGtHtItJtKtLtMtNtOtPtQtRtStTtUtVtWtXtYtZt0t1t2t3t4t5t6t7t8t9t!t#t$t%t't(t)t*t+t,t-t.t/t:t;t=t?t@t[t]t^t_t`t{t|t}t~taubucudueufuguhuiujukulumunuoupuqurusutuuuvuwuxuyuzuAuBuCuDuEuFuGuHuIuJuKuLuMuNuOuPuQuRuSuTuUuVuWuXuYuZu0u1u2u3u4u5u6u7u8u9u!u#u$u%u'u(u)u*u+u,u-u.u/u:u;u=u?u@u[u]u^u_u`u{u|u}u~uavbvcvdvevfvgvhvivjvkvlvmvnvovpvqvrvsvtvuvvvwvxvyvzvAvBvCvDvEvFvGvHvIvJvKvLvMvNvOvPvQvRvSvTvUvVvWvXvYvZv0v1v2v3v4v5v6v7v8v9v!v#v$v%v'v(v)v*v+v,v-v.v/v:v;v=v?v@v[v]v^v_v`v{v|v}v~vawbwcwdwewfwgwhwiwjwkwlwmwnwowpwqwrwswtwuwvwwwxwywzwAwBwCwDwEwFwGwHwIwJwKwLwMwNwOwPwQwRwSwTwUwVwWwXwYwZw0w1w2w3w4w5w6w7w8w9w!w#w$w%w'w(w)w*w+w,w-w.w/w:w;w=w?w@w[w]w^w_w`w{w|w}w~waxbxcxdxexfxgxhxixjxkxlxmxnxoxpxqxrxsxtxuxvxwxxxyxzxAxBxCxDxExFxGxHxIxJxKxLxMxNxOxPxQxRxSxTxUxVxWxXxYxZx0x1x2x3x4x5x6x7x8x9x!x#x$x%x'x(x)x*xyfvizfwiAfxi+x,x-x.xBfyiCfzi/x:xDfAiEfBiFfCiGfDi;x=xHfEiIfFi?x@x[x]x^x_x`x{xJfGiKfHiLfIiMfJiNfKiOfLiPfMiQfNiRfOiSfPiTfQiUfRi|x}x~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyGyHyIyJyKyLyMyNyOyPyQyRySyTyUyVyWyXyYyZy0y1y2y3y4y5y6y7y8y9y!y#y$y%y'y(y)y*y+y,y-y.y/y:y;y=y?y@y[y]y~f9iag!ibg#icg$idg%ieg'i^y_y`y{yfg(i0i|i|y}ygg)i1i}ihg*iig+i2i~i~yazjg,i3iajbzczkg-ilg.idzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAz6gBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzSzTzUzVzWzXzYzZz0z1z2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z:z;z=z?z@z[z]z^z_z`z{z|z}z~zaAbAcAdAeAfAgAhAiAjAkAlAmAnAoApAqArAsAtAuAvAwAxAyAzAAABACADAEAFAGAHAIAJAKALAMANAOAPAQARASATAUAVAWAXAYAZA0A1A2A3A4A5A6A7A8A9A!A#A$A%A'A(A)A*A+A,A-A.A/A:A;A=A?A@A[A]A^A_A`A{A|A}A~AaBbBcBdBeBfBgBhBiBjBkBlBmBnBoBpBqBrBsBtBuBvBwBxByBzBABBBCBDBEBFBGBHBIBJBKBLBMBNBOBPBQBRBSBTBUBVBWBXBYBZB0B1B2B3B4B5B6B7B8B9B!B#B$B%B'B(B)B*B+B,B-B.B/B:B;B=B?B@B[B]B^B_B`B{B|B}B~BaCbCcCdCeCfCgChCiCjCkClCmCnCoCpCqCrCsCtCuCvCwCxCyCzCACBCCCDCECFCGCHCICJCKCLCMCNCOCPCQCRCSCTCUCVCWCXCYCZC0C1C2C3C4C5C6C7C8C9C!C#C$C%C'C(C)C*C+C,C-C.C/C:C;C=C?C@C[C]C^C_C`C{C|C}C~CaDbDcDdDeDfDgDhDiDjDkDlDmDnDoDpDqDrDsDtDuDvDwDxDyDzDADBDCDDDEDFDGDHDIDJDKDLDMDNDODPDQDRDSDTDUDVDWDXDYDZD0D1D2D3D4D5D6D7D8D9D!D#D$D%D'D(D)D*D+D,D-D.D/D:D;D=D?D@D[D]D^D_D`D{D|D}D~DaEbEcEdEeEfEgEhEiEjEkElEmEnEoEpEqErEsEtEuEvEwExEyEzEAEBECEDEEEFEGEHEIEJEKELEMENEOEPEQERESETEUEVEWEXEYEZE0E1E2E3E4E5E6E7E8E9E!E#E$E%E'E(E)E*E+E,E-E.E/E:E;E=E?E@E[E]E^E_E`E{E|E}E~EaFbFcFdFeFfFgFhFiFjFkFlFmFnFoFpFqFrFsFtFuFvFwFxFyFzFAFBFCFDFEFFFGFHFIFJFKFLFMFNFOFPFQFRFSFTFUFVFWFXFYFZF0F1F2F3F4F5F6F7F8F9F!F#F$F%F'F(F)F*F+F,F-F.F/F:F;F=F?F@F[F]F^F_F`F{F|F}F~FaGbGcGdGeGfGgGhGiGjGkGlGmGnGoGpGqGrGsGtGuGvGwGxGyGzGAGBGCGDGEGFGGGHGIGJGKGLGMGNGOGPGQGRGSGTGUGVGWGXGYGZG0G1G2G3G4G5G6G7G8G9G!G#G$G%G'G(G)G*G+G,G-G.G/G:G;G=G?G@G[G]G^G_G`G{G|G}G~GaHbHcHdHeHfHgHhHiHjHkHlHmHnHoHpHqHrHsHtHuHvHwHxHyHzHAHBHCHDHEHFHGHHHIHJHKHLHMHNHOHPHQHRHSHTHUHVHWHXHYHZH0H1H2H3H4H5H6H7H8H9H!H#H$H%H'H(H)H*H+H,H-H.H/H:H;H=H?H@H[H]H^H_H`H{H|H}H~HaIbIcIdIeIfIgIhIiIjIkIlImInIoIpIqIrIsItIuIvIwIxIyIzIAIBICIDIEIFIGIHIIIJIKILIMINIOIPIQIRISITIUIVIWIXIYIZI0I1I2I3I4I5I6I7I8I9I!I#I$I%I'I(I)I*I+I,I-I.I/I:I;I=I?I@I[I]I^I_I`I{I|I}I~IaJbJcJdJeJfJgJhJiJjJkJlJmJnJoJpJqJrJsJtJuJvJwJxJyJzJAJBJCJDJEJFJGJHJIJJJKJLJMJNJOJPJQJRJSJTJUJVJWJXJYJZJ0J1J2J3J4J5J6J7J8J9J!J#J$J%J'J(J)J*J+J,J-J.J/J:J;J=J?J@J[J]J^J_J`J{J|J}J~JaKbKcKdKeKfKgKhKiKjKkKlKmKnKoKpKqKrKsKtKuKvKwKxKyKzKAKBKCKDKEKFKGKHKIKJKKKLKMKNKOKPKQKRKSKTKUKVKWKXKYKZK0K1K2K3K4K5K6K7K8K9K!K#K$K%K'K(K)K*K+K,K-K.K/K:K;K=K?K@K[K]K^K_K`K{K|K}K~KaLbLcLdLeLfLgLhLiLjLkLlLmLnLoLpLqLrLsLtLuLvLwLxLyLzLALBLCLDLELFLGLHLILJLKLLLMLNLOLPLQLRLSLTLULVLWLXLYLZL0L1L2L3L4L5L6L7L8L9L!L#L$L%L'L(L)L*L+L,L-L.L/L:L;L=L?L@L[L]L^L_L`L{L|L}L~LaMbMcMdMeMfMgMhMiMjMkMlMmMnMoMpMqMrMsMtMuMvMwMxMyMzMAMBMCMDMEMFMGMHMIMJMKMLMMMNMOMPMQMRMSMTMUMVMWMXMYMZM0M1M2M3M4M5M6M7M8M9M!M#M$M%M'M(M)M*M+M,M-M.M/M:M;M=M?M@M[M]M^M_M`M{M|M}M~MaNbNcNdNeNfNgNhNiNjNkNlNmNnNoNpNqNrNsNtNuNvNwNxNyNzNANBNCNDNENFNGNHNINJNKNLNMNNNONPNQNRNSNTNUNVNWNXNYNZN0N1N2N3N4N5N6N7N8N9N!N#N$N%N'N(N)N*N+N,N-N.N/N:N;N=N?N@N[N]N^N_N`N{N|N}N~NaObOcOdOeOfOgOhOiOjOkOlOmOnOoOpOqOrOsOtOuOvOwOxOyOzOAOBOCODOEOFOGOHOIOJOKOLOMONOOOPOQOROSOTOUOVOWOXOYOZO0O1O2O3O4O5O6O7O8O9O!O#O$O%O'O(O)O*O+O,O-O.O/O:O;O=O?O@O[O]O^O_O`O{O|O}O~OaPbPcPdPePfPgPhPiPjPkPlPmPnPoPpPqPrPsPtPuPvPwPxPyPzPAPBPCPDPEPFPGPHPIPJPKPLPMPNPOPPPQPRPSPTPUPVPWPXPYPZP0P1P2P3P4P5P6P7P8P9P!P#P$P%P'P(P)P*P+P,P-P.P/P:P;P=P?P@P[P]P^P_P`P{P|P}P~PaQbQcQdQeQfQgQhQiQjQkQlQmQnQoQpQqQrQsQtQuQvQwQxQyQzQAQBQCQDQEQFQGQHQIQJQKQLQMQNQOQPQQQRQSQTQUQVQWQXQYQZQ0Q1Q2Q3Q4Q5Q6Q7Q8Q9Q!Q#Q$Q%Q'Q(Q)Q*Q+Q,Q-Q.Q/Q:Q;Q=Q?Q@Q[Q]Q^Q_Q`Q{Q|Q}Q~QaRbRcRdReRfRgRhRiRjRkRlRmRnRoRpRqRrRsRtRuRvRwRxRyRzRARBRCRDRERFRGRHRIRJRKRLRMRNRORPRQRRRSRTRURVRWRXRYRZR0R1R2R3R4R5R6R7R8R9R!R#R$R%R'R(R)R*R+R,R-R.R/R:R;R=R?R@R[R]R^R_R`R{R|R}R~RaSbScSdSeSfSgShSiSjSkSlSmSnSoSpSqSrSsStSuSvSwSxSySzSASBSCSDSESFSGSHSISJSKSLSMSNSOSPSQSRSSSTSUSVSWSXSYSZS0S1S2S3S4S5S6S7S8S9S!S#S$S%S'S(S)S*S+S,S-S.S/S:S;S=S?S@S[S]S^S_S`S{S|S}S~SaTbTcTdTeTfTgThTiTjTkTlTmTnToTpTqTrTsTtTuTvTwTxTyTzTATBTCTDTETFTGTHTITJTKTLTMTNTOTPTQTRTSTTTUTVTWTXTYTZT0T1T2T3T4T5T6T7T8T9T!T#T$T%T'T(T)T*T+T,T-T.T/T:T;T=T?T@T[T]T^T_T`T{T|T}T~TaUbUcUdUeUfUgUhUiUjUkUlUmUnUoUpUqUrUsUtUuUvUwUxUyUzUAUBUCUDUEUFUGUHUIUJUKULUMUNUOUPUQURUSUTUUUVUWUXUYUZU0U1U2U3U4U5U6U7U8U9U!U#U$U%U'U(U)U*U+U,U-U.U/U:U;U=U?U@U[U]U^U_U`U{U|U}U~UaVbVcVdVeVfVgVhViVjVkVlVmVnVoVpVqVrVsVtVuVvVwVxVyVzVAVBVCVDVEVFVGVHVIVJVKVLVMVNVOVPVQVRVSVTVUVVVWVXVYVZV0V1V2V3V4V5V6V7V8V9V!V#V$V%V'V(V)V*V+V,V-V.V/V:V;V=V?V@V[V]V^V_V`V{V|V}V~VaWbWcWdWeWfWgWhWiWjWkWlWmWnWoWpWqWrWsWtWuWvWwWxWyWzWAWBWCWDWEWFWGWHWIWJWKWLWMWNWOWPWQWRWSWTWUWVWWWXWYWZW0W1W2W3W4W5W6W7W8W9W!W#W$W%W'W(W)W*W+W,W-W.W/W:W;W=W?W@W[W]W^W_W`W{W|W}W~WaXbXcXdXeXfXgXhXiXjXkXlXmXnXoXpXqXrXsXtXuXvXwXxXyXzXAXBXCXDXEXFXGXHXIXJXKXLXMXNXOXPXQXRXSXTXUXVXWXXXYXZX0X1X2X3X4X5X6X7X8X9X!X#X$X%X'X(X)X*X+X,X-X.X/X:X;X=X?X@X[X]X^X_X`X{X|X}X~XaYbYcYdYeYfYgYhYiYjYkYlYmYnYoYpYqYrYsYtYuYvYwYxYyYzYAYBYCYDYEYFYGYHYIYJYKYLYMYNYOYPYQYRYSYTYUYVYWYXYYYZY0Y1Y2Y3Y4Y5Y6Y7Y8Y9Y!Y#Y$Y%Y'Y(Y)Y*Y+Y,Y-Y.Y/Y:Y;Y=Y?Y@Y[Y]Y^Y_Y`Y{Y|Y}Y~YaZbZcZdZeZfZgZhZiZjZkZlZmZnZoZpZqZrZsZtZuZvZwZxZyZzZAZBZCZDZEZFZGZHZIZJZKZLZMZNZVfOZPZQZRZSZTZUZVZWZWfnjXZYZZZ0Z1Z2Z3Z4Z5Z6Z7Z8Z9Z!Z#Z$Z%Z'Z(Z)Z*Z+Z,Z-Z.Z/Z:Z;Z=Z?Z@Z[Z]Z^Z_Z`Z{Z|Z}Z~Za0b0c0d0e0Xfojf0g0h0i0j0k0l0m0Yfpjn0o0p0q0r0s0t0u0v0w0x0y0z0A0B0C0D0E0F0G0H0I0J0K0L0M0N0O0P0Q0R0S0T0U0V0W0X0Y0Z00010203040506070Zfqj8090!0#0$0%0'0(0)0*0+0,0-0.0/0:0;0=0?0@0[0]0^0_0`0{0|0}0~0a1b1c1d1e1f1g1h1i1j1k1l1m1n1o1p10fq1r1s1t1u11fv12fw1x1y1z1A1B1C1D1E1F1G13frjH1I1J1K1L1M1N1O1P1Q1R1S1T1U1V1W1X1Y1Z101112131415161718191!1#1$1%1'1(1)1*1+1,1-1.1/1:1;1=1?1@1[1]1^1_1`1{1|1}1~1a24fsjb2c2d2e2f2g2h2i2j2k2l2m2n2o2p2q2r2s2t2u2v2w2x2y2z2A2B2C2D2E2F2G2H2I2J2K2L2M2N2O2P2Q2R2S2T2U2V25ftjW2X2Y2Z202122232425262728292!2#2$2%2'2(2)2*2+2,2-2.2/2:2;2=2?2@2[2]2^2_2`2{2|2}2~2a3b3c3d3e3f36fujg3h3i3j3k3l3m3n3o3p3q3r3s3t3u3v3w3x3y3z3A3B3C3D3E3F3G3H3I3J3K3L3M3N3O3P3Q3R3S3T3U3V3W3X3Y3Z3037fvj132333435363738393!3#3$3%3'3(3)3*3+3,3-3.3/3:3;3=3?3@3[3]3^3_3`3{3|3}3~3a4b4c4d4e4f4g4h4i4j4k48fwjl4m4n4o4p4q4r4s4t4u4v4w4x4y4z4A4B4C4D4E4F4G4H4I4J4K4L4M4N4O4P4Q4R4S4T4U4V4W4X4Y4Z40414243444549fxj64748494!4#4$4%4'4(4)4*4+4,4-4.4/4:4;4=4?4@4[4]4^4_4`4{4|4}4~4a5b5c5d5e5f5g5h5i5j5k5l5m5n5o5p5q5r5!fyjs5t5u5v5w5x5y5z5A5B5C5D5E5F5G5H5I5J5K5L5M5N5O5P5Q5R5S5T5U5V5W5X5Y5Z505152535455565758595!5#5$5%5'5(5)5*5+5,5-5.5/5:5;5=5?5@5[5]5^5_5`5{5|5}5~5a6b6c6d6e6f6g6h6i6j6k6l6m6n6o6p6q6r6s6t6u6v6w6x6y6z6A6B6C6D6E6F6G6H6I6J6K6L6M6N6O6P6Q6R6S6T6U6V6W6X6Y6Z606162636465666768696!6#6$6%6'6(6)6*6+6,6-6.6/6:6;6=6?6@6[6]6^6_6`6{6|6}6~6a7b7c7d7e7f7g7h7i7j7k7l7m7n7o7p7q7r7s7t7u7v7w7x7y7z7A7B7C7D7E7F7G7H7I7J7K7L7M7N7O7P7Q7R7S7T7U7V7W7X7Y7Z707172737475767778797!7#7$7%7'7(7)7*7+7,7-7.7/7:7;7=7?7@7[7]7^7_7`7{7|7}7~7a8b8c8d8e8f8g8h8i8j8k8l8m8n8o8p8q8r8s8t8u8v8w8x8y8z8A8B8C8D8E8F8G8H8I8J8K8L8M8N8O8P8Q8R8S8T8U8V8W8X8Y8Z808182838485868788898!8#8$8%8'8(8)8*8+8,8-8.8/8:8;8=8?8@8[8]8^8_8`8{8|8}8~8a9b9c9d9e9f9g9h9i9j9k9l9m9n9o9p9q9r9s9t9u9v9w9x9y9z9A9B9C9D9E9F9G9H9I9J9K9L9M9N9O9P9Q9R9S9T9U9V9W9X9Y9Z909192939495969798999!9#9$9%9'9(9)9*9+9,9-9.9/9:9;9=9?9@9[9]9^9_9`9{9|9}9~9a!b!c!d!e!f!g!h!i!j!k!l!m!n!o!p!q!r!s!t!u!v!w!x!y!z!A!B!C!D!E!F!G!H!I!J!K!L!M!N!O!P!Q!R!S!T!U!V!W!X!Y!Z!0!1!2!3!4!5!6!7!8!9!!!#!$!%!'!(!)!*!+!,!-!.!/!:!;!=!?!@![!]!^!_!`!{!|!}!~!a#b#c#d#e#f#g#h#i#j#k#l#m#n#o#p#q#r#s#t#u#v#w#x#y#z#A#B#C#D#E#F#G#H#I#J#K#L#M#N#O#P#Q#R#S#T#U#V#W#X#Y#Z#0#1#2#3#4#5#6#7#8#9#!###$#%#'#(#)#*#+#,#-#.#/#:#;#=#?#@#[#]#^#_#`#{#|#}#~#a$b$c$d$e$f$g$h$i$j$k$l$m$n$o$p$q$r$s$t$u$v$w$x$y$z$A$B$C$D$E$F$G$H$I$J$K$L$M$N$O$P$Q$R$S$T$U$V$W$X$Y$Z$0$1$2$3$4$5$6$7$8$9$!$#$$$%$'$($)$*$+$,$-$.$/$:$;$=$?$@$[$]$^$_$`${$|$}$~$a%b%c%d%e%f%g%h%i%j%k%l%m%n%o%p%q%r%s%t%u%v%w%x%y%z%A%B%C%D%E%F%G%H%I%J%K%L%M%N%O%P%Q%R%S%T%U%V%W%X%Y%Z%0%1%2%3%4%5%6%7%8%9%!%#%$%%%'%(%)%*%+%,%-%.%/%:%;%=%?%@%[%]%^%_%`%{%|%}%~%a'b'c'd'e'f'g'h'i'j'k'l'm'n'o'p'q'r's't'u'v'w'x'y'z'A'B'C'D'E'F'G'H'I'J'K'L'M'N'O'P'Q'R'S'T'U'V'W'X'Y'Z'0'1'2'3'4'5'6'7'8'9'!'#'$'%'''(')'*'+','-'.'/':';'='?'@'[']'^'_'`'{'|'}'~'a(b(c(d(e(f(g(h(i(j(k(l(m(n(o(p(q(r(s(t(u(v(w(x(y(z(A(B(C(D(E(F(G(H(I(J(K(L(M(N(O(P(Q(R(S(T(U(V(W(X(Y(Z(0(1(2(3(4(5(6(7(8(9(!(#($(%('((()(*(+(,(-(.(/(:(;(=(?(@([(](^(_(`({(|(}(~(a)b)c)d)e)f)g)h)i)j)k)l)m)n)o)p)q)r)s)t)u)v)w)x)y)z)A)B)C)D)E)F)G)H)I)J)K)L)M)N)O)P)Q)R)S)T)U)V)W)X)Y)Z)0)1)2)3)4)5)6)7)8)9)!)#)$)%)')()))*)+),)-).)/):);)=)?)@)[)])^)_)`){)|)})~)a*b*c*d*e*f*g*h*i*j*k*l*m*n*o*p*q*r*s*t*u*v*w*x*y*z*A*B*C*D*E*F*G*H*I*J*K*L*M*N*O*P*Q*R*S*T*U*V*W*X*Y*Z*0*1*2*3*4*5*6*7*8*9*!*#*$*%*'*(*)***+*,*-*.*/*:*;*=*?*@*[*]*^*_*`*{*|*}*~*a+b+c+d+e+f+g+h+i+j+k+l+m+n+o+p+q+r+s+t+u+v+w+x+y+z+A+B+C+D+E+F+G+H+I+J+K+L+M+N+O+P+Q+R+S+T+U+V+W+X+Y+Z+0+1+2+3+4+5+6+7+8+9+!+#+$+%+'+(+)+*+++,+-+.+/+:+;+=+?+@+[+]+^+_+`+{+|+}+~+a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,0,1,2,3,4,5,6,7,8,9,!,#,$,%,',(,),*,+,,,-,.,/,:,;,=,?,@,[,],^,_,`,{,|,},~,a-b-c-d-e-f-g-h-i-j-k-l-m-n-o-p-q-r-s-t-u-v-w-x-y-z-A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z-0-1-2-3-4-5-6-7-8-9-!-#-$-%-'-(-)-*-+-,---.-/-:-;-=-?-@-[-]-^-_-`-{-|-}-~-a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.A.B.C.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.U.V.W.X.Y.Z.0.1.2.3.4.5.6.7.8.9.!.#.$.%.'.(.).*.+.,.-.../.:.;.=.?.@.[.].^._.`.{.|.}.~.a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/0/1/2/3/4/5/6/7/8/9/!/#/$/%/'/(/)/*/+/,/-/.///:/;/=/?/@/[/]/^/_/`/{/|/}/~/a:b:c:d:e:f:g:h:i:j:k:l:m:n:o:p:q:r:s:t:u:v:w:x:y:z:A:B:C:D:E:F:G:H:I:J:K:L:M:N:O:P:Q:R:S:T:U:V:W:X:Y:Z:0:1:2:3:4:5:6:7:8:9:!:#:$:%:':(:):*:+:,:-:.:/:::;:=:?:@:[:]:^:_:`:{:|:}:~:a;b;c;d;e;f;g;h;i;j;k;l;m;n;o;p;q;r;s;t;u;v;w;x;y;z;A;B;C;D;E;F;G;H;I;J;K;L;M;N;O;P;Q;R;S;T;U;V;W;X;Y;Z;0;1;2;3;4;5;6;7;8;9;!;#;$;%;';(;);*;+;,;-;.;/;:;;;=;?;@;[;];^;_;`;{;|;};~;a=b=c=d=e=f=g=h=i=j=k=l=m=n=o=p=q=r=s=t=u=v=w=x=y=z=A=B=C=D=E=F=G=H=I=J=K=L=M=N=O=P=Q=R=S=T=U=V=W=X=Y=Z=0=1=2=3=4=5=6=7=8=9=!=#=$=%='=(=)=*=+=,=-=.=/=:=;===?=@=[=]=^=_=`={=|=}=~=a?b?c?d?e?f?g?h?i?j?k?l?m?n?o?p?q?r?s?t?u?v?w?x?y?z?A?B?C?D?E?F?G?H?I?J?K?L?M?N?O?P?Q?R?S?T?U?V?W?X?Y?Z?0?1?2?3?4?5?6?7?8?9?!?#?$?%?'?(?)?*?+?,?-?.?/?:?;?=???@?[?]?^?_?`?{?|?}?~?a@b@c@d@e@f@g@h@i@j@k@l@m@n@o@p@q@r@s@t@u@v@w@x@y@z@A@B@C@D@E@F@G@H@I@J@K@L@M@N@O@P@Q@R@S@
50import warnings
51from collections.abc import Sequence
52from typing import TYPE_CHECKING
54from cuda.core._memory._copy_enums import CopyOptions, _reject_unsupported_during_api_call
55from cuda.core._utils.cuda_utils import CUDAWarning
56from cuda.core._utils.pycompat import BufferProtocol
57from cuda.core._dlpack import classify_dl_device, make_py_capsule
58from cuda.core._device import Device
60if TYPE_CHECKING:
61 from cuda.core._memory._virtual_memory_resource import VirtualMemoryResource
62 from cuda.core.graph import GraphBuilder
65# =============================================================================
66# MR deallocation callback (invoked from C++ shared_ptr deleter)
67# =============================================================================
69cdef void _mr_dealloc_callback(
70 object mr,
71 cydriver.CUdeviceptr ptr,
72 size_t size,
73 const StreamHandle& h_stream,
74) noexcept:
75 """Called by the C++ deleter to deallocate via MemoryResource.deallocate.
77 Runs from a destructor, so nothing can be raised here; failures are reported
78 as :class:`~cuda.core.CUDAWarning` (see the error handling policy).
79 """
80 cdef Stream stream
81 try: 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z mf0 1 2 3 4 5 ? @ [ ] ^ EcFcGcHcIcJcKc-f.fqgrg/fsg:f;ftgugvgwg7g8g9g!g#gxgygzg$g%g'g(g)g,b*g+gAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPg=fVcOcPc-b.b/b:bQg2e,gRg6 7 8 / vi~bwilcxi# $ % yir zi' AiBiCi: Di( EimcFio p q ) ncGiocHipcIiqcJiKiLiMiNiOiPiQiRiicjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[b9i!i#i$i%i'i3e(i)i*i+i,iec-i.i]b; QcRc$c3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'byc8c(b)bzcAc{b|bBcCc*b+b4e5eSgTga b c ofZe0e1e9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 6eWe?dId7d%caegfUg8dhf7euf~evfhcDcfds t * + 8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeXe@dbfcfuhChifpfVg-gWg.gmg= dfngce#fYeef[d}effUeaf.dh i j ZinjojpjqjrjsjtjujvjwjxjyjUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dieQdRd. jekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeqfWcXc}b
82 if not h_stream: 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z mf0 1 2 3 4 5 ? @ [ ] ^ EcFcGcHcIcJcKc-f.fqgrg/fsg:f;ftgugvgwg7g8g9g!g#gxgygzg$g%g'g(g)g,b*g+gAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPg=fVcOcPc-b.b/b:bQg2e,gRg6 7 8 / vi~bwilcxi# $ % yir zi' AiBiCi: Di( EimcFio p q ) ncGiocHipcIiqcJiKiLiMiNiOiPiQiRiicjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[b9i!i#i$i%i'i3e(i)i*i+i,iec-i.i]b; QcRc$c3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'byc8c(b)bzcAc{b|bBcCc*b+b4e5eSgTga b c ofZe0e1e9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 6eWe?dId7d%caegfUg8dhf7euf~evfhcDcfds t * + 8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeXe@dbfcfuhChifpfVg-gWg.gmg= dfngce#fYeef[d}effUeaf.dh i j ZinjojpjqjrjsjtjujvjwjxjyjUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dieQdRd. jekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeqfWcXc}b
83 # No stream was recorded: host-only memory (Buffer._init records
84 # none) or a Buffer released before one was set. The default-stream
85 # token needs no CUDA context to construct.
86 stream = default_stream() 26e7eufvfTdbfcfuhCh
87 else:
88 stream = Stream._from_handle(Stream, h_stream) 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z mf0 1 2 3 4 5 ? @ [ ] ^ EcFcGcHcIcJcKc-f.fqgrg/fsg:f;ftgugvgwg7g8g9g!g#gxgygzg$g%g'g(g)g,b*g+gAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPg=fVcOcPc-b.b/b:bQg2e,gRg6 7 8 / vi~bwilcxi# $ % yir zi' AiBiCi: Di( EimcFio p q ) ncGiocHipcIiqcJiKiLiMiNiOiPiQiRiicjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[b9i!i#i$i%i'i3e(i)i*i+i,iec-i.i]b; QcRc$c3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'byc8c(b)bzcAc{b|bBcCc*b+b4e5eSgTga b c ofZe0e1e9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 6eWe?dId7d%caegfUg8dhf~ehcDcfds t * + 8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeXe@difpfVg-gWg.gmg= dfngce#fYeef[d}effUeaf.dh i j ZinjojpjqjrjsjtjujvjwjxjyjUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dieQdRd. jekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeqfWcXc}b
89 mr.deallocate(int(ptr), size, stream=stream) 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z mf0 1 2 3 4 5 ? @ [ ] ^ EcFcGcHcIcJcKc-f.fqgrg/fsg:f;ftgugvgwg7g8g9g!g#gxgygzg$g%g'g(g)g,b*g+gAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPg=fVcOcPc-b.b/b:bQg2e,gRg6 7 8 / vi~bwilcxi# $ % yir zi' AiBiCi: Di( EimcFio p q ) ncGiocHipcIiqcJiKiLiMiNiOiPiQiRiicjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[b9i!i#i$i%i'i3e(i)i*i+i,iec-i.i]b; QcRc$c3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'byc8c(b)bzcAc{b|bBcCc*b+b4e5eSgTga b c ofZe0e1e9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 6eWe?dId7d%caegfUg8dhf7euf~evfhcDcfds t * + 8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeXe@dbfcfuhChifpfVg-gWg.gmg= dfngce#fYeef[d}effUeaf.dh i j ZinjojpjqjrjsjtjujvjwjxjyjUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dieQdRd. jekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeqfWcXc}b
90 except Exception as exc: 2#fYe
91 warnings.warn( 2#fYe
92 f"mr.deallocate({int(ptr):#x}) failed during Buffer destruction; " 2#fYe
93 f"the allocation may have leaked: {exc}", 2#fYe
94 CUDAWarning, 2#fYe
95 stacklevel=2,
96 )
98register_mr_dealloc_callback(_mr_dealloc_callback)
101cdef inline void _apply_deallocation_stream(
102 const DevicePtrHandle& h_ptr, const StreamHandle& h_stream) except *:
103 """Record h_stream as the deallocation stream for h_ptr.
105 Translates CUDA_ERROR_INVALID_CONTEXT (default-stream token with no current
106 context) into a descriptive RuntimeError instead of a raw CUDAError.
107 """
108 cdef cydriver.CUresult status = set_deallocation_stream(h_ptr, h_stream) 2^f_f`f{f|f}fvi~bwixi# $ % yir zi' AiBiCiDi( EiFio p q ) GiHiIiJiKiLiMiNiOiPiQiRiicjck ac;bl m n bc=bTcLc?bccdc@b[b(fa b c ae8dhfbe:d@d;dce[d=dUe)f*f?f@f#h
109 if status == cydriver.CUresult.CUDA_ERROR_INVALID_CONTEXT: 2^f_f`f{f|f}fvi~bwixi# $ % yir zi' AiBiCiDi( EiFio p q ) GiHiIiJiKiLiMiNiOiPiQiRiicjck ac;bl m n bc=bTcLc?bccdc@b[b(fa b c ae8dhfbe:d@d;dce[d=dUe)f*f?f@f#h
110 raise RuntimeError( 2be
111 "Cannot record a default deallocation stream when no CUDA context is "
112 "current. Call Device.set_current() first, or pass stream= with a "
113 "non-default Stream."
114 )
115 HANDLE_RETURN(status) 2^f_f`f{f|f}fvi~bwixi# $ % yir zi' AiBiCiDi( EiFio p q ) GiHiIiJiKiLiMiNiOiPiQiRiicjck ac;bl m n bc=bTcLc?bccdc@b[b(fa b c ae8dhf:d@d;dce[d=dUe)f*f?f@f#h
118__all__ = ['Buffer', 'MemoryResource']
121# Memory Attribute Query Helpers
122# ------------------------------
123cdef inline int _query_memory_attrs(
124 _MemAttrs& out,
125 cydriver.CUdeviceptr ptr
126) except -1 nogil:
127 """Query memory attributes for a device pointer."""
128 cdef unsigned int memory_type = 0 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 YcZc^g_g`g{g|gDh$h%hVd'h(h)h*hEhFhec+h}gUc0c]b1cSca b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g hcDcs t Ncdded* + fcgc= 7cHdSdh i j , - . WdXdYdZd0d1d2d3d4d5d6d
129 cdef int is_managed = 0 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 YcZc^g_g`g{g|gDh$h%hVd'h(h)h*hEhFhec+h}gUc0c]b1cSca b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g hcDcs t Ncdded* + fcgc= 7cHdSdh i j , - . WdXdYdZd0d1d2d3d4d5d6d
130 cdef int device_id = 0 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 YcZc^g_g`g{g|gDh$h%hVd'h(h)h*hEhFhec+h}gUc0c]b1cSca b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g hcDcs t Ncdded* + fcgc= 7cHdSdh i j , - . WdXdYdZd0d1d2d3d4d5d6d
131 cdef cydriver.CUpointer_attribute[3] attrs = [ 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 YcZc^g_g`g{g|gDh$h%hVd'h(h)h*hEhFhec+h}gUc0c]b1cSca b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g hcDcs t Ncdded* + fcgc= 7cHdSdh i j , - . WdXdYdZd0d1d2d3d4d5d6d
132 cydriver.CUpointer_attribute.CU_POINTER_ATTRIBUTE_MEMORY_TYPE,
133 cydriver.CUpointer_attribute.CU_POINTER_ATTRIBUTE_IS_MANAGED,
134 cydriver.CUpointer_attribute.CU_POINTER_ATTRIBUTE_DEVICE_ORDINAL,
135 ]
136 cdef uintptr_t[3] vals = [ 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 YcZc^g_g`g{g|gDh$h%hVd'h(h)h*hEhFhec+h}gUc0c]b1cSca b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g hcDcs t Ncdded* + fcgc= 7cHdSdh i j , - . WdXdYdZd0d1d2d3d4d5d6d
137 <uintptr_t><void*>&memory_type,
138 <uintptr_t><void*>&is_managed,
139 <uintptr_t><void*>&device_id,
140 ]
142 cdef cydriver.CUresult ret
143 ret = cydriver.cuPointerGetAttributes(3, attrs, <void**>vals, ptr) 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 YcZc^g_g`g{g|gDh$h%hVd'h(h)h*hEhFhec+h}gUc0c]b1cSca b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g hcDcs t Ncdded* + fcgc= 7cHdSdh i j , - . WdXdYdZd0d1d2d3d4d5d6d
144 if ret == cydriver.CUresult.CUDA_ERROR_NOT_INITIALIZED: 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 YcZc^g_g`g{g|gDh$h%hVd'h(h)h*hEhFhec+h}gUc0c]b1cSca b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g hcDcs t Ncdded* + fcgc= 7cHdSdh i j , - . WdXdYdZd0d1d2d3d4d5d6d
145 with cython.gil:
146 # Device class handles the cuInit call internally
147 Device()
148 ret = cydriver.cuPointerGetAttributes(3, attrs, <void**>vals, ptr)
149 HANDLE_RETURN(ret) 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 YcZc^g_g`g{g|gDh$h%hVd'h(h)h*hEhFhec+h}gUc0c]b1cSca b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g hcDcs t Ncdded* + fcgc= 7cHdSdh i j , - . WdXdYdZd0d1d2d3d4d5d6d
151 # TODO: HMM/ATS-enabled sysmem should also report is_managed=True; the
152 # CU_POINTER_ATTRIBUTE_IS_MANAGED query does not capture that yet.
153 out.is_managed = is_managed != 0 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 YcZc^g_g`g{g|gDh$h%hVd'h(h)h*hEhFhec+h}gUc0c]b1cSca b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g hcDcs t Ncdded* + fcgc= 7cHdSdh i j , - . WdXdYdZd0d1d2d3d4d5d6d
155 if memory_type == 0: 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 YcZc^g_g`g{g|gDh$h%hVd'h(h)h*hEhFhec+h}gUc0c]b1cSca b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g hcDcs t Ncdded* + fcgc= 7cHdSdh i j , - . WdXdYdZd0d1d2d3d4d5d6d
156 # unregistered host pointer
157 out.is_host_accessible = True 2NcfcgcWdXdYdZd0d1d2d3d4d5d6d
158 out.is_device_accessible = False 2NcfcgcWdXdYdZd0d1d2d3d4d5d6d
159 out.device_id = -1 2NcfcgcWdXdYdZd0d1d2d3d4d5d6d
160 elif ( 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 YcZc^g_g`g{g|gDh$h%hVd'h(h)h*hEhFhec+h}gUc0c]b1cSca b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g hcDcs t dded* + fcgc= 7cHdSdh i j , - .
161 is_managed 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 YcZc^g_g`g{g|gDh$h%hVd'h(h)h*hEhFhec+h}gUc0c]b1cSca b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g hcDcs t dded* + fcgc= 7cHdSdh i j , - .
162 or memory_type == cydriver.CUmemorytype.CU_MEMORYTYPE_HOST 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 ]b1cSca b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g hcs t * + fcgcHdSdh i j , - .
163 ):
164 # Managed memory or pinned host memory
165 out.is_host_accessible = True 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 YcZc^g_g`g{g|gDh$h%hVd'h(h)h*hEhFhec+h}gUc0ca b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g hcDcdded* + fcgc= 7cSdh i j
166 out.is_device_accessible = True 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 YcZc^g_g`g{g|gDh$h%hVd'h(h)h*hEhFhec+h}gUc0ca b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g hcDcdded* + fcgc= 7cSdh i j
167 out.device_id = device_id 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 YcZc^g_g`g{g|gDh$h%hVd'h(h)h*hEhFhec+h}gUc0ca b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g hcDcdded* + fcgc= 7cSdh i j
168 elif memory_type == cydriver.CUmemorytype.CU_MEMORYTYPE_DEVICE: 2]b1cScs t Hd, - .
169 out.is_host_accessible = False 2]b1cScs t Hd, - .
170 out.is_device_accessible = True 2]b1cScs t Hd, - .
171 out.device_id = device_id 2]b1cScs t Hd, - .
172 else:
173 with cython.gil:
174 raise ValueError(f"Unsupported memory type: {memory_type}")
175 return 0 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 YcZc^g_g`g{g|gDh$h%hVd'h(h)h*hEhFhec+h}gUc0c]b1cSca b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g hcDcs t Ncdded* + fcgc= 7cHdSdh i j , - . WdXdYdZd0d1d2d3d4d5d6d
178cdef inline void _init_memory_attrs(Buffer self):
179 """Initialize memory attributes by querying the pointer."""
180 Buffer_check_open(self) 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 YcZc^g_g`g{g|gDh$h%hVd'h(h)h*hEhFhec+h}gUc0c]b1cSca b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g hcDcs t Ncdded* + fcgc= 7cHdSdh i j , - . WdXdYdZd0d1d2d3d4d5d6d
181 if not self._mem_attrs_inited.load(memory_order_acquire): 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 YcZc^g_g`g{g|gDh$h%hVd'h(h)h*hEhFhec+h}gUc0c]b1cSca b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g hcDcs t Ncdded* + fcgc= 7cHdSdh i j , - . WdXdYdZd0d1d2d3d4d5d6d
182 _query_memory_attrs(self._mem_attrs, as_cu(self._h_ptr)) 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 YcZc^g_g`g{g|gDh$h%hVd'h(h)h*hEhFhec+h}gUc0c]b1cSca b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g hcDcs t Ncdded* + fcgc= 7cHdSdh i j , - . WdXdYdZd0d1d2d3d4d5d6d
183 self._mem_attrs_inited.store(True, memory_order_release) 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 YcZc^g_g`g{g|gDh$h%hVd'h(h)h*hEhFhec+h}gUc0c]b1cSca b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g hcDcs t Ncdded* + fcgc= 7cHdSdh i j , - . WdXdYdZd0d1d2d3d4d5d6d
186cdef bint _stream_is_capturing(Stream s):
187 cdef cydriver.CUstreamCaptureStatus cap_status
188 IF CUDA_CORE_BUILD_MAJOR >= 13:
189 HANDLE_RETURN(cydriver.cuStreamGetCaptureInfo(as_cu(s._h_stream), &cap_status, 2k ac;bl m n bc!c=b9c?b^bccdc@b[b
190 NULL, NULL, NULL, NULL, NULL))
191 ELSE:
192 HANDLE_RETURN(cydriver.cuStreamGetCaptureInfo(as_cu(s._h_stream), &cap_status,
193 NULL, NULL, NULL, NULL))
194 return cap_status == cydriver.CU_STREAM_CAPTURE_STATUS_ACTIVE 2k ac;bl m n bc!c=b9c?b^bccdc@b[b
197cdef void _do_copy_with_attributes(
198 cydriver.CUdeviceptr dst, cydriver.CUdeviceptr src, size_t nbytes,
199 object options, cydriver.CUstream hstream,
200):
201 IF CUDA_CORE_BUILD_MAJOR >= 13:
202 cdef cydriver.CUmemcpyAttributes cu_attr = _to_cu_memcpy_attributes(options) 2k ac;bl m n bc=b?b^bccdc@b[b
203 with nogil: 2k ac;bl m n bc=b?b^bccdc@b[b
204 HANDLE_RETURN(cydriver.cuMemcpyWithAttributesAsync(dst, src, nbytes, &cu_attr, hstream)) 2k ac;bl m n bc=b?b^bccdc@b[b
205 ELSE:
206 pass # unreachable: _with_attributes_available() is always False on CUDA 12
209cdef void _dispatch_buffer_copy(
210 cydriver.CUdeviceptr dst, cydriver.CUdeviceptr src, size_t nbytes,
211 Stream s, object options, str method_name,
212):
213 """Submit a single copy, honoring CopyOptions when the attributes path is usable."""
214 if options is None: 2@ [ ] ^ EcFcGcHcIcJcKc,bVcOcPc-b.b/b:b/ lc# $ % r ' : ( mco p q ) ncocpcqc2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[b; QcRc$c3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'byc(b)bzcAc{b|bBcCc*b+ba b c Ze0e1ed e f g Id%c:d;d=dh i j
215 with nogil: 2@ [ ] ^ EcFcGcHcIcJcKc,bVcOcPc-b.b/b:b/ lc# $ % r ' : ( mco p q ) ncocpcqck l m rcn TcLc#c; QcRc$c3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'byc(b)bzcAc{b|bBcCc*b+ba b c Ze0e1ed e f g Id%c:d;d=dh i j
216 HANDLE_RETURN(cydriver.cuMemcpyAsync(dst, src, nbytes, as_cu(s._h_stream))) 2@ [ ] ^ EcFcGcHcIcJcKc,bVcOcPc-b.b/b:b/ lc# $ % r ' : ( mco p q ) ncocpcqck l m rcn TcLc#c; QcRc$c3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'byc(b)bzcAc{b|bBcCc*b+ba b c Ze0e1ed e f g Id%c:d;d=dh i j
217 return 2@ [ ] ^ EcFcGcHcIcJcKc,bVcOcPc-b.b/b:b/ lc# $ % r ' : ( mco p q ) ncocpcqck l m rcn TcLc#c; QcRc$c3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'byc(b)bzcAc{b|bBcCc*b+ba b c Ze0e1ed e f g Id%c:d;d=dh i j
218 if not isinstance(options, CopyOptions): 22c3c4ck ac;bl m rcn bc!c=b9c?b^bccdc@b[b
219 raise TypeError( 22c3c4c
220 f"{method_name}: options must be CopyOptions, got {type(options).__name__}" 22c3c4c
221 )
222 if Stream_is_legacy_default_token(s): 2k ac;bl m rcn bc!c=b9c?b^bccdc@b[b
223 raise TypeError( 2rc
224 f"{method_name} does not accept LEGACY_DEFAULT_STREAM with options " 2rc
225 "(matches copy_batch); cuMemcpyWithAttributesAsync rejects it outright, "
226 "unlike PER_THREAD_DEFAULT_STREAM, which is a real stream to the driver "
227 "and is accepted. Pass an explicit stream, PER_THREAD_DEFAULT_STREAM, "
228 "or options=None."
229 )
230 if _stream_is_capturing(s): 2k ac;bl m n bc!c=b9c?b^bccdc@b[b
231 raise TypeError( 2!c9c
232 f"{method_name} does not support graph capture with options " 2!c9c
233 "(matches copy_batch); the driver has no graph-node form of "
234 "cuMemcpyWithAttributesAsync, so options cannot be honored in a graph. "
235 "Use GraphNode.memcpy for a plain (non-attributed) copy node, or pass "
236 "options=None."
237 )
238 if _with_attributes_available(): 2k ac;bl m n bc=b?b^bccdc@b[b
239 _do_copy_with_attributes(dst, src, nbytes, options, as_cu(s._h_stream)) 2k ac;bl m n bc=b?b^bccdc@b[b
240 else:
241 _reject_unsupported_during_api_call(
242 options.src_access_order,
243 "the CUDA 13 build of cuda.core and a driver that reports CUDA 13.2 or newer "
244 "(cuMemcpyWithAttributesAsync is unavailable here)",
245 )
246 # STREAM and ANY never require access sooner than stream order, so
247 # cuMemcpyAsync satisfies them; options are otherwise silently
248 # ignored on this pre-CUDA-13.2 fallback path, matching copy_batch.
249 with nogil:
250 HANDLE_RETURN(cydriver.cuMemcpyAsync(dst, src, nbytes, as_cu(s._h_stream)))
253cdef class Buffer:
254 """Represent a handle to allocated memory.
256 This generic object provides a unified representation for how
257 different memory resources are to give access to their memory
258 allocations.
260 Support for data interchange mechanisms are provided by DLPack.
262 Note
263 ----
264 Pickling an IPC-enabled :class:`Buffer` embeds an
265 :class:`~_memory.IPCBufferDescriptor`. Unpickling reconstructs the buffer
266 by calling :meth:`from_ipc_descriptor` and therefore performs an IPC
267 import. Do not unpickle buffers from untrusted sources.
268 """
269 def __cinit__(self) -> None:
270 self._clear() 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z GhHhmfIhJhKhLh,h/i:iMh$fNhOh%f~g'f4iPhQh-hRh0 1 2 3 4 5 ? .h/h:h;i=i?i@ [ ] ^ EcFcGcHcIcJcKcSiTiUi^f_f`f-f.fqgrg/fsg:f;ftgugvgwg7g8g9g!g#gxgygzg$g%g'g(g)g,b*g+gAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPg=fVcOcPc-b.b/b:bQg2e,gRg6 7 8 {f|f}f/ yf~bzflcAf# $ % Bfr Cf' DfEfFf: Gf( HfmcIfo p q ) ncJfocKfpcLfqcMfNfOfPfQfRfSfTfUficjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[bYcZc~fagbgcgdgeg;h3efg0iVdgg1ihgig2i[fjg3ieckglgUc0c+f,fahbhch]b6gShThUhVh5ihiii@ijiki[i; QcRc$climi]inioi^iWhpiXhqiYhriZhsi0hti1hui6i_i7i`i8i{i3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'bycdhog/gehvhfh2h:gghwhhh;gXgYg3h4h8c=g(b)bzcAc{b|bBcCc*b+b4e5e5h=h6hSgTg?hZg7hih0g@h1c(f?g@gSca b c ofZe0e1e9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 6eWe?dId7d%caegfUg8dhfmj7euf~evfhcDcfds t Ncdded* + fcgc8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeVeXewf[g]g:d@dbfcfuhChifpfVg-gWg.gmg= 7c]f;dViWiXi[h]h^h_h`h{h|h}h~haibicidi1gdfngce#fYeef[dHdSd2gxf=dlf3gei}effUexhjhkhyhlh4g5gmhpgfigi8h)f*f?f9hafnhohphqh!htfzh.d@frh#hAhBhshh i j VfWfthXfYfZf0f1f2f3f4f5f6f7f8f9f!fUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dieQdRd. WdXdYdjekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeYiZdqf0d1d2d3d4d5dWcXc}b6d
272 def _clear(self) -> None:
273 self._h_ptr.reset() # Release the handle 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z GhHhmfIhJhKhLh,h/i:iMh$fNhOh%f~g'f4iPhQh-hRh0 1 2 3 4 5 ? .h/h:h;i=i?i@ [ ] ^ EcFcGcHcIcJcKcSiTiUi^f_f`f-f.fqgrg/fsg:f;ftgugvgwg7g8g9g!g#gxgygzg$g%g'g(g)g,b*g+gAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPg=fVcOcPc-b.b/b:bQg2e,gRg6 7 8 {f|f}f/ yf~bzflcAf# $ % Bfr Cf' DfEfFf: Gf( HfmcIfo p q ) ncJfocKfpcLfqcMfNfOfPfQfRfSfTfUficjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[bYcZc~fagbgcgdgeg;h3efg0iVdgg1ihgig2i[fjg3ieckglgUc0c+f,fahbhch]b6gShThUhVh5ihiii@ijiki[i; QcRc$climi]inioi^iWhpiXhqiYhriZhsi0hti1hui6i_i7i`i8i{i3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'bycdhog/gehvhfh2h:gghwhhh;gXgYg3h4h8c=g(b)bzcAc{b|bBcCc*b+b4e5e5h=h6hSgTg?hZg7hih0g@h1c(f?g@gSca b c ofZe0e1e9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 6eWe?dId7d%caegfUg8dhfmj7euf~evfhcDcfds t Ncdded* + fcgc8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeVeXewf[g]g:d@dbfcfuhChifpfVg-gWg.gmg= 7c]f;dViWiXi[h]h^h_h`h{h|h}h~haibicidi1gdfngce#fYeef[dHdSd2gxf=dlf3gei}effUexhjhkhyhlh4g5gmhpgfigi8h)f*f?f9hafnhohphqh!htfzh.d@frh#hAhBhshh i j VfWfthXfYfZf0f1f2f3f4f5f6f7f8f9f!fUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dieQdRd. WdXdYdjekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeYiZdqf0d1d2d3d4d5dWcXc}b6d
274 self._size = 0 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z GhHhmfIhJhKhLh,h/i:iMh$fNhOh%f~g'f4iPhQh-hRh0 1 2 3 4 5 ? .h/h:h;i=i?i@ [ ] ^ EcFcGcHcIcJcKcSiTiUi^f_f`f-f.fqgrg/fsg:f;ftgugvgwg7g8g9g!g#gxgygzg$g%g'g(g)g,b*g+gAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPg=fVcOcPc-b.b/b:bQg2e,gRg6 7 8 {f|f}f/ yf~bzflcAf# $ % Bfr Cf' DfEfFf: Gf( HfmcIfo p q ) ncJfocKfpcLfqcMfNfOfPfQfRfSfTfUficjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[bYcZc~fagbgcgdgeg;h3efg0iVdgg1ihgig2i[fjg3ieckglgUc0c+f,fahbhch]b6gShThUhVh5ihiii@ijiki[i; QcRc$climi]inioi^iWhpiXhqiYhriZhsi0hti1hui6i_i7i`i8i{i3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'bycdhog/gehvhfh2h:gghwhhh;gXgYg3h4h8c=g(b)bzcAc{b|bBcCc*b+b4e5e5h=h6hSgTg?hZg7hih0g@h1c(f?g@gSca b c ofZe0e1e9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 6eWe?dId7d%caegfUg8dhfmj7euf~evfhcDcfds t Ncdded* + fcgc8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeVeXewf[g]g:d@dbfcfuhChifpfVg-gWg.gmg= 7c]f;dViWiXi[h]h^h_h`h{h|h}h~haibicidi1gdfngce#fYeef[dHdSd2gxf=dlf3gei}effUexhjhkhyhlh4g5gmhpgfigi8h)f*f?f9hafnhohphqh!htfzh.d@frh#hAhBhshh i j VfWfthXfYfZf0f1f2f3f4f5f6f7f8f9f!fUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dieQdRd. WdXdYdjekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeYiZdqf0d1d2d3d4d5dWcXc}b6d
275 self._memory_resource = None 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z GhHhmfIhJhKhLh,h/i:iMh$fNhOh%f~g'f4iPhQh-hRh0 1 2 3 4 5 ? .h/h:h;i=i?i@ [ ] ^ EcFcGcHcIcJcKcSiTiUi^f_f`f-f.fqgrg/fsg:f;ftgugvgwg7g8g9g!g#gxgygzg$g%g'g(g)g,b*g+gAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPg=fVcOcPc-b.b/b:bQg2e,gRg6 7 8 {f|f}f/ yf~bzflcAf# $ % Bfr Cf' DfEfFf: Gf( HfmcIfo p q ) ncJfocKfpcLfqcMfNfOfPfQfRfSfTfUficjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[bYcZc~fagbgcgdgeg;h3efg0iVdgg1ihgig2i[fjg3ieckglgUc0c+f,fahbhch]b6gShThUhVh5ihiii@ijiki[i; QcRc$climi]inioi^iWhpiXhqiYhriZhsi0hti1hui6i_i7i`i8i{i3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'bycdhog/gehvhfh2h:gghwhhh;gXgYg3h4h8c=g(b)bzcAc{b|bBcCc*b+b4e5e5h=h6hSgTg?hZg7hih0g@h1c(f?g@gSca b c ofZe0e1e9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 6eWe?dId7d%caegfUg8dhfmj7euf~evfhcDcfds t Ncdded* + fcgc8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeVeXewf[g]g:d@dbfcfuhChifpfVg-gWg.gmg= 7c]f;dViWiXi[h]h^h_h`h{h|h}h~haibicidi1gdfngce#fYeef[dHdSd2gxf=dlf3gei}effUexhjhkhyhlh4g5gmhpgfigi8h)f*f?f9hafnhohphqh!htfzh.d@frh#hAhBhshh i j VfWfthXfYfZf0f1f2f3f4f5f6f7f8f9f!fUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dieQdRd. WdXdYdjekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeYiZdqf0d1d2d3d4d5dWcXc}b6d
276 self._ipc_data = None 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z GhHhmfIhJhKhLh,h/i:iMh$fNhOh%f~g'f4iPhQh-hRh0 1 2 3 4 5 ? .h/h:h;i=i?i@ [ ] ^ EcFcGcHcIcJcKcSiTiUi^f_f`f-f.fqgrg/fsg:f;ftgugvgwg7g8g9g!g#gxgygzg$g%g'g(g)g,b*g+gAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPg=fVcOcPc-b.b/b:bQg2e,gRg6 7 8 {f|f}f/ yf~bzflcAf# $ % Bfr Cf' DfEfFf: Gf( HfmcIfo p q ) ncJfocKfpcLfqcMfNfOfPfQfRfSfTfUficjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[bYcZc~fagbgcgdgeg;h3efg0iVdgg1ihgig2i[fjg3ieckglgUc0c+f,fahbhch]b6gShThUhVh5ihiii@ijiki[i; QcRc$climi]inioi^iWhpiXhqiYhriZhsi0hti1hui6i_i7i`i8i{i3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'bycdhog/gehvhfh2h:gghwhhh;gXgYg3h4h8c=g(b)bzcAc{b|bBcCc*b+b4e5e5h=h6hSgTg?hZg7hih0g@h1c(f?g@gSca b c ofZe0e1e9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 6eWe?dId7d%caegfUg8dhfmj7euf~evfhcDcfds t Ncdded* + fcgc8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeVeXewf[g]g:d@dbfcfuhChifpfVg-gWg.gmg= 7c]f;dViWiXi[h]h^h_h`h{h|h}h~haibicidi1gdfngce#fYeef[dHdSd2gxf=dlf3gei}effUexhjhkhyhlh4g5gmhpgfigi8h)f*f?f9hafnhohphqh!htfzh.d@frh#hAhBhshh i j VfWfthXfYfZf0f1f2f3f4f5f6f7f8f9f!fUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dieQdRd. WdXdYdjekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeYiZdqf0d1d2d3d4d5dWcXc}b6d
277 self._owner = None 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z GhHhmfIhJhKhLh,h/i:iMh$fNhOh%f~g'f4iPhQh-hRh0 1 2 3 4 5 ? .h/h:h;i=i?i@ [ ] ^ EcFcGcHcIcJcKcSiTiUi^f_f`f-f.fqgrg/fsg:f;ftgugvgwg7g8g9g!g#gxgygzg$g%g'g(g)g,b*g+gAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPg=fVcOcPc-b.b/b:bQg2e,gRg6 7 8 {f|f}f/ yf~bzflcAf# $ % Bfr Cf' DfEfFf: Gf( HfmcIfo p q ) ncJfocKfpcLfqcMfNfOfPfQfRfSfTfUficjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[bYcZc~fagbgcgdgeg;h3efg0iVdgg1ihgig2i[fjg3ieckglgUc0c+f,fahbhch]b6gShThUhVh5ihiii@ijiki[i; QcRc$climi]inioi^iWhpiXhqiYhriZhsi0hti1hui6i_i7i`i8i{i3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'bycdhog/gehvhfh2h:gghwhhh;gXgYg3h4h8c=g(b)bzcAc{b|bBcCc*b+b4e5e5h=h6hSgTg?hZg7hih0g@h1c(f?g@gSca b c ofZe0e1e9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 6eWe?dId7d%caegfUg8dhfmj7euf~evfhcDcfds t Ncdded* + fcgc8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeVeXewf[g]g:d@dbfcfuhChifpfVg-gWg.gmg= 7c]f;dViWiXi[h]h^h_h`h{h|h}h~haibicidi1gdfngce#fYeef[dHdSd2gxf=dlf3gei}effUexhjhkhyhlh4g5gmhpgfigi8h)f*f?f9hafnhohphqh!htfzh.d@frh#hAhBhshh i j VfWfthXfYfZf0f1f2f3f4f5f6f7f8f9f!fUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dieQdRd. WdXdYdjekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeYiZdqf0d1d2d3d4d5dWcXc}b6d
278 self._mem_attrs_inited.store(False) 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z GhHhmfIhJhKhLh,h/i:iMh$fNhOh%f~g'f4iPhQh-hRh0 1 2 3 4 5 ? .h/h:h;i=i?i@ [ ] ^ EcFcGcHcIcJcKcSiTiUi^f_f`f-f.fqgrg/fsg:f;ftgugvgwg7g8g9g!g#gxgygzg$g%g'g(g)g,b*g+gAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPg=fVcOcPc-b.b/b:bQg2e,gRg6 7 8 {f|f}f/ yf~bzflcAf# $ % Bfr Cf' DfEfFf: Gf( HfmcIfo p q ) ncJfocKfpcLfqcMfNfOfPfQfRfSfTfUficjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[bYcZc~fagbgcgdgeg;h3efg0iVdgg1ihgig2i[fjg3ieckglgUc0c+f,fahbhch]b6gShThUhVh5ihiii@ijiki[i; QcRc$climi]inioi^iWhpiXhqiYhriZhsi0hti1hui6i_i7i`i8i{i3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'bycdhog/gehvhfh2h:gghwhhh;gXgYg3h4h8c=g(b)bzcAc{b|bBcCc*b+b4e5e5h=h6hSgTg?hZg7hih0g@h1c(f?g@gSca b c ofZe0e1e9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 6eWe?dId7d%caegfUg8dhfmj7euf~evfhcDcfds t Ncdded* + fcgc8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeVeXewf[g]g:d@dbfcfuhChifpfVg-gWg.gmg= 7c]f;dViWiXi[h]h^h_h`h{h|h}h~haibicidi1gdfngce#fYeef[dHdSd2gxf=dlf3gei}effUexhjhkhyhlh4g5gmhpgfigi8h)f*f?f9hafnhohphqh!htfzh.d@frh#hAhBhshh i j VfWfthXfYfZf0f1f2f3f4f5f6f7f8f9f!fUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dieQdRd. WdXdYdjekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeYiZdqf0d1d2d3d4d5dWcXc}b6d
280 def __init__(self, *args, **kwargs) -> None:
281 raise RuntimeError("Buffer objects cannot be instantiated directly. " 2mj
282 "Please use MemoryResource APIs.")
284 @classmethod
285 def _init(
286 cls, ptr: DevicePointerType, size_t size, mr: MemoryResource | None = None,
287 ipc_descriptor: IPCBufferDescriptor | None = None,
288 owner : object | None = None,
289 *,
290 stream: Stream | GraphBuilder | None = None,
291 ) -> Buffer:
292 """Create a Buffer from a raw pointer.
294 When ``mr`` is provided, the buffer takes ownership: ``mr.deallocate()``
295 is called when the buffer is closed or garbage collected. When ``owner``
296 is provided, the owner is kept alive but no deallocation is performed.
297 When ``mr`` is provided, a deallocation stream is recorded at creation
298 (``stream`` if given, otherwise ``default_stream()``). Recording a
299 default-stream token requires a CUDA context to be current. Host-only
300 resources (``mr.is_device_accessible`` is ``False``) record no stream
301 and need no context.
302 """
303 if mr is not None and owner is not None: 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z mf0 1 2 3 4 5 ? @ [ ] ^ EcFcGcHcIcJcKc-f.fqgrg/fsg:f;ftgugvgwg7g8g9g!g#gxgygzg$g%g'g(g)g,b*g+gAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPg=fVcOcPc-b.b/b:bQg2e,gRg6 7 8 / yf~bzflcAf# $ % Bfr Cf' DfEfFf: Gf( HfmcIfo p q ) ncJfocKfpcLfqcMfNfOfPfQfRfSfTfUficjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[b~fagbgcgdgeg3efggghgig[fjgeckglg]b; QcRc$c3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'byc8c(b)bzcAc{b|bBcCc*b+b4e5eSgTga b c ofZe0e1e9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 6eWe?dId7d%caegfUg8dhf7euf~evfhcDcfds t Ncdded* + fcgc8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeVeXewf@dbfcfuhChifpfVg-gWg.gDjEjmg= Fjdfngce#fYeef[d2g}effUeaf.dh i j VfWfthXfYfZf0f3f4f5f6f7f8f9f!fUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dieQdRd. WdXdYdjekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeYiZdqf0d1d2d3d4d5dWcXc}b6d
304 raise ValueError("owner and memory resource cannot be both specified together") 2Fj
305 if stream is not None and mr is None: 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z mf0 1 2 3 4 5 ? @ [ ] ^ EcFcGcHcIcJcKc-f.fqgrg/fsg:f;ftgugvgwg7g8g9g!g#gxgygzg$g%g'g(g)g,b*g+gAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPg=fVcOcPc-b.b/b:bQg2e,gRg6 7 8 / yf~bzflcAf# $ % Bfr Cf' DfEfFf: Gf( HfmcIfo p q ) ncJfocKfpcLfqcMfNfOfPfQfRfSfTfUficjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[b~fagbgcgdgeg3efggghgig[fjgeckglg]b; QcRc$c3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'byc8c(b)bzcAc{b|bBcCc*b+b4e5eSgTga b c ofZe0e1e9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 6eWe?dId7d%caegfUg8dhf7euf~evfhcDcfds t Ncdded* + fcgc8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeVeXewf@dbfcfuhChifpfVg-gWg.gDjEjmg= dfngce#fYeef[d2g}effUeaf.dh i j VfWfthXfYfZf0f3f4f5f6f7f8f9f!fUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dieQdRd. WdXdYdjekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeYiZdqf0d1d2d3d4d5dWcXc}b6d
306 raise ValueError("stream requires a memory resource (mr)") 2DjEj
307 cdef Buffer self = Buffer.__new__(cls) 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z mf0 1 2 3 4 5 ? @ [ ] ^ EcFcGcHcIcJcKc-f.fqgrg/fsg:f;ftgugvgwg7g8g9g!g#gxgygzg$g%g'g(g)g,b*g+gAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPg=fVcOcPc-b.b/b:bQg2e,gRg6 7 8 / yf~bzflcAf# $ % Bfr Cf' DfEfFf: Gf( HfmcIfo p q ) ncJfocKfpcLfqcMfNfOfPfQfRfSfTfUficjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[b~fagbgcgdgeg3efggghgig[fjgeckglg]b; QcRc$c3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'byc8c(b)bzcAc{b|bBcCc*b+b4e5eSgTga b c ofZe0e1e9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 6eWe?dId7d%caegfUg8dhf7euf~evfhcDcfds t Ncdded* + fcgc8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeVeXewf@dbfcfuhChifpfVg-gWg.gmg= dfngce#fYeef[d2g}effUeaf.dh i j VfWfthXfYfZf0f3f4f5f6f7f8f9f!fUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dieQdRd. WdXdYdjekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeYiZdqf0d1d2d3d4d5dWcXc}b6d
308 cdef uintptr_t c_ptr = <uintptr_t>(int(ptr)) 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z mf0 1 2 3 4 5 ? @ [ ] ^ EcFcGcHcIcJcKc-f.fqgrg/fsg:f;ftgugvgwg7g8g9g!g#gxgygzg$g%g'g(g)g,b*g+gAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPg=fVcOcPc-b.b/b:bQg2e,gRg6 7 8 / yf~bzflcAf# $ % Bfr Cf' DfEfFf: Gf( HfmcIfo p q ) ncJfocKfpcLfqcMfNfOfPfQfRfSfTfUficjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[b~fagbgcgdgeg3efggghgig[fjgeckglg]b; QcRc$c3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'byc8c(b)bzcAc{b|bBcCc*b+b4e5eSgTga b c ofZe0e1e9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 6eWe?dId7d%caegfUg8dhf7euf~evfhcDcfds t Ncdded* + fcgc8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeVeXewf@dbfcfuhChifpfVg-gWg.gmg= dfngce#fYeef[d2g}effUeaf.dh i j VfWfthXfYfZf0f3f4f5f6f7f8f9f!fUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dieQdRd. WdXdYdjekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeYiZdqf0d1d2d3d4d5dWcXc}b6d
309 cdef Stream s
310 cdef cydriver.CUresult _ds_status
311 cdef bint record_stream
312 if mr is not None: 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z mf0 1 2 3 4 5 ? @ [ ] ^ EcFcGcHcIcJcKc-f.fqgrg/fsg:f;ftgugvgwg7g8g9g!g#gxgygzg$g%g'g(g)g,b*g+gAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPg=fVcOcPc-b.b/b:bQg2e,gRg6 7 8 / yf~bzflcAf# $ % Bfr Cf' DfEfFf: Gf( HfmcIfo p q ) ncJfocKfpcLfqcMfNfOfPfQfRfSfTfUficjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[b~fagbgcgdgeg3efggghgig[fjgeckglg]b; QcRc$c3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'byc8c(b)bzcAc{b|bBcCc*b+b4e5eSgTga b c ofZe0e1e9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 6eWe?dId7d%caegfUg8dhf7euf~evfhcDcfds t Ncdded* + fcgc8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeVeXewf@dbfcfuhChifpfVg-gWg.gmg= dfngce#fYeef[d2g}effUeaf.dh i j VfWfthXfYfZf0f3f4f5f6f7f8f9f!fUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dieQdRd. WdXdYdjekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeYiZdqf0d1d2d3d4d5dWcXc}b6d
313 s = Stream_accept(default_stream() if stream is None else stream) 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z mf0 1 2 3 4 5 ? @ [ ] ^ EcFcGcHcIcJcKc-f.fqgrg/fsg:f;ftgugvgwg7g8g9g!g#gxgygzg$g%g'g(g)g,b*g+gAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPg=fVcOcPc-b.b/b:bQg2e,gRg6 7 8 / yf~bzflcAf# $ % Bfr Cf' DfEfFf: Gf( HfmcIfo p q ) ncJfocKfpcLfqcMfNfOfPfQfRfSfTfUficjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[b~fagbgcgdgeg3efggghgigjgeckglg]b; QcRc$c3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'byc8c(b)bzcAc{b|bBcCc*b+b4e5eSgTga b c ofZe0e1e9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 6eWe?dId7d%caegfUg8dhf7euf~evfhcDcfds t * + 8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeXe@dbfcfuhChifpfVg-gWg.gmg= dfngce#fYeef[d}effUeaf.dh i j VfWfXfYfZf0f3f4f5f6f7f8f9f!fUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dieQdRd. jekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeqfWcXc}b
314 # Host-only memory needs no CUDA context to free, so no deallocation
315 # stream is recorded and the driver is not called.
316 record_stream = mr.is_device_accessible 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z mf0 1 2 3 4 5 ? @ [ ] ^ EcFcGcHcIcJcKc-f.fqgrg/fsg:f;ftgugvgwg7g8g9g!g#gxgygzg$g%g'g(g)g,b*g+gAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPg=fVcOcPc-b.b/b:bQg2e,gRg6 7 8 / yf~bzflcAf# $ % Bfr Cf' DfEfFf: Gf( HfmcIfo p q ) ncJfocKfpcLfqcMfNfOfPfQfRfSfTfUficjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[b~fagbgcgdgeg3efggghgigjgeckglg]b; QcRc$c3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'byc8c(b)bzcAc{b|bBcCc*b+b4e5eSgTga b c ofZe0e1e9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 6eWe?dId7d%caegfUg8dhf7euf~evfhcDcfds t * + 8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeXe@dbfcfuhChifpfVg-gWg.gmg= dfngce#fYeef[d}effUeaf.dh i j VfWfXfYfZf0f3f4f5f6f7f8f9f!fUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dieQdRd. jekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeqfWcXc}b
317 self._h_ptr = deviceptr_create_with_mr(c_ptr, size, mr) 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z mf0 1 2 3 4 5 ? @ [ ] ^ EcFcGcHcIcJcKc-f.fqgrg/fsg:f;ftgugvgwg7g8g9g!g#gxgygzg$g%g'g(g)g,b*g+gAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPg=fVcOcPc-b.b/b:bQg2e,gRg6 7 8 / yf~bzflcAf# $ % Bfr Cf' DfEfFf: Gf( HfmcIfo p q ) ncJfocKfpcLfqcMfNfOfPfQfRfSfTfUficjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[b~fagbgcgdgeg3efggghgigjgeckglg]b; QcRc$c3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'byc8c(b)bzcAc{b|bBcCc*b+b4e5eSgTga b c ofZe0e1e9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 6eWe?dId7d%caegfUg8dhf7euf~evfhcDcfds t * + 8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeXe@dbfcfuhChifpfVg-gWg.gmg= dfngce#fYeef[d}effUeaf.dh i j VfWfXfYfZf0f3f4f5f6f7f8f9f!fUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dieQdRd. jekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeqfWcXc}b
318 if record_stream: 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z mf0 1 2 3 4 5 ? @ [ ] ^ EcFcGcHcIcJcKc-f.fqgrg/fsg:f;ftgugvgwg7g8g9g!g#gxgygzg$g%g'g(g)g,b*g+gAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPg=fVcOcPc-b.b/b:bQg2e,gRg6 7 8 / yf~bzflcAf# $ % Bfr Cf' DfEfFf: Gf( HfmcIfo p q ) ncJfocKfpcLfqcMfNfOfPfQfRfSfTfUficjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[b~fagbgcgdgeg3efggghgigjgeckglg]b; QcRc$c3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'byc8c(b)bzcAc{b|bBcCc*b+b4e5eSgTga b c ofZe0e1e9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 6eWe?dId7d%caegfUg8dhf7euf~evfhcDcfds t * + 8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeXe@dbfcfuhChifpfVg-gWg.gmg= dfngce#fYeef[d}effUeaf.dh i j VfWfXfYfZf0f3f4f5f6f7f8f9f!fUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dieQdRd. jekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeqfWcXc}b
319 _ds_status = set_deallocation_stream(self._h_ptr, s._h_stream) 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z mf0 1 2 3 4 5 ? @ [ ] ^ EcFcGcHcIcJcKc-f.fqgrg/fsg:f;ftgugvgwg7g8g9g!g#gxgygzg$g%g'g(g)g,b*g+gAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPg=fVcOcPc-b.b/b:bQg2e,gRg6 7 8 / yf~bzflcAf# $ % Bfr Cf' DfEfFf: Gf( HfmcIfo p q ) ncJfocKfpcLfqcMfNfOfPfQfRfSfTfUficjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[b~fagbgcgdgeg3efggghgigjgeckglg]b; QcRc$c3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'byc8c(b)bzcAc{b|bBcCc*b+b4e5eSgTga b c ofZe0e1e9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 6eWe?dId7d%caegfUg8dhf~ehcDcfds t * + 8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeXe@duhChifpfVg-gWg.gmg= dfngce#fYeef[d}effUeaf.dh i j VfWfXfYfZf0f3f4f5f6f7f8f9f!fUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dieQdRd. jekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeqfWcXc}b
320 if _ds_status != cydriver.CUresult.CUDA_SUCCESS: 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z mf0 1 2 3 4 5 ? @ [ ] ^ EcFcGcHcIcJcKc-f.fqgrg/fsg:f;ftgugvgwg7g8g9g!g#gxgygzg$g%g'g(g)g,b*g+gAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPg=fVcOcPc-b.b/b:bQg2e,gRg6 7 8 / yf~bzflcAf# $ % Bfr Cf' DfEfFf: Gf( HfmcIfo p q ) ncJfocKfpcLfqcMfNfOfPfQfRfSfTfUficjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[b~fagbgcgdgeg3efggghgigjgeckglg]b; QcRc$c3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'byc8c(b)bzcAc{b|bBcCc*b+b4e5eSgTga b c ofZe0e1e9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 6eWe?dId7d%caegfUg8dhf~ehcDcfds t * + 8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeXe@duhChifpfVg-gWg.gmg= dfngce#fYeef[d}effUeaf.dh i j VfWfXfYfZf0f3f4f5f6f7f8f9f!fUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dieQdRd. jekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeqfWcXc}b
321 # Reset before raising: the DevicePtrHandle destructor would otherwise
322 # invoke _mr_dealloc_callback, which catches any inner exception and
323 # clears the exception state, swallowing the error we're about to raise.
324 self._h_ptr.reset() 2uhCh
325 if _ds_status == cydriver.CUresult.CUDA_ERROR_INVALID_CONTEXT: 2uhCh
326 raise RuntimeError( 2uhCh
327 "Cannot record a default deallocation stream when no CUDA context is "
328 "current. Call Device.set_current() first, or pass stream= with a "
329 "non-default Stream."
330 )
331 HANDLE_RETURN(_ds_status)
332 else:
333 self._h_ptr = deviceptr_create_with_owner(c_ptr, owner) 2~fagbgcgdgeg3efggghgig[fjgeckglg]b$cscMctckcucvcwcxcyczcAcBcCcs t Ncdded* + fcgcVewf2gth, - . WdXdYdYiZd0d1d2d3d4d5d6d
334 self._size = size 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z mf0 1 2 3 4 5 ? @ [ ] ^ EcFcGcHcIcJcKc-f.fqgrg/fsg:f;ftgugvgwg7g8g9g!g#gxgygzg$g%g'g(g)g,b*g+gAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPg=fVcOcPc-b.b/b:bQg2e,gRg6 7 8 / yf~bzflcAf# $ % Bfr Cf' DfEfFf: Gf( HfmcIfo p q ) ncJfocKfpcLfqcMfNfOfPfQfRfSfTfUficjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[b~fagbgcgdgeg3efggghgig[fjgeckglg]b; QcRc$c3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'byc8c(b)bzcAc{b|bBcCc*b+b4e5eSgTga b c ofZe0e1e9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 6eWe?dId7d%caegfUg8dhf7euf~evfhcDcfds t Ncdded* + fcgc8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeVeXewf@dbfcfifpfVg-gWg.gmg= dfngce#fYeef[d2g}effUeaf.dh i j VfWfthXfYfZf0f3f4f5f6f7f8f9f!fUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dieQdRd. WdXdYdjekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeYiZdqf0d1d2d3d4d5dWcXc}b6d
335 self._memory_resource = mr 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z mf0 1 2 3 4 5 ? @ [ ] ^ EcFcGcHcIcJcKc-f.fqgrg/fsg:f;ftgugvgwg7g8g9g!g#gxgygzg$g%g'g(g)g,b*g+gAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPg=fVcOcPc-b.b/b:bQg2e,gRg6 7 8 / yf~bzflcAf# $ % Bfr Cf' DfEfFf: Gf( HfmcIfo p q ) ncJfocKfpcLfqcMfNfOfPfQfRfSfTfUficjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[b~fagbgcgdgeg3efggghgig[fjgeckglg]b; QcRc$c3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'byc8c(b)bzcAc{b|bBcCc*b+b4e5eSgTga b c ofZe0e1e9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 6eWe?dId7d%caegfUg8dhf7euf~evfhcDcfds t Ncdded* + fcgc8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeVeXewf@dbfcfifpfVg-gWg.gmg= dfngce#fYeef[d2g}effUeaf.dh i j VfWfthXfYfZf0f3f4f5f6f7f8f9f!fUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dieQdRd. WdXdYdjekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeYiZdqf0d1d2d3d4d5dWcXc}b6d
336 self._ipc_data = IPCDataForBuffer(ipc_descriptor, True) if ipc_descriptor is not None else None 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z mf0 1 2 3 4 5 ? @ [ ] ^ EcFcGcHcIcJcKc-f.fqgrg/fsg:f;ftgugvgwg7g8g9g!g#gxgygzg$g%g'g(g)g,b*g+gAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPg=fVcOcPc-b.b/b:bQg2e,gRg6 7 8 / yf~bzflcAf# $ % Bfr Cf' DfEfFf: Gf( HfmcIfo p q ) ncJfocKfpcLfqcMfNfOfPfQfRfSfTfUficjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[b~fagbgcgdgeg3efggghgig[fjgeckglg]b; QcRc$c3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'byc8c(b)bzcAc{b|bBcCc*b+b4e5eSgTga b c ofZe0e1e9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 6eWe?dId7d%caegfUg8dhf7euf~evfhcDcfds t Ncdded* + fcgc8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeVeXewf@dbfcfifpfVg-gWg.gmg= dfngce#fYeef[d2g}effUeaf.dh i j VfWfthXfYfZf0f3f4f5f6f7f8f9f!fUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dieQdRd. WdXdYdjekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeYiZdqf0d1d2d3d4d5dWcXc}b6d
337 self._owner = owner 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z mf0 1 2 3 4 5 ? @ [ ] ^ EcFcGcHcIcJcKc-f.fqgrg/fsg:f;ftgugvgwg7g8g9g!g#gxgygzg$g%g'g(g)g,b*g+gAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPg=fVcOcPc-b.b/b:bQg2e,gRg6 7 8 / yf~bzflcAf# $ % Bfr Cf' DfEfFf: Gf( HfmcIfo p q ) ncJfocKfpcLfqcMfNfOfPfQfRfSfTfUficjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[b~fagbgcgdgeg3efggghgig[fjgeckglg]b; QcRc$c3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'byc8c(b)bzcAc{b|bBcCc*b+b4e5eSgTga b c ofZe0e1e9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 6eWe?dId7d%caegfUg8dhf7euf~evfhcDcfds t Ncdded* + fcgc8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeVeXewf@dbfcfifpfVg-gWg.gmg= dfngce#fYeef[d2g}effUeaf.dh i j VfWfthXfYfZf0f3f4f5f6f7f8f9f!fUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dieQdRd. WdXdYdjekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeYiZdqf0d1d2d3d4d5dWcXc}b6d
338 self._mem_attrs_inited.store(False) 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z mf0 1 2 3 4 5 ? @ [ ] ^ EcFcGcHcIcJcKc-f.fqgrg/fsg:f;ftgugvgwg7g8g9g!g#gxgygzg$g%g'g(g)g,b*g+gAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPg=fVcOcPc-b.b/b:bQg2e,gRg6 7 8 / yf~bzflcAf# $ % Bfr Cf' DfEfFf: Gf( HfmcIfo p q ) ncJfocKfpcLfqcMfNfOfPfQfRfSfTfUficjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[b~fagbgcgdgeg3efggghgig[fjgeckglg]b; QcRc$c3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'byc8c(b)bzcAc{b|bBcCc*b+b4e5eSgTga b c ofZe0e1e9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 6eWe?dId7d%caegfUg8dhf7euf~evfhcDcfds t Ncdded* + fcgc8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeVeXewf@dbfcfifpfVg-gWg.gmg= dfngce#fYeef[d2g}effUeaf.dh i j VfWfthXfYfZf0f3f4f5f6f7f8f9f!fUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dieQdRd. WdXdYdjekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeYiZdqf0d1d2d3d4d5dWcXc}b6d
339 return self 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z mf0 1 2 3 4 5 ? @ [ ] ^ EcFcGcHcIcJcKc-f.fqgrg/fsg:f;ftgugvgwg7g8g9g!g#gxgygzg$g%g'g(g)g,b*g+gAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPg=fVcOcPc-b.b/b:bQg2e,gRg6 7 8 / yf~bzflcAf# $ % Bfr Cf' DfEfFf: Gf( HfmcIfo p q ) ncJfocKfpcLfqcMfNfOfPfQfRfSfTfUficjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[b~fagbgcgdgeg3efggghgig[fjgeckglg]b; QcRc$c3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'byc8c(b)bzcAc{b|bBcCc*b+b4e5eSgTga b c ofZe0e1e9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 6eWe?dId7d%caegfUg8dhf7euf~evfhcDcfds t Ncdded* + fcgc8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeVeXewf@dbfcfifpfVg-gWg.gmg= dfngce#fYeef[d2g}effUeaf.dh i j VfWfthXfYfZf0f3f4f5f6f7f8f9f!fUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dieQdRd. WdXdYdjekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeYiZdqf0d1d2d3d4d5dWcXc}b6d
341 @staticmethod
342 def _reduce_helper(mr, ipc_descriptor):
343 cdef ContextHandle h_ctx = get_current_context()
344 cdef int device_id
345 if not h_ctx:
346 # Spawned processes unpickle arguments before entering their target,
347 # so initialize the context needed to bind the default-stream token.
348 device_id = mr.device_id
349 (Device(device_id) if device_id >= 0 else Device()).set_current()
350 # The parent process's stream is not portable across processes, so the
351 # pickle path cannot thread an explicit stream through. Seed the
352 # imported buffer's deallocation with the current context's default
353 # stream; the receiver can override it before or during close.
354 return Buffer.from_ipc_descriptor(mr, ipc_descriptor, stream=default_stream())
356 def __reduce__(self) -> tuple[object, ...]:
357 # Unpickling performs a live CUDA IPC import from descriptor bytes in the
358 # pickle stream. Only deserialize Buffers from a trusted principal.
359 # Must not serialize the parent's stream!
360 Buffer_check_open(self) 2ShThUhVhQcRcWhXhYhZh0h1h3b4b5b6b_ ` 7b8b{ | 9b!b#b$b%b'b(b)b*b+b
361 return Buffer._reduce_helper, (self.memory_resource, self.ipc_descriptor) 2ShThUhVhQcRcWhXhYhZh0h1h3b4b5b6b_ ` 7b8b{ | 9b!b#b$b%b'b(b)b*b+b
363 @staticmethod
364 def from_handle(
365 ptr: DevicePointerType, size_t size, mr: MemoryResource | None = None,
366 owner: object | None = None,
367 *,
368 stream: Stream | GraphBuilder | None = None,
369 ) -> Buffer:
370 """Create a new :class:`Buffer` object from a pointer.
372 Parameters
373 ----------
374 ptr : :obj:`~_memory.DevicePointerType`
375 Allocated buffer handle object
376 size : int
377 Memory size of the buffer
378 mr : :obj:`~_memory.MemoryResource`, optional
379 Memory resource associated with the buffer. When provided,
380 :meth:`MemoryResource.deallocate` is called when the buffer is
381 closed or garbage collected.
382 owner : object, optional
383 An object holding external allocation that the ``ptr`` points to.
384 The reference is kept as long as the buffer is alive.
385 The ``owner`` and ``mr`` cannot be specified together.
386 stream : :obj:`~_stream.Stream` | :obj:`~graph.GraphBuilder`, optional
387 Keyword-only. The stream used to order the buffer's deallocation
388 when ``mr`` owns the pointer. Defaults to ``default_stream()``.
389 Recording a default-stream token requires a CUDA context to be
390 current. Host-only resources (``mr.is_device_accessible`` is
391 ``False``) record no stream and need no context. If the buffer may
392 be freed from a different host thread,
393 pass a stream other than the per-thread default stream, which
394 refers to a different stream on each thread.
396 Note
397 ----
398 When neither ``mr`` nor ``owner`` is specified, this creates a
399 non-owning reference. The pointer will NOT be freed when the
400 :class:`Buffer` is closed or garbage collected.
401 """
402 return Buffer._init(ptr, size, mr=mr, owner=owner, stream=stream) 2@ [ ] ^ EcFcGcHcIcJcKc/ ~blc# $ : ( mco p q ) ncocpcqck ac;bl m n bc=bTcLc?bccdc@b[b~fagbgcgdgeg3efggghgigjgeckglg]b; QcRc$c3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'byc8c(b)bzcAc{b|bBcCc*b+bZe0e1e6eWe?dId7d%caegfUg8dhf7euf~evfhcDcfds t Ncdded* + fcgc8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeVeXewf@dbfcfuhifVgWgDj= Fjdfngce#fYeef[d2g}eaf.dth, - . WdXdYdYiZd0d1d2d3d4d5d6d
404 @classmethod
405 def from_ipc_descriptor(
406 cls, mr: DeviceMemoryResource | PinnedMemoryResource | VirtualMemoryResource,
407 IPCBufferDescriptor ipc_descriptor not None: IPCBufferDescriptor,
408 *, Stream stream not None: Stream
409 ) -> Buffer:
410 """Import a buffer that was exported from another process.
412 Parameters
413 ----------
414 mr : :obj:`~_memory.DeviceMemoryResource` | :obj:`~_memory.PinnedMemoryResource` | :obj:`~_memory.VirtualMemoryResource`
415 The IPC-enabled memory resource matching the exporting process. A
416 descriptor exported from a :class:`VirtualMemoryBuffer` is imported
417 with a :class:`VirtualMemoryResource` of this process whose
418 ``handle_type`` matches the exporter's; the import maps the shared
419 physical memory for that resource's device with that resource's
420 access options.
421 ipc_descriptor : :obj:`~_memory.IPCBufferDescriptor`
422 The descriptor exported from another process.
423 stream : :obj:`~_stream.Stream`
424 Keyword-only. The stream used for asynchronous deallocation when
425 the buffer is closed or garbage collected.
427 Note
428 ----
429 The descriptor payload and ``size`` are supplied by the exporting peer
430 and must be treated as untrusted input unless the peer is known to be
431 cooperating.
432 """
433 return _ipc.Buffer_from_ipc_descriptor(cls, mr, ipc_descriptor, stream) 2; Y@Z@0@og/geh:gwh;gXg3h8c=g1g3g
435 @property
436 @cython.critical_section
437 def ipc_descriptor(self) -> IPCBufferDescriptor:
438 """Descriptor for sharing this buffer with other processes.
440 A pool-backed buffer caches its descriptor; a
441 :class:`VirtualMemoryBuffer` exports a new one on every access.
442 """
443 Buffer_check_open(self) 2ShThUhVhhiiijiki; QcRcliminioiWhpiXhqiYhriZhsi0hti1hui3b4b_b`b5b6b_ ` 7b8b{ | 9b!b#b$b%b'b8c(b)b{b|b*b+bVe1glf3g1f2f
444 cdef object ipc_data
445 if self._ipc_data is None: 2ShThUhVhhiiijiki; QcRcliminioiWhpiXhqiYhriZhsi0hti1hui3b4b_b`b5b6b_ ` 7b8b{ | 9b!b#b$b%b'b8c(b)b{b|b*b+b1glf3g1f2f
446 ipc_data = IPCDataForBuffer(_ipc.Buffer_get_ipc_descriptor(self), False) 2ShThUhVhhiiijiki; QcRcliminioiWhpiXhqiYhriZhsi0hti1hui3b4b_b`b5b6b_ ` 7b8b{ | 9b!b#b$b%b'b8c(b)b{b|b*b+b1glf3g1f2f
447 if self._ipc_data is None: 2ShThUhVhhiiijiki; QcRcliminioiWhpiXhqiYhriZhsi0hti1hui3b4b_b`b5b6b_ ` 7b8b{ | 9b!b#b$b%b'b(b)b{b|b*b+blf1f2f
448 self._ipc_data = ipc_data 2ShThUhVhhiiijiki; QcRcliminioiWhpiXhqiYhriZhsi0hti1hui3b4b_b`b5b6b_ ` 7b8b{ | 9b!b#b$b%b'b(b)b{b|b*b+blf1f2f
449 return self._ipc_data.ipc_descriptor 2ShThUhVhhiiijiki; QcRcliminioiWhpiXhqiYhriZhsi0hti1hui3b4b_b`b5b6b_ ` 7b8b{ | 9b!b#b$b%b'b(b)b{b|b*b+blf1f2f
451 def close(self, stream: Stream | GraphBuilder | None = None) -> None:
452 """Deallocate this buffer asynchronously on the given stream.
454 This buffer is released back to their memory resource
455 asynchronously on the given stream.
457 Parameters
458 ----------
459 stream : :obj:`~_stream.Stream` | :obj:`~graph.GraphBuilder`, optional
460 The stream object to use for asynchronous deallocation. If None,
461 the deallocation stream stored in the handle is used.
463 See Also
464 --------
465 set_deallocation_stream
466 Change the deallocation stream without closing the buffer.
467 """
468 Buffer_close(self, stream) 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z GhHhmfIhJh,h$fOh%f~g'fPhQh-hRh0 1 2 3 4 5 .h/h:h@ [ ] ^ EcFcGcHcIcJcKc^f_f`f2e6 7 8 {f|f}f/ vi~bwilcxi# $ % yir zi' AiBiCi: Di( EimcFio p q ) ncGiocHipcIiqcJiKiLiMiNiOiPiQiRiicjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[bYcZc9i!i#i$i%i'i;h3e(i|iVd)i}i*i+i~i[f,iajec-i.iUc0c+f,fahbhch]b6g; 3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'bycdhog/gehvhfh2h:gghwhhh;gXgYg3h4h8c=g(b)bzcAc{b|bBcCc*b+b5h=h6h?hZg7hih0g@h1c(f?g@gSca b c of9 ! d e f g 6eWe?dId7d%caegf8ds t Nc* + fcgc8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeVeXewf[g]g:d@dbfcfifpf]f;d[h]h^h_h`h{h|h}h~haibicidi1gdfceYeef[dHdSd2gxf=dlf3gei}effUexhjhkhyhlh4g5gmhpgfigi8h)f*f?f9hafnhohphqh!htfzh.d@frhAhBhshZi1f2f/d]d^dde_d`d{d|deefege}dhe~dieQdRdWcXc}b
470 def set_deallocation_stream(self, stream: Stream | GraphBuilder) -> None:
471 """Change the stream that orders this buffer's eventual deallocation.
473 The buffer remains open and usable. A later :meth:`close` without a
474 stream, garbage collection, or release of the final retained device
475 pointer handle uses the replacement stream.
477 This method does not synchronize streams or establish dependencies.
478 The caller must ensure that allocation and all accesses are ordered
479 before the deallocation on ``stream``.
481 Parameters
482 ----------
483 stream : :obj:`~_stream.Stream` | :obj:`~graph.GraphBuilder`
484 The stream to use for eventual asynchronous deallocation.
486 Raises
487 ------
488 RuntimeError
489 If the buffer is already closed, or if a default-stream token
490 cannot be bound because no CUDA context is current.
491 TypeError
492 If ``stream`` is ``None`` or is not an accepted stream object.
494 Notes
495 -----
496 Synchronizing concurrent mutation and destruction of the same buffer
497 is the caller's responsibility.
498 """
499 Buffer_set_deallocation_stream(self, stream) 28dhfXe}e)f*f?f#h
501 def __enter__(self):
502 return self 22e[f6g; ogYg8cZgih0g?g@gScd e f g WeieWcXc
504 def __exit__(self, exc_type, exc_val, exc_tb):
505 self.close() 22e[f6g; ogYg8cZgih0g?g@gScd e f g WeieWcXc
506 return False 22e[f6g; ogYg8cZgih0g?g@gScd e f g WeieWcXc
508 def copy_to(self, Buffer dst: Buffer | None = None, *, stream: Stream | GraphBuilder,
509 options: CopyOptions | None = None) -> Buffer:
510 """Copy from this buffer to the dst buffer asynchronously on the given stream.
512 Copies the data from this buffer to the provided dst buffer.
513 If the dst buffer is not provided, then a new buffer is first
514 allocated using the associated memory resource before the copy.
516 Parameters
517 ----------
518 dst : :obj:`~_memory.Buffer`, optional
519 Destination buffer to copy data to. If not provided, a new buffer
520 is allocated using this buffer's memory resource.
521 stream : :obj:`~_stream.Stream` | :obj:`~graph.GraphBuilder`
522 Keyword argument specifying the stream for the
523 asynchronous copy
524 options : :class:`~utils.CopyOptions`, optional
525 Transfer hints (source access order, location hints, overlap mode).
526 Honored on the CUDA 13 build of ``cuda.core`` with a driver of CUDA
527 13.2 or newer. Not accepted with ``LEGACY_DEFAULT_STREAM``; use
528 ``PER_THREAD_DEFAULT_STREAM`` instead. Not accepted with a
529 capturing stream either, since a graph cannot represent these
530 attributes; use :meth:`graph.GraphNode.memcpy` for a plain,
531 non-attributed copy node, or pass ``options=None``. On an older
532 cuda.bindings/driver, ``src_access_order`` values of ``STREAM``
533 and ``ANY`` are silently ignored; ``DURING_API_CALL`` raises
534 instead of silently downgrading its guarantee.
536 Raises
537 ------
538 TypeError
539 If ``options`` is not a :class:`~utils.CopyOptions` instance, or
540 if ``options`` is given together with ``LEGACY_DEFAULT_STREAM``
541 or a stream currently in graph capture mode.
542 RuntimeError
543 If ``options.src_access_order`` is ``DURING_API_CALL`` and
544 cuda.bindings or the driver is older than CUDA 13.2: falling
545 back to a plain copy cannot honor that guarantee.
547 """
548 Buffer_check_open(self) 2,bOcPc-b.b/b:b% r ' o p q 2c3c4ck ;bl m rcn =b9cLc#c?b^b@b[ba b c d e f g 7d%cVewf:d;d=dh i j
549 cdef Stream s = Stream_accept(stream) 2,bOcPc-b.b/b:b% r ' o p q 2c3c4ck ;bl m rcn =b9cLc#c?b^b@b[ba b c d e f g 7d%cVewf:d;d=dh i j
550 cdef size_t src_size = self._size 2,bOcPc-b.b/b:b% r ' o p q 2c3c4ck ;bl m rcn =b9cLc#c?b^b@b[ba b c d e f g 7d%cVewf:d;d=dh i j
552 if dst is None: 2,bOcPc-b.b/b:b% r ' o p q 2c3c4ck ;bl m rcn =b9cLc#c?b^b@b[ba b c d e f g 7d%cVewf:d;d=dh i j
553 if self._memory_resource is None: 2k wf
554 raise ValueError("a destination buffer must be provided (this " 2wf
555 "buffer does not have a memory_resource)")
556 dst = self._memory_resource.allocate(src_size, stream=s) 1k
557 else:
558 Buffer_check_open(dst) 2,bOcPc-b.b/b:b% r ' o p q 2c3c4ck ;bl m rcn =b9cLc#c?b^b@b[ba b c d e f g 7d%cVe:d;d=dh i j
560 cdef size_t dst_size = dst._size 2,bOcPc-b.b/b:b% r ' o p q 2c3c4ck ;bl m rcn =b9cLc#c?b^b@b[ba b c d e f g 7d%c:d;d=dh i j
561 if dst_size != src_size: 2,bOcPc-b.b/b:b% r ' o p q 2c3c4ck ;bl m rcn =b9cLc#c?b^b@b[ba b c d e f g 7d%c:d;d=dh i j
562 raise ValueError( "buffer sizes mismatch between src and dst (sizes " 27d
563 f"are: src={src_size}, dst={dst_size})" 27d
564 )
565 _dispatch_buffer_copy( 2,bOcPc-b.b/b:b% r ' o p q 2c3c4ck ;bl m rcn =b9cLc#c?b^b@b[ba b c d e f g %c:d;d=dh i j
566 as_cu(dst._h_ptr), as_cu(self._h_ptr), src_size, s, options, "copy_to")
567 return dst 2,bOcPc-b.b/b:b% r ' o p q k ;bl m rcn =bLc#c?b^b@b[ba b c d e f g %c:d;d=dh i j
569 def copy_from(self, Buffer src not None: Buffer, *, stream: Stream | GraphBuilder,
570 options: CopyOptions | None = None) -> None:
571 """Copy from the src buffer to this buffer asynchronously on the given stream.
573 Parameters
574 ----------
575 src : :obj:`~_memory.Buffer`
576 Source buffer to copy data from
577 stream : :obj:`~_stream.Stream` | :obj:`~graph.GraphBuilder`
578 Keyword argument specifying the stream for the
579 asynchronous copy
580 options : :class:`~utils.CopyOptions`, optional
581 Transfer hints (source access order, location hints, overlap mode).
582 Honored on the CUDA 13 build of ``cuda.core`` with a driver of CUDA
583 13.2 or newer. Not accepted with ``LEGACY_DEFAULT_STREAM``; use
584 ``PER_THREAD_DEFAULT_STREAM`` instead. Not accepted with a
585 capturing stream either, since a graph cannot represent these
586 attributes; use :meth:`graph.GraphNode.memcpy` for a plain,
587 non-attributed copy node, or pass ``options=None``. On an older
588 cuda.bindings/driver, ``src_access_order`` values of ``STREAM``
589 and ``ANY`` are silently ignored; ``DURING_API_CALL`` raises
590 instead of silently downgrading its guarantee.
592 Raises
593 ------
594 TypeError
595 If ``options`` is not a :class:`~utils.CopyOptions` instance, or
596 if ``options`` is given together with ``LEGACY_DEFAULT_STREAM``
597 or a stream currently in graph capture mode.
598 RuntimeError
599 If ``options.src_access_order`` is ``DURING_API_CALL`` and
600 cuda.bindings or the driver is older than CUDA 13.2: falling
601 back to a plain copy cannot honor that guarantee.
602 """
603 Buffer_check_open(self) 2@ [ ] ^ EcFcGcHcIcJcKc,bVcPc-b.b/b:b/ lc# $ : ( mc) ncocpcqc2c3c4cacrcbc!cTc^bccdc; QcRc$c3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'byc(b)bzcAc{b|bBcCc*b+bZe0e1e?dIdVe
604 Buffer_check_open(src) 2@ [ ] ^ EcFcGcHcIcJcKc,bVcPc-b.b/b:b/ lc# $ : ( mc) ncocpcqc2c3c4cacrcbc!cTc^bccdc; QcRc$c3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'byc(b)bzcAc{b|bBcCc*b+bZe0e1e?dIdVe
605 cdef Stream s = Stream_accept(stream) 2@ [ ] ^ EcFcGcHcIcJcKc,bVcPc-b.b/b:b/ lc# $ : ( mc) ncocpcqc2c3c4cacrcbc!cTc^bccdc; QcRc$c3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'byc(b)bzcAc{b|bBcCc*b+bZe0e1e?dId
606 cdef size_t dst_size = self._size 2@ [ ] ^ EcFcGcHcIcJcKc,bVcPc-b.b/b:b/ lc# $ : ( mc) ncocpcqc2c3c4cacrcbc!cTc^bccdc; QcRc$c3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'byc(b)bzcAc{b|bBcCc*b+bZe0e1e?dId
607 cdef size_t src_size = src._size 2@ [ ] ^ EcFcGcHcIcJcKc,bVcPc-b.b/b:b/ lc# $ : ( mc) ncocpcqc2c3c4cacrcbc!cTc^bccdc; QcRc$c3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'byc(b)bzcAc{b|bBcCc*b+bZe0e1e?dId
609 if src_size != dst_size: 2@ [ ] ^ EcFcGcHcIcJcKc,bVcPc-b.b/b:b/ lc# $ : ( mc) ncocpcqc2c3c4cacrcbc!cTc^bccdc; QcRc$c3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'byc(b)bzcAc{b|bBcCc*b+bZe0e1e?dId
610 raise ValueError( "buffer sizes mismatch between src and dst (sizes " 2?d
611 f"are: src={src_size}, dst={dst_size})" 2?d
612 )
613 _dispatch_buffer_copy( 2@ [ ] ^ EcFcGcHcIcJcKc,bVcPc-b.b/b:b/ lc# $ : ( mc) ncocpcqc2c3c4cacrcbc!cTc^bccdc; QcRc$c3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'byc(b)bzcAc{b|bBcCc*b+bZe0e1eId
614 as_cu(self._h_ptr), as_cu(src._h_ptr), dst_size, s, options, "copy_from")
616 def fill(self, value: int | BufferProtocol, *, stream: Stream | GraphBuilder) -> None:
617 """Fill this buffer with a repeating byte pattern.
619 Parameters
620 ----------
621 value : int | :obj:`collections.abc.Buffer`
622 - int: Must be in range [0, 256). Converted to 1 byte.
623 - :obj:`collections.abc.Buffer`: Must be 1, 2, or 4 bytes.
624 stream : :obj:`~_stream.Stream` | :obj:`~graph.GraphBuilder`
625 Stream for the asynchronous fill operation.
627 Raises
628 ------
629 TypeError
630 If value is not an int and does not support the buffer protocol.
631 ValueError
632 If value byte length is not 1, 2, or 4.
633 If buffer size is not divisible by value byte length.
634 OverflowError
635 If int value is outside [0, 256).
637 """
638 Buffer_check_open(self) 2KhLhMh$fNh%f'f@ [ ] ^ ,bVcOcPc-b.b/b:b/ ~br : o p q k l m n 8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eVe
639 cdef Stream s_stream = Stream_accept(stream) 2KhLhMh$fNh%f'f@ [ ] ^ ,bVcOcPc-b.b/b:b/ ~br : o p q k l m n 8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|e
640 cdef unsigned int val
641 cdef unsigned int elem_size
642 val, elem_size = _parse_fill_value(value) 2KhLhMh$fNh%f'f@ [ ] ^ ,bVcOcPc-b.b/b:b/ ~br : o p q k l m n 8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|e
644 cdef size_t buffer_size = self._size 2KhLhMh$fNh%f'f@ [ ] ^ ,bVcOcPc-b.b/b:b/ ~br : o p q k l m n Jd9dgd!dhdKdidLdMdNdjdkdldmdndodOdPdpdqd#drdsd$dtd%d'c'd(cud)cvdwdxd*c+c,c-c.c/cydzd:c;c(d=c?c)dAd*d@c+d[cBd]cCdDdEd^c_c`c{c|c}cFdGd~cad,dbdcd-d
645 cdef cydriver.CUdeviceptr dst = as_cu(self._h_ptr) 2KhLhMh$fNh%f'f@ [ ] ^ ,bVcOcPc-b.b/b:b/ ~br : o p q k l m n Jd9dgd!dhdKdidLdMdNdjdkdldmdndodOdPdpdqd#drdsd$dtd%d'c'd(cud)cvdwdxd*c+c,c-c.c/cydzd:c;c(d=c?c)dAd*d@c+d[cBd]cCdDdEd^c_c`c{c|c}cFdGd~cad,dbdcd-d
646 cdef cydriver.CUstream s = as_cu(s_stream._h_stream) 2KhLhMh$fNh%f'f@ [ ] ^ ,bVcOcPc-b.b/b:b/ ~br : o p q k l m n Jd9dgd!dhdKdidLdMdNdjdkdldmdndodOdPdpdqd#drdsd$dtd%d'c'd(cud)cvdwdxd*c+c,c-c.c/cydzd:c;c(d=c?c)dAd*d@c+d[cBd]cCdDdEd^c_c`c{c|c}cFdGd~cad,dbdcd-d
648 if elem_size == 1: 2KhLhMh$fNh%f'f@ [ ] ^ ,bVcOcPc-b.b/b:b/ ~br : o p q k l m n Jd9dgd!dhdKdidLdMdNdjdkdldmdndodOdPdpdqd#drdsd$dtd%d'c'd(cud)cvdwdxd*c+c,c-c.c/cydzd:c;c(d=c?c)dAd*d@c+d[cBd]cCdDdEd^c_c`c{c|c}cFdGd~cad,dbdcd-d
649 with nogil: 2KhLhMh$fNh%f'f@ [ ] ^ ,bVcOcPc-b.b/b:b/ ~br : o p q k l m n JdKdLdMdNdOdPdtdudvdwdxdydzdAdBdCdDdEdFdGd
650 HANDLE_RETURN(cydriver.cuMemsetD8Async(dst, val, buffer_size, s)) 2KhLhMh$fNh%f'f@ [ ] ^ ,bVcOcPc-b.b/b:b/ ~br : o p q k l m n JdKdLdMdNdOdPdtdudvdwdxdydzdAdBdCdDdEdFdGd
651 elif elem_size == 2:
652 if buffer_size & 0x1: 29dgdjdkdldpdqd#d%d'c*c+c,c:c;c(d*d@c^c_c`c~cad,d
653 raise ValueError(f"buffer size ({buffer_size}) must be divisible by 2") 29d#d%d(d*d,d
654 with nogil: 2gdjdkdldpdqd'c*c+c,c:c;c@c^c_c`c~cad
655 HANDLE_RETURN(cydriver.cuMemsetD16Async(dst, val, buffer_size // 2, s)) 2gdjdkdldpdqd'c*c+c,c:c;c@c^c_c`c~cad
656 elif elem_size == 4:
657 if buffer_size & 0x3: 2!dhdidmdndodrdsd$d'd(c)c-c.c/c=c?c)d+d[c]c{c|c}cbdcd-d
658 raise ValueError(f"buffer size ({buffer_size}) must be divisible by 4") 2!d$d'd)d+d-d
659 with nogil: 2hdidmdndodrdsd(c)c-c.c/c=c?c[c]c{c|c}cbdcd
660 HANDLE_RETURN(cydriver.cuMemsetD32Async(dst, val, buffer_size // 4, s)) 2hdidmdndodrdsd(c)c-c.c/c=c?c[c]c{c|c}cbdcd
662 def __dlpack__(
663 self,
664 *,
665 stream: int | None = None,
666 max_version: tuple[int, int] | None = None,
667 dl_device: tuple[int, int] | None = None,
668 copy: bool | None = None,
669 ) -> object:
670 # Note: we ignore the stream argument entirely (as if it is -1).
671 # It is the user's responsibility to maintain stream order.
672 Buffer_check_open(self) 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 a b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 7efdVe= 7ch i j 5c6c}b
673 if dl_device is not None: 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 a b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 7efd= 7ch i j 5c6c}b
674 raise BufferError("Sorry, not supported: dl_device other than None") 2fd
675 if copy is True: 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 a b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 7efd= 7ch i j 5c6c}b
676 raise BufferError("Sorry, not supported: copy=True") 2fd
677 if max_version is None: 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 a b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 7efd= 7ch i j 5c6c}b
678 versioned = False 27efd
679 else:
680 if not isinstance(max_version, tuple) or len(max_version) != 2: 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 a b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g fd= 7ch i j 5c6c}b
681 raise BufferError(f"Expected max_version tuple[int, int], got {max_version}") 2fd
682 versioned = max_version >= (1, 0) 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 a b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g fd= 7ch i j 5c6c}b
683 return make_py_capsule(self, versioned) 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 a b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 7efd= 7ch i j 5c6c}b
685 def __dlpack_device__(self) -> tuple[int, int]:
686 Buffer_check_open(self) 2uf~evfhcDcVe= 7c5c6c}b
687 return classify_dl_device(self) 2uf~evfhcDc= 7c5c6c}b
689 def __buffer__(self, flags: int, /) -> memoryview:
690 # Support for Python-level buffer protocol as per PEP 688.
691 # This raises a BufferError unless:
692 # 1. Python is 3.12+
693 # 2. This Buffer object is host accessible
694 raise NotImplementedError("WIP: Buffer.__buffer__ hasn't been implemented yet.")
696 def __release_buffer__(self, buffer: memoryview, /) -> None:
697 # Supporting method paired with __buffer__.
698 raise NotImplementedError("WIP: Buffer.__release_buffer__ hasn't been implemented yet.")
700 @property
701 def device_id(self) -> int:
702 """Return the device ordinal of this buffer, or -1 for memory not bound to a device."""
703 Buffer_check_open(self) 2SiTiUi4e5e1cSc~efds t Ncdded* + fcgcVe[g]gViWiXixf4g5gpgtfUd5c6c, - ieQdRd. WdXdYdjekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeZd0d1d2d3d4d5dWcXc}b6d
704 if self._memory_resource is not None: 2SiTiUi4e5e1cSc~efds t Ncdded* + fcgc[g]gViWiXixf4g5gpgtfUd5c6c, - ieQdRd. WdXdYdjekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeZd0d1d2d3d4d5dWcXc}b6d
705 return self._memory_resource.device_id 2SiTiUi4e5e~efd[g]gViWiXixf4g5gpgtfUd5c6cieQdRdjekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeWcXc}b
706 _init_memory_attrs(self) 21cScs t Ncdded* + fcgc, - . WdXdYdZd0d1d2d3d4d5d6d
707 return self._mem_attrs.device_id 21cScs t Ncdded* + fcgc, - . WdXdYdZd0d1d2d3d4d5d6d
709 @property
710 def handle(self) -> int:
711 """Return the buffer handle object.
713 .. caution::
715 This handle is a Python object. To get the memory address of the underlying C
716 handle, call ``int(Buffer.handle)``.
717 """
718 # Return raw integer for compatibility with ctypes and other tools
719 # that expect a raw pointer value
720 return as_intptr(self._h_ptr) 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z GhHhIhJhKhLhMh$fNhOh%f~g'f4iPhQhRh0 1 2 3 4 5 ? @ [ ] ^ EcFcGcHcIcJcKcSiTiUi-f.fqgrg/fsg:f;ftgugvgwgxgygzg,bAgBgCgDgEgFgGgHgIgJgKgLgMgNgOgPg=fVcOcPc-b.b/b:bQg2eRg6 7 8 / ~blc# $ % r ' : ( mco p q ) ncocpcqck ac;bl m n bc=bTcLc#c?b^bccdc@b[b^g~f_gag`gbg{gcg|gdgeg3efggghgigjgeckg}glgUc]b; QcRc$c3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'bycdhog/gfh:gghhh;gXg8c=g(b)bzcAc{b|bBcCc*b+b4e5e5h6hSgTgZg7h0g1c(f@gSca b c Ze0e1e9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 6eWeId%c8dhf7efds t * + td'c(cud)cvdwdxd*c+c,c-c.c/cydzd:c;c=c?cAd@c[cBd]cCdDdEd^c_c`c{c|c}cFdGd~cadbdcdTd:d@dmg= 7c;dViWiXidfngef[d=dffxhjhkhlhmhpg8h?fafnhohphqhtfrh#hAhshh i j ZizjthUd5c6c, - /dieQdRd. WdXdYdjekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeZdqf0d1d2d3d4d5dWcXc}b6d
722 @property
723 def is_closed(self) -> bool:
724 """Whether this buffer has been closed."""
725 return self._h_ptr.get() == NULL 2^g_g`g{g|gDh[fEhFh}gXe@fZi
727 def __eq__(self, other: object) -> bool:
728 if not isinstance(other, Buffer): 2.f/f:f;fzjthT@GjAjBj
729 return NotImplemented 2zjT@
730 cdef Buffer other_buf = <Buffer>other 2.f/f:f;fzjthGjAjBj
731 return (as_intptr(self._h_ptr) == as_intptr(other_buf._h_ptr) and 2.f/f:f;fzjthGjAjBj
732 self._size == other_buf._size) 2zjthAjBj
734 def __hash__(self) -> int:
735 return hash((as_intptr(self._h_ptr), self._size)) 2th1@2@3@4@AjBj
737 def __repr__(self) -> str:
738 maybe_is_mapped = " is_mapped=True" if self.is_mapped else "" 2-f=fZiHj
739 return f"<Buffer ptr={as_intptr(self._h_ptr):#x} size={self._size}{maybe_is_mapped}>" 2-f=fZiHj
741 @property
742 def is_device_accessible(self) -> bool:
743 """Return True if this buffer can be accessed by the GPU, otherwise False."""
744 Buffer_check_open(self) 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 1cSca b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 7euf~evfhcDcfds t Ncdded* + fcgcTdVe= 7c]fxflftfh i j Ud5c6c, - . WdXdYdjekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeZd0d1d2d3d4d5dWcXc}b6d
745 if self._memory_resource is not None: 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 1cSca b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 7euf~evfhcDcfds t Ncdded* + fcgcTd= 7c]fxflftfh i j Ud5c6c, - . WdXdYdjekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeZd0d1d2d3d4d5dWcXc}b6d
746 return self._memory_resource.is_device_accessible 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 a b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 7euf~evfhcDcfdTd= 7c]fxflftfh i j Ud5c6cjekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeWcXc}b
747 _init_memory_attrs(self) 21cScs t Ncdded* + fcgc, - . WdXdYdZd0d1d2d3d4d5d6d
748 return self._mem_attrs.is_device_accessible 21cScs t Ncdded* + fcgc, - . WdXdYdZd0d1d2d3d4d5d6d
750 @property
751 def is_host_accessible(self) -> bool:
752 """Return True if this buffer can be accessed by the CPU, otherwise False."""
753 Buffer_check_open(self) 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 a b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 7euf~evfhcDcfds t Ncdded* + fcgcJdgdhdKdidLdMdNdjdkdldmdndodOdPdpdqdrdsdtd'c(cud)cvdwdxd*c+c,c-c.c/cydzd:c;c=c?cAd@c[cBd]cCdDdEd^c_c`c{c|c}cFdGd~cadbdcdTdVebfcf= 7c]fxflftfh i j Ud5c6c, - . }b
754 if self._memory_resource is not None: 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 a b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 7euf~evfhcDcfds t Ncdded* + fcgcJdgdhdKdidLdMdNdjdkdldmdndodOdPdpdqdrdsdtd'c(cud)cvdwdxd*c+c,c-c.c/cydzd:c;c=c?cAd@c[cBd]cCdDdEd^c_c`c{c|c}cFdGd~cadbdcdTdbfcf= 7c]fxflftfh i j Ud5c6c, - . }b
755 return self._memory_resource.is_host_accessible 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 a b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 7euf~evfhcDcfdJdgdhdKdidLdMdNdjdkdldmdndodOdPdpdqdrdsdtd'c(cud)cvdwdxd*c+c,c-c.c/cydzd:c;c=c?cAd@c[cBd]cCdDdEd^c_c`c{c|c}cFdGd~cadbdcdTdbfcf= 7c]fxflftfh i j Ud5c6c}b
756 _init_memory_attrs(self) 2s t Ncdded* + fcgc, - .
757 return self._mem_attrs.is_host_accessible 2s t Ncdded* + fcgc, - .
759 @property
760 def is_managed(self) -> bool:
761 """Return True if this buffer is CUDA managed (unified) memory, otherwise False."""
762 Buffer_check_open(self) 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 YcZc^g_g`g{g|gDh$h%hVd'h(h)h*hEhFhec+h}gUc0c]ba b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g hcDcVe= 7cHdSdh i j
763 _init_memory_attrs(self) 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 YcZc^g_g`g{g|gDh$h%hVd'h(h)h*hEhFhec+h}gUc0c]ba b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g hcDc= 7cHdSdh i j
764 if self._mem_attrs.is_managed: 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 YcZc^g_g`g{g|gDh$h%hVd'h(h)h*hEhFhec+h}gUc0c]ba b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g hcDc= 7cHdSdh i j
765 return True 2YcZc^g_g`g{g|gDh$h%hVd'h(h)h*hEhFhec+h}gUc0cDc= 7c
766 # Pool-allocated managed memory does not set CU_POINTER_ATTRIBUTE_IS_MANAGED,
767 # so fall back to the memory resource when it advertises managed allocations.
768 return self._memory_resource is not None and self._memory_resource.is_managed 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 ]ba b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g hcHdSdh i j
770 @property
771 def is_mapped(self) -> bool:
772 """Return True if this buffer is mapped into the process via IPC."""
773 return getattr(self._ipc_data, "is_mapped", False) 2-f=f_ ` kcehXg=gTdZiHj
776 @property
777 def memory_resource(self) -> MemoryResource:
778 """Return the memory resource associated with this buffer."""
779 return self._memory_resource 2~g@ [ ] ^ EcFcGcHcIcJcKc/ lc# $ : ( mc) ncocpcqcShThUhVh5ihiiijiki; QcRc$climinioiWhpiXhqiYhriZhsi0hti1hui6i7i8i3b4bsc_b`b5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'bycdh/gvhfh2h:gghhh;gXgYg4h8c(b)bzcAc{b|bBcCc*b+b1cSc6eWeTd:d]f;d1gxf=dlf3gjhkhyhlh4g5gmhpg)f*f9hnhohphqhtfzh.drhBhsh1f2fUdWdXdYdjekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfPeQekfReSeTeZd0d1d2d3d4d5dWcXc}b6d
781 @property
782 def size(self) -> int:
783 """Return the memory size of this buffer."""
784 return self._size 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z ~g0 1 2 3 4 5 ? @ [ ] ^ EcFcGcHcIcJcKcSiTiUi,bPc-b.b/b:b6 7 8 / ~blc# $ % r ' : ( djmco p q ) ncocpcqcejfjgjicjck ac;bl m n bc=bTcLc#c?b^bccdc@b[b^g~f_gag`gbg{gcg|gdgeg3efggghgigjgeckg}glg]bShThUhVhhiiijiki; QcRc$climinioiWhpiXhqiYhriZhsi0hti1hui3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'bycdhog/gehvhfh:gghwhhh;gXgYg=g(b)bzcAc{b|bBcCc*b+b4e5eZg0g1c(f?ga b c Ze0e1e9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g 8dhf7efdTd[g]g:dmg= 7c]f;dViWiXixf=dlfffxhjhkhyhlh4g5gmhpg)f*fafnhohphqh!htfzhrh#hAhBhshh i j th1f2fUd5c6c/d]d^d_d`d{d|d}d~dieQdRdjekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfPeQekfReSeTeWcXc}b
786 @property
787 def owner(self) -> object:
788 """Return the object holding external allocation."""
789 return self._owner 2Nc
792cdef class MemoryResource:
793 """Abstract base class for memory resources that manage allocation and
794 deallocation of buffers.
796 Subclasses must implement methods for allocating and deallocation, as well
797 as properties associated with this memory resource from which all allocated
798 buffers will inherit. (Since all :class:`Buffer` instances allocated and
799 returned by the :meth:`allocate` method would hold a reference to self, the
800 buffer properties are retrieved simply by looking up the underlying memory
801 resource's respective property.)
802 """
804 def allocate(self, size_t size, *, stream: Stream | GraphBuilder) -> Buffer:
805 """Allocate a buffer of the requested size.
807 Parameters
808 ----------
809 size : int
810 The size of the buffer to allocate, in bytes.
811 stream : :obj:`~_stream.Stream` | :obj:`~graph.GraphBuilder`
812 Keyword-only. The stream on which to perform the allocation
813 asynchronously. Must be passed explicitly; pass
814 ``device.default_stream`` to use the default stream. For subclasses
815 that support stream-ordered deallocation, this stream also orders
816 the buffer's eventual deallocation, so if the buffer may be freed
817 from a different host thread, prefer a stream other than the
818 per-thread default stream, which refers to a different stream on
819 each thread.
821 Returns
822 -------
823 Buffer
824 The allocated buffer object, which can be used for device or host operations
825 depending on the resource's properties.
826 """
827 raise TypeError("MemoryResource.allocate must be implemented by subclasses.") 2Cj
829 def deallocate(
830 self,
831 ptr: DevicePointerType,
832 size_t size,
833 *,
834 stream: Stream | GraphBuilder
835 ) -> None:
836 """Deallocate a buffer previously allocated by this resource.
838 Parameters
839 ----------
840 ptr : :obj:`~_memory.DevicePointerType`
841 The pointer or handle to the buffer to deallocate.
842 size : int
843 The size of the buffer to deallocate, in bytes.
844 stream : :obj:`~_stream.Stream` | :obj:`~graph.GraphBuilder`
845 Keyword-only. The stream on which to perform the deallocation
846 asynchronously. Must be passed explicitly; pass
847 ``device.default_stream`` to use the default stream.
848 """
849 raise TypeError("MemoryResource.deallocate must be implemented by subclasses.") 2Cj
851 @property
852 def is_device_accessible(self) -> bool:
853 """Whether buffers allocated by this resource are device-accessible."""
854 raise TypeError("MemoryResource.is_device_accessible must be implemented by subclasses.") 2Cj
856 @property
857 def is_host_accessible(self) -> bool:
858 """Whether buffers allocated by this resource are host-accessible."""
859 raise TypeError("MemoryResource.is_host_accessible must be implemented by subclasses.") 2Cj
861 @property
862 def is_managed(self) -> bool:
863 """Whether buffers allocated by this resource are CUDA managed (unified) memory."""
864 return False 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 ? 6 7 8 a b c 9 ! } ~ abbbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2bd e f g hcHdSdh i j
866 @property
867 def device_id(self) -> int:
868 """Device ID associated with this memory resource, or -1 if not applicable."""
869 raise TypeError("MemoryResource.device_id must be implemented by subclasses.") 2Cj
872# Buffer Implementation Helpers
873# -----------------------------
874cdef Buffer Buffer_from_deviceptr_handle(
875 DevicePtrHandle h_ptr,
876 size_t size,
877 MemoryResource mr,
878 object ipc_descriptor = None,
879 type cls = Buffer,
880):
881 """Create a Buffer (or subclass instance) from an existing DevicePtrHandle."""
882 cdef Buffer buf = cls.__new__(cls) 2GhHhIhJhKhLh,h/i:iMh$fNhOh%f~g'f4iPhQh-hRh.h/h:h;i=i?i@ [ ] ^ EcFcGcHcIcJcKcSiTiUi^f_f`f,bVcOc-b.b/b:b{f|f}fyfzfAf# $ % Bfr Cf' DfEfFfGf( HfIfo p q ) JfKfLfMfNfOfPfQfRfSfTfUficjck l m n YcZc;h0iVd1i2i3iUc0c+f,fahbhch6gShThUhVh5ihiii@ijiki[i; QcRc$climi]inioi^iWhpiXhqiYhriZhsi0hti1hui6i_i7i`i8i{i3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'bycdhog/gehvhfh2h:gghwhhh;gXgYg3h4h8c=g(b)bzcAc{b|bBcCc*b+b4e5e5h=h6h?hZg7hih0g@h1c(f?g@gSca b c d e f g s t [g]g:d7c]f;dViWiXi[h]h^h_h`h{h|h}h~haibicidi1gHdSdxf=dlf3geixhjhkhyhlh4g5gmhpgfigi8h)f*f?f9hnhohphqh!htfzh.d@frh#hAhBhshh i j VfWfXfYfZf0f1f2f3f4f5f6f7f8f9f!fUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dQdRd. jekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeqfWcXc}b
883 buf._h_ptr = h_ptr 2GhHhIhJhKhLh,h/i:iMh$fNhOh%f~g'f4iPhQh-hRh.h/h:h;i=i?i@ [ ] ^ EcFcGcHcIcJcKcSiTiUi^f_f`f,bVcOc-b.b/b:b{f|f}fyfzfAf# $ % Bfr Cf' DfEfFfGf( HfIfo p q ) JfKfLfMfNfOfPfQfRfSfTfUficjck l m n YcZc;h0iVd1i2i3iUc0c+f,fahbhch6gShThUhVh5ihiii@ijiki[i; QcRc$climi]inioi^iWhpiXhqiYhriZhsi0hti1hui6i_i7i`i8i{i3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'bycdhog/gehvhfh2h:gghwhhh;gXgYg3h4h8c=g(b)bzcAc{b|bBcCc*b+b4e5e5h=h6h?hZg7hih0g@h1c(f?g@gSca b c d e f g s t [g]g:d7c]f;dViWiXi[h]h^h_h`h{h|h}h~haibicidi1gHdSdxf=dlf3geixhjhkhyhlh4g5gmhpgfigi8h)f*f?f9hnhohphqh!htfzh.d@frh#hAhBhshh i j VfWfXfYfZf0f1f2f3f4f5f6f7f8f9f!fUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dQdRd. jekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeqfWcXc}b
884 buf._size = size 2GhHhIhJhKhLh,h/i:iMh$fNhOh%f~g'f4iPhQh-hRh.h/h:h;i=i?i@ [ ] ^ EcFcGcHcIcJcKcSiTiUi^f_f`f,bVcOc-b.b/b:b{f|f}fyfzfAf# $ % Bfr Cf' DfEfFfGf( HfIfo p q ) JfKfLfMfNfOfPfQfRfSfTfUficjck l m n YcZc;h0iVd1i2i3iUc0c+f,fahbhch6gShThUhVh5ihiii@ijiki[i; QcRc$climi]inioi^iWhpiXhqiYhriZhsi0hti1hui6i_i7i`i8i{i3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'bycdhog/gehvhfh2h:gghwhhh;gXgYg3h4h8c=g(b)bzcAc{b|bBcCc*b+b4e5e5h=h6h?hZg7hih0g@h1c(f?g@gSca b c d e f g s t [g]g:d7c]f;dViWiXi[h]h^h_h`h{h|h}h~haibicidi1gHdSdxf=dlf3geixhjhkhyhlh4g5gmhpgfigi8h)f*f?f9hnhohphqh!htfzh.d@frh#hAhBhshh i j VfWfXfYfZf0f1f2f3f4f5f6f7f8f9f!fUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dQdRd. jekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeqfWcXc}b
885 buf._memory_resource = mr 2GhHhIhJhKhLh,h/i:iMh$fNhOh%f~g'f4iPhQh-hRh.h/h:h;i=i?i@ [ ] ^ EcFcGcHcIcJcKcSiTiUi^f_f`f,bVcOc-b.b/b:b{f|f}fyfzfAf# $ % Bfr Cf' DfEfFfGf( HfIfo p q ) JfKfLfMfNfOfPfQfRfSfTfUficjck l m n YcZc;h0iVd1i2i3iUc0c+f,fahbhch6gShThUhVh5ihiii@ijiki[i; QcRc$climi]inioi^iWhpiXhqiYhriZhsi0hti1hui6i_i7i`i8i{i3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'bycdhog/gehvhfh2h:gghwhhh;gXgYg3h4h8c=g(b)bzcAc{b|bBcCc*b+b4e5e5h=h6h?hZg7hih0g@h1c(f?g@gSca b c d e f g s t [g]g:d7c]f;dViWiXi[h]h^h_h`h{h|h}h~haibicidi1gHdSdxf=dlf3geixhjhkhyhlh4g5gmhpgfigi8h)f*f?f9hnhohphqh!htfzh.d@frh#hAhBhshh i j VfWfXfYfZf0f1f2f3f4f5f6f7f8f9f!fUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dQdRd. jekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeqfWcXc}b
886 buf._ipc_data = IPCDataForBuffer(ipc_descriptor, True) if ipc_descriptor is not None else None 2GhHhIhJhKhLh,h/i:iMh$fNhOh%f~g'f4iPhQh-hRh.h/h:h;i=i?i@ [ ] ^ EcFcGcHcIcJcKcSiTiUi^f_f`f,bVcOc-b.b/b:b{f|f}fyfzfAf# $ % Bfr Cf' DfEfFfGf( HfIfo p q ) JfKfLfMfNfOfPfQfRfSfTfUficjck l m n YcZc;h0iVd1i2i3iUc0c+f,fahbhch6gShThUhVh5ihiii@ijiki[i; QcRc$climi]inioi^iWhpiXhqiYhriZhsi0hti1hui6i_i7i`i8i{i3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'bycdhog/gehvhfh2h:gghwhhh;gXgYg3h4h8c=g(b)bzcAc{b|bBcCc*b+b4e5e5h=h6h?hZg7hih0g@h1c(f?g@gSca b c d e f g s t [g]g:d7c]f;dViWiXi[h]h^h_h`h{h|h}h~haibicidi1gHdSdxf=dlf3geixhjhkhyhlh4g5gmhpgfigi8h)f*f?f9hnhohphqh!htfzh.d@frh#hAhBhshh i j VfWfXfYfZf0f1f2f3f4f5f6f7f8f9f!fUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dQdRd. jekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeqfWcXc}b
887 buf._owner = None 2GhHhIhJhKhLh,h/i:iMh$fNhOh%f~g'f4iPhQh-hRh.h/h:h;i=i?i@ [ ] ^ EcFcGcHcIcJcKcSiTiUi^f_f`f,bVcOc-b.b/b:b{f|f}fyfzfAf# $ % Bfr Cf' DfEfFfGf( HfIfo p q ) JfKfLfMfNfOfPfQfRfSfTfUficjck l m n YcZc;h0iVd1i2i3iUc0c+f,fahbhch6gShThUhVh5ihiii@ijiki[i; QcRc$climi]inioi^iWhpiXhqiYhriZhsi0hti1hui6i_i7i`i8i{i3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'bycdhog/gehvhfh2h:gghwhhh;gXgYg3h4h8c=g(b)bzcAc{b|bBcCc*b+b4e5e5h=h6h?hZg7hih0g@h1c(f?g@gSca b c d e f g s t [g]g:d7c]f;dViWiXi[h]h^h_h`h{h|h}h~haibicidi1gHdSdxf=dlf3geixhjhkhyhlh4g5gmhpgfigi8h)f*f?f9hnhohphqh!htfzh.d@frh#hAhBhshh i j VfWfXfYfZf0f1f2f3f4f5f6f7f8f9f!fUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dQdRd. jekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeqfWcXc}b
888 buf._mem_attrs_inited.store(False) 2GhHhIhJhKhLh,h/i:iMh$fNhOh%f~g'f4iPhQh-hRh.h/h:h;i=i?i@ [ ] ^ EcFcGcHcIcJcKcSiTiUi^f_f`f,bVcOc-b.b/b:b{f|f}fyfzfAf# $ % Bfr Cf' DfEfFfGf( HfIfo p q ) JfKfLfMfNfOfPfQfRfSfTfUficjck l m n YcZc;h0iVd1i2i3iUc0c+f,fahbhch6gShThUhVh5ihiii@ijiki[i; QcRc$climi]inioi^iWhpiXhqiYhriZhsi0hti1hui6i_i7i`i8i{i3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'bycdhog/gehvhfh2h:gghwhhh;gXgYg3h4h8c=g(b)bzcAc{b|bBcCc*b+b4e5e5h=h6h?hZg7hih0g@h1c(f?g@gSca b c d e f g s t [g]g:d7c]f;dViWiXi[h]h^h_h`h{h|h}h~haibicidi1gHdSdxf=dlf3geixhjhkhyhlh4g5gmhpgfigi8h)f*f?f9hnhohphqh!htfzh.d@frh#hAhBhshh i j VfWfXfYfZf0f1f2f3f4f5f6f7f8f9f!fUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dQdRd. jekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeqfWcXc}b
889 return buf 2GhHhIhJhKhLh,h/i:iMh$fNhOh%f~g'f4iPhQh-hRh.h/h:h;i=i?i@ [ ] ^ EcFcGcHcIcJcKcSiTiUi^f_f`f,bVcOc-b.b/b:b{f|f}fyfzfAf# $ % Bfr Cf' DfEfFfGf( HfIfo p q ) JfKfLfMfNfOfPfQfRfSfTfUficjck l m n YcZc;h0iVd1i2i3iUc0c+f,fahbhch6gShThUhVh5ihiii@ijiki[i; QcRc$climi]inioi^iWhpiXhqiYhriZhsi0hti1hui6i_i7i`i8i{i3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'bycdhog/gehvhfh2h:gghwhhh;gXgYg3h4h8c=g(b)bzcAc{b|bBcCc*b+b4e5e5h=h6h?hZg7hih0g@h1c(f?g@gSca b c d e f g s t [g]g:d7c]f;dViWiXi[h]h^h_h`h{h|h}h~haibicidi1gHdSdxf=dlf3geixhjhkhyhlh4g5gmhpgfigi8h)f*f?f9hnhohphqh!htfzh.d@frh#hAhBhshh i j VfWfXfYfZf0f1f2f3f4f5f6f7f8f9f!fUd5c6c, - /d]d^dde_d`d{d|deefege}dhe~dQdRd. jekelemeneoepeqereseteuevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOejfrfsfPeQekfReSeTeqfWcXc}b
892cdef tuple Buffer_coerce_batch(object buffers, str what, str single_hint):
893 """Coerce ``buffers`` to a ``tuple[Buffer, ...]``; reject a bare Buffer.
895 Shared by the batched free functions. Passing one Buffer is rejected
896 rather than treated as a one-element batch so that the per-buffer API
897 named by ``single_hint`` stays the single obvious way to do it.
898 """
899 cdef list out
900 if isinstance(buffers, Buffer): 2/ ~blc# $ % r ' jjkj: ( djmco p q ) ncocpcqcljejfjgjhjijbjcjicjcYcZcUc0c+f,fahbhch
901 raise TypeError( 2cjahbhch
902 f"{what}: pass a sequence of Buffers; for a single buffer use {single_hint}" 2cjahbhch
903 )
904 if not isinstance(buffers, Sequence): 2/ ~blc# $ % r ' jjkj: ( djmco p q ) ncocpcqcljejfjgjhjijbjcjicjcYcZcUc0c+f,f
905 raise TypeError( 2bj
906 f"{what}: buffers must be a sequence of Buffer, got {type(buffers).__name__}" 2bj
907 )
908 if not buffers: 2/ ~blc# $ % r ' jjkj: ( djmco p q ) ncocpcqcljejfjgjhjijbjcjicjcYcZcUc0c+f,f
909 raise ValueError(f"{what}: empty buffers sequence") 2hj
910 out = [] 2/ ~blc# $ % r ' jjkj: ( djmco p q ) ncocpcqcljejfjgjhjijbjcjicjcYcZcUc0c+f,f
911 for item in buffers: 2/ ~blc# $ % r ' jjkj: ( djmco p q ) ncocpcqcljejfjgjhjijbjcjicjcYcZcUc0c+f,f
912 if not isinstance(item, Buffer): 2/ ~blc# $ % r ' jjkj: ( djmco p q ) ncocpcqcljejfjgjhjijbjcjicjcYcZcUc0c+f,f
913 raise TypeError(f"{what}: expected Buffer, got {type(item).__name__}") 2ij
914 Buffer_check_open(<Buffer>item) 2/ ~blc# $ % r ' jjkj: ( djmco p q ) ncocpcqcljejfjgjhjijbjcjicjcYcZcUc0c+f,f
915 out.append(item) 2/ ~blc# $ % r ' jjkj: ( djmco p q ) ncocpcqcljejfjgjhjijbjcjicjcYcZcUc0c+f,f
916 return tuple(out) 2/ ~blc# $ % r ' jjkj: ( djmco p q ) ncocpcqcljejfjgjhjijbjcjicjcYcZcUc0c+f,f
918cdef inline void Buffer_set_deallocation_stream(Buffer self, object stream):
919 """Validate and replace a live buffer's deallocation recipe."""
920 Buffer_check_open(self) 2^f_f`f{f|f}fvi~bwixi# $ % yir zi' AiBiCiDi( EiFio p q ) GiHiIiJiKiLiMiNiOiPiQiRiicjck ac;bl m n bc=bTcLc?bccdc@b[b(fa b c ae8dhfbeXe:d@d;dce[d=d}eUe)f*f?f@f#h
921 cdef Stream s = Stream_accept(stream) 2^f_f`f{f|f}fvi~bwixi# $ % yir zi' AiBiCiDi( EiFio p q ) GiHiIiJiKiLiMiNiOiPiQiRiicjck ac;bl m n bc=bTcLc?bccdc@b[b(fa b c ae8dhfbeXe:d@d;dce[d=d}eUe)f*f?f@f#h
922 _apply_deallocation_stream(self._h_ptr, s._h_stream) 2^f_f`f{f|f}fvi~bwixi# $ % yir zi' AiBiCiDi( EiFio p q ) GiHiIiJiKiLiMiNiOiPiQiRiicjck ac;bl m n bc=bTcLc?bccdc@b[b(fa b c ae8dhfbe:d@d;dce[d=dUe)f*f?f@f#h
925cdef inline void Buffer_close(Buffer self, object stream):
926 """Close a buffer, freeing its memory."""
927 if not self._h_ptr: 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z GhHhmfIhJh,h$fOh%f~g'fPhQh-hRh0 1 2 3 4 5 .h/h:h@ [ ] ^ EcFcGcHcIcJcKc^f_f`f2e6 7 8 {f|f}f/ vi~bwilcxi# $ % yir zi' AiBiCi: Di( EimcFio p q ) ncGiocHipcIiqcJiKiLiMiNiOiPiQiRiicjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[bYcZc9i!i#i$i%i'i;h3e(i|iVd)i}i*i+i~i[f,iajec-i.iUc0c+f,fahbhch]b6g; 3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'bycdhog/gehvhfh2h:gghwhhh;gXgYg3h4h8c=g(b)bzcAc{b|bBcCc*b+b5h=h6h?hZg7hih0g@h1c(f?g@gSca b c of9 ! d e f g 6eWe?dId7d%caegf8ds t Nc* + fcgc8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeVeXewf[g]g:d@dbfcfifpf]f;d[h]h^h_h`h{h|h}h~haibicidi1gdfceYeef[dHdSd2gxf=dlf3gei}effUexhjhkhyhlh4g5gmhpgfigi8h)f*f?f9hafnhohphqh!htfzh.d@frhAhBhshZi1f2f/d]d^dde_d`d{d|deefege}dhe~dieQdRdWcXc}b
928 return 2{ | Zi
929 # Update deallocation stream if provided
930 if stream is not None: 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z GhHhmfIhJh,h$fOh%f~g'fPhQh-hRh0 1 2 3 4 5 .h/h:h@ [ ] ^ EcFcGcHcIcJcKc^f_f`f2e6 7 8 {f|f}f/ vi~bwilcxi# $ % yir zi' AiBiCi: Di( EimcFio p q ) ncGiocHipcIiqcJiKiLiMiNiOiPiQiRiicjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[bYcZc9i!i#i$i%i'i;h3e(i|iVd)i}i*i+i~i[f,iajec-i.iUc0c+f,fahbhch]b6g; 3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'bycdhog/gehvhfh2h:gghwhhh;gXgYg3h4h8c=g(b)bzcAc{b|bBcCc*b+b5h=h6h?hZg7hih0g@h1c(f?g@gSca b c of9 ! d e f g 6eWe?dId7d%caegf8ds t Nc* + fcgc8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeVeXewf[g]g:d@dbfcfifpf]f;d[h]h^h_h`h{h|h}h~haibicidi1gdfceYeef[dHdSd2gxf=dlf3gei}effUexhjhkhyhlh4g5gmhpgfigi8h)f*f?f9hafnhohphqh!htfzh.d@frhAhBhshZi1f2f/d]d^dde_d`d{d|deefege}dhe~dieQdRdWcXc}b
931 Buffer_set_deallocation_stream(self, stream) 2^f_f`f{f|f}fvi~bwixi# $ % yir zi' AiBiCiDi( EiFio p q ) GiHiIiJiKiLiMiNiOiPiQiRiicjck ac;bl m n bc=bTcLc?bccdc@b[b(fa b c aebeXe:d@d;dce[d=dUe@f
932 # Reset handle - RAII deleter will free the memory (and release owner ref in C++)
933 self._h_ptr.reset() 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z GhHhmfIhJh,h$fOh%f~g'fPhQh-hRh0 1 2 3 4 5 .h/h:h@ [ ] ^ EcFcGcHcIcJcKc^f_f`f2e6 7 8 {f|f}f/ vi~bwilcxi# $ % yir zi' AiBiCi: Di( EimcFio p q ) ncGiocHipcIiqcJiKiLiMiNiOiPiQiRiicjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[bYcZc9i!i#i$i%i'i;h3e(i|iVd)i}i*i+i~i[f,iajec-i.iUc0c+f,fahbhch]b6g; 3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'bycdhog/gehvhfh2h:gghwhhh;gXgYg3h4h8c=g(b)bzcAc{b|bBcCc*b+b5h=h6h?hZg7hih0g@h1c(f?g@gSca b c of9 ! d e f g 6eWe?dId7d%caegf8ds t Nc* + fcgc8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeVeXewf[g]g:d@dbfcfifpf]f;d[h]h^h_h`h{h|h}h~haibicidi1gdfceYeef[dHdSd2gxf=dlf3gei}effUexhjhkhyhlh4g5gmhpgfigi8h)f*f?f9hafnhohphqh!htfzh.d@frhAhBhshZi1f2f/d]d^dde_d`d{d|deefege}dhe~dieQdRdWcXc}b
934 self._size = 0 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z GhHhmfIhJh,h$fOh%f~g'fPhQh-hRh0 1 2 3 4 5 .h/h:h@ [ ] ^ EcFcGcHcIcJcKc^f_f`f2e6 7 8 {f|f}f/ vi~bwilcxi# $ % yir zi' AiBiCi: Di( EimcFio p q ) ncGiocHipcIiqcJiKiLiMiNiOiPiQiRiicjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[bYcZc9i!i#i$i%i'i;h3e(i|iVd)i}i*i+i~i[f,iajec-i.iUc0c+f,fahbhch]b6g; 3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'bycdhog/gehvhfh2h:gghwhhh;gXgYg3h4h8c=g(b)bzcAc{b|bBcCc*b+b5h=h6h?hZg7hih0g@h1c(f?g@gSca b c of9 ! d e f g 6eWe?dId7d%caegf8ds t Nc* + fcgc8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeVeXewf[g]g:d@dbfcfifpf]f;d[h]h^h_h`h{h|h}h~haibicidi1gdfceYeef[dHdSd2gxf=dlf3gei}effUexhjhkhyhlh4g5gmhpgfigi8h)f*f?f9hafnhohphqh!htfzh.d@frhAhBhshZi1f2f/d]d^dde_d`d{d|deefege}dhe~dieQdRdWcXc}b
935 self._memory_resource = None 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z GhHhmfIhJh,h$fOh%f~g'fPhQh-hRh0 1 2 3 4 5 .h/h:h@ [ ] ^ EcFcGcHcIcJcKc^f_f`f2e6 7 8 {f|f}f/ vi~bwilcxi# $ % yir zi' AiBiCi: Di( EimcFio p q ) ncGiocHipcIiqcJiKiLiMiNiOiPiQiRiicjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[bYcZc9i!i#i$i%i'i;h3e(i|iVd)i}i*i+i~i[f,iajec-i.iUc0c+f,fahbhch]b6g; 3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'bycdhog/gehvhfh2h:gghwhhh;gXgYg3h4h8c=g(b)bzcAc{b|bBcCc*b+b5h=h6h?hZg7hih0g@h1c(f?g@gSca b c of9 ! d e f g 6eWe?dId7d%caegf8ds t Nc* + fcgc8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeVeXewf[g]g:d@dbfcfifpf]f;d[h]h^h_h`h{h|h}h~haibicidi1gdfceYeef[dHdSd2gxf=dlf3gei}effUexhjhkhyhlh4g5gmhpgfigi8h)f*f?f9hafnhohphqh!htfzh.d@frhAhBhshZi1f2f/d]d^dde_d`d{d|deefege}dhe~dieQdRdWcXc}b
936 self._ipc_data = None 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z GhHhmfIhJh,h$fOh%f~g'fPhQh-hRh0 1 2 3 4 5 .h/h:h@ [ ] ^ EcFcGcHcIcJcKc^f_f`f2e6 7 8 {f|f}f/ vi~bwilcxi# $ % yir zi' AiBiCi: Di( EimcFio p q ) ncGiocHipcIiqcJiKiLiMiNiOiPiQiRiicjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[bYcZc9i!i#i$i%i'i;h3e(i|iVd)i}i*i+i~i[f,iajec-i.iUc0c+f,fahbhch]b6g; 3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'bycdhog/gehvhfh2h:gghwhhh;gXgYg3h4h8c=g(b)bzcAc{b|bBcCc*b+b5h=h6h?hZg7hih0g@h1c(f?g@gSca b c of9 ! d e f g 6eWe?dId7d%caegf8ds t Nc* + fcgc8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeVeXewf[g]g:d@dbfcfifpf]f;d[h]h^h_h`h{h|h}h~haibicidi1gdfceYeef[dHdSd2gxf=dlf3gei}effUexhjhkhyhlh4g5gmhpgfigi8h)f*f?f9hafnhohphqh!htfzh.d@frhAhBhshZi1f2f/d]d^dde_d`d{d|deefege}dhe~dieQdRdWcXc}b
937 self._owner = None 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z GhHhmfIhJh,h$fOh%f~g'fPhQh-hRh0 1 2 3 4 5 .h/h:h@ [ ] ^ EcFcGcHcIcJcKc^f_f`f2e6 7 8 {f|f}f/ vi~bwilcxi# $ % yir zi' AiBiCi: Di( EimcFio p q ) ncGiocHipcIiqcJiKiLiMiNiOiPiQiRiicjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[bYcZc9i!i#i$i%i'i;h3e(i|iVd)i}i*i+i~i[f,iajec-i.iUc0c+f,fahbhch]b6g; 3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'bycdhog/gehvhfh2h:gghwhhh;gXgYg3h4h8c=g(b)bzcAc{b|bBcCc*b+b5h=h6h?hZg7hih0g@h1c(f?g@gSca b c of9 ! d e f g 6eWe?dId7d%caegf8ds t Nc* + fcgc8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeVeXewf[g]g:d@dbfcfifpf]f;d[h]h^h_h`h{h|h}h~haibicidi1gdfceYeef[dHdSd2gxf=dlf3gei}effUexhjhkhyhlh4g5gmhpgfigi8h)f*f?f9hafnhohphqh!htfzh.d@frhAhBhshZi1f2f/d]d^dde_d`d{d|deefege}dhe~dieQdRdWcXc}b
938 self._mem_attrs_inited.store(False) 2u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z GhHhmfIhJh,h$fOh%f~g'fPhQh-hRh0 1 2 3 4 5 .h/h:h@ [ ] ^ EcFcGcHcIcJcKc^f_f`f2e6 7 8 {f|f}f/ vi~bwilcxi# $ % yir zi' AiBiCi: Di( EimcFio p q ) ncGiocHipcIiqcJiKiLiMiNiOiPiQiRiicjcnf2c3c4ck ac;bl m rcn bc!c=b9cTcLc#c?b^bccdc@b[bYcZc9i!i#i$i%i'i;h3e(i|iVd)i}i*i+i~i[f,iajec-i.iUc0c+f,fahbhch]b6g; 3b4bsc_b`bMc5b6btc_ ` kc7b8b{ | ucvc9b!bwc#b$bxc%b'bycdhog/gehvhfh2h:gghwhhh;gXgYg3h4h8c=g(b)bzcAc{b|bBcCc*b+b5h=h6h?hZg7hih0g@h1c(f?g@gSca b c of9 ! d e f g 6eWe?dId7d%caegf8ds t Nc* + fcgc8e9eJd9dgd!e!dhdKd#e$e%eid'eLdMdNdjdkdldmdndod(eOdPdpdqd#drdsd$d)e*e+etd%d'c,e'd(cud-e.e/e)c:evdwdxd*c+c,c-c.c/c;eydzd:c;c(d=c?c)d=e?e@eAd*d@c[e+d[cBd]e^e_e]c`eCdDdEd^c_c`c{c|c}c{eFdGd~cad,dbdcd-d|eTdbeVeXewf[g]g:d@dbfcfifpf]f;d[h]h^h_h`h{h|h}h~haibicidi1gdfceYeef[dHdSd2gxf=dlf3gei}effUexhjhkhyhlh4g5gmhpgfigi8h)f*f?f9hafnhohphqh!htfzh.d@frhAhBhshZi1f2f/d]d^dde_d`d{d|deefege}dhe~dieQdRdWcXc}b