Coverage for cuda/core/_memory/_buffer.pyx: 75.47%
318 statements
« prev ^ index » next coverage.py v7.17.2, created at 2026-11-05 01:11 +0000
« prev ^ index » next coverage.py v7.17.2, created at 2026-11-05 01:11 +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() 2,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~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyMf4iNf5iOf6iGyHyIyJyPf7iQf8iKyLyRf9iSf!iTf#iUf$iMyNyVf%iWf'iOyPyQyRySyTyUyVyXf(iYf)iZf*i0f+i1f,i2f-i3f.i4f/i5f:i6f;i7f=i8f?iWyXyYyZy0y1y2y3y4y5y6y7y8y9y!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~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzjgijkgjjlgkjmgljngmjognjSzTzUzVzpgoj~iHjWzXzqgpjajIjrgqjsgrjbjJjYzZztgsjcjKj0z1zugtjvguj2z3z4z5z6z7z8z9z!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~YaZbZcZdZeZfZgZhZiZjZkZlZmZnZoZpZqZrZsZtZuZvZwZxZyZzZAZBZCZDZEZFZGZHZIZJZKZLZMZNZOZPZQZRZSZTZUZVZWZXZYZZZ0Z1Z2Z3Z4Z5Z6Z7Z8Z9Z!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~Za0b0c0d0e0f0g0h0i0j0k0l0m0n0o0p0q0r0s0t0u0v0w0x0y0z0A0B0C0D0E0F0G0H0I0J0K0L0M0N0O0P0Q0R0S0T0U0V0W0X0Y0Z000102030405060708090!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~0a1b1c1d1e1f1g1h1i1j1k1l1m1n1o1p1q1r1s1t1u1v1w1x1y1z1A1B1C1D1E1F1G1H1I1J1K1L1M1N1O1P1Q1R1S1T1U1V1W1X1Y1Z101112131415161718191!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~1a2b2c2d2e2f2g2h2i2j2k2l2m2n2o2p2q2r2s2t2u2v2w2x2y2z2A2B2C2D2E2F2G2H2I2J2K2L2M2N2O2P2Q2R2S2T2U2V2W2X2Y2Z202122232425262728292!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~2a3b39fc3d3e3f3g3h3i3j3k3!fXjl3m3n3o3p3q3r3s3t3u3v3w3x3y3z3A3B3C3D3E3F3G3H3I3J3K3L3M3N3O3P3Q3R3S3T3U3V3W3X3Y3Z303132333#fYj435363738393!3#3$fZj$3%3'3(3)3*3+3,3-3.3/3:3;3=3?3@3[3]3^3_3`3{3|3}3~3a4b4c4d4e4f4g4h4i4j4k4l4m4n4o4p4q4r4s4t4u4v4%f0jw4x4y4z4A4B4C4D4E4F4G4H4I4J4K4L4M4N4O4P4Q4R4S4T4U4V4W4X4Y4Z404142434445464748494!4#4$4%4'4'f(4)4*4+4,4[f-4]f.4/4:4;4=4?4@4[4]4^4_4(f1j`4{4|4}4~4a5b5c5d5e5f5g5h5i5j5k5l5m5n5o5p5q5r5s5t5u5v5w5x5y5z5A5B5C5D5E5F5G5H5I5J5K5L5M5N52jO5P5Q5R5S5T5U5V5W5X5Y5)f3jZ505152535455565758595!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~5a6b6c6d6e6f6g6h6i6*f4jj6k6l6m6n6o6p6q6r6s6t6u6v6w6x6y6z6A6B6C6D6E6F6G6H6I6J6K6L6M6N6O6P6Q6R6S6T6U6V6W6X6Y6Z606162636+f5j465666768696!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~6a7b7c7d7e7f7g7h7i7j7k7l7m7n7,f6jo7p7q7r7s7t7u7v7w7x7y7z7A7B7C7D7E7F7G7H7I7J7K7L7M7N7O7P7Q7R7S7T7U7V7W7X7Y7Z7071727374757677787-f7j97!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~7a8b8c8d8e8f8g8h8i8j8k8l8m8n8o8p8q8r8s8.f8jt8u8v8w8x8y8z8A8B8C8D8E8F8G8H8I8J8K8L8M8N8O8P8Q8R8S8T8U8V8W8X8Y8Z808182838485868788898!8#8$8%8'8(8/f9j)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@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_!_#_$_%_'_(_)_*_+_,_-_._/_:_;_=_?_@_[_]_^_
47def _live_va_reservation_count() -> int:
48 return live_va_reservation_count() 2,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~xaybycydyeyfygyhyiyjykylymynyoypyqyrysytyuyvywyxyyyzyAyByCyDyEyFyMf4iNf5iOf6iGyHyIyJyPf7iQf8iKyLyRf9iSf!iTf#iUf$iMyNyVf%iWf'iOyPyQyRySyTyUyVyXf(iYf)iZf*i0f+i1f,i2f-i3f.i4f/i5f:i6f;i7f=i8f?iWyXyYyZy0y1y2y3y4y5y6y7y8y9y!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~yazbzczdzezfzgzhzizjzkzlzmznzozpzqzrzsztzuzvzwzxzyzzzAzBzCzDzEzFzGzHzIzJzKzLzMzNzOzPzQzRzjgijkgjjlgkjmgljngmjognjSzTzUzVzpgoj~iHjWzXzqgpjajIjrgqjsgrjbjJjYzZztgsjcjKj0z1zugtjvguj2z3z4z5z6z7z8z9z!z#z$z%z'z(z)z*z+z,z-z.z/z:z;z=zfh?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~YaZbZcZdZeZfZgZhZiZjZkZlZmZnZoZpZqZrZsZtZuZvZwZxZyZzZAZBZCZDZEZFZGZHZIZJZKZLZMZNZOZPZQZRZSZTZUZVZWZXZYZZZ0Z1Z2Z3Z4Z5Z6Z7Z8Z9Z!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~Za0b0c0d0e0f0g0h0i0j0k0l0m0n0o0p0q0r0s0t0u0v0w0x0y0z0A0B0C0D0E0F0G0H0I0J0K0L0M0N0O0P0Q0R0S0T0U0V0W0X0Y0Z000102030405060708090!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~0a1b1c1d1e1f1g1h1i1j1k1l1m1n1o1p1q1r1s1t1u1v1w1x1y1z1A1B1C1D1E1F1G1H1I1J1K1L1M1N1O1P1Q1R1S1T1U1V1W1X1Y1Z101112131415161718191!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~1a2b2c2d2e2f2g2h2i2j2k2l2m2n2o2p2q2r2s2t2u2v2w2x2y2z2A2B2C2D2E2F2G2H2I2J2K2L2M2N2O2P2Q2R2S2T2U2V2W2X2Y2Z202122232425262728292!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~2a3b39fc3d3e3f3g3h3i3j3k3!fXjl3m3n3o3p3q3r3s3t3u3v3w3x3y3z3A3B3C3D3E3F3G3H3I3J3K3L3M3N3O3P3Q3R3S3T3U3V3W3X3Y3Z303132333#fYj435363738393!3#3$fZj$3%3'3(3)3*3+3,3-3.3/3:3;3=3?3@3[3]3^3_3`3{3|3}3~3a4b4c4d4e4f4g4h4i4j4k4l4m4n4o4p4q4r4s4t4u4v4%f0jw4x4y4z4A4B4C4D4E4F4G4H4I4J4K4L4M4N4O4P4Q4R4S4T4U4V4W4X4Y4Z404142434445464748494!4#4$4%4'4'f(4)4*4+4,4[f-4]f.4/4:4;4=4?4@4[4]4^4_4(f1j`4{4|4}4~4a5b5c5d5e5f5g5h5i5j5k5l5m5n5o5p5q5r5s5t5u5v5w5x5y5z5A5B5C5D5E5F5G5H5I5J5K5L5M5N52jO5P5Q5R5S5T5U5V5W5X5Y5)f3jZ505152535455565758595!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~5a6b6c6d6e6f6g6h6i6*f4jj6k6l6m6n6o6p6q6r6s6t6u6v6w6x6y6z6A6B6C6D6E6F6G6H6I6J6K6L6M6N6O6P6Q6R6S6T6U6V6W6X6Y6Z606162636+f5j465666768696!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~6a7b7c7d7e7f7g7h7i7j7k7l7m7n7,f6jo7p7q7r7s7t7u7v7w7x7y7z7A7B7C7D7E7F7G7H7I7J7K7L7M7N7O7P7Q7R7S7T7U7V7W7X7Y7Z7071727374757677787-f7j97!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~7a8b8c8d8e8f8g8h8i8j8k8l8m8n8o8p8q8r8s8.f8jt8u8v8w8x8y8z8A8B8C8D8E8F8G8H8I8J8K8L8M8N8O8P8Q8R8S8T8U8V8W8X8Y8Z808182838485868788898!8#8$8%8'8(8/f9j)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@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_!_#_$_%_'_(_)_*_+_,_-_._/_:_;_=_?_@_[_]_^_
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 Cf0 1 2 3 4 5 ] ^ _ ` { HcIcJcKcLcMcNcGg{fHgIg|fJg}f~fKgLgMgNg+g,g-g.g/gOgPgQg:g;g=g?g@g/b[g]gRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7gYcRcSc:b;b=b?b8g)e^g9g6 7 8 *eZd; 4icc5ioc6i# $ % 7ir 8i' 9i!i#i= $i( %ipc'io p q ) qc(irc)isc*itc+i,i-i.i/i:i;i=i?ilcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_bijjjkjljmjnj+eojpjqjrjsjhctjuj`b? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBc#c+b,bCcDc~bacEcFc-b.b,e-eMd7ehd!g#ga b c Ef%e'e(e/ ofFf4d.e: @ 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g /e9e|dNd6d*cnevf$g7dwfpf:fqf;fkcGcids t * + :e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe!e}dxfyfohShzfGf%g_g'g`gwg[ sfxgpe=f#etf~dnfuf8erf-dh i j }iXjYjZj0j1j2j3j4j5j6j7j8j9jaeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dveWdXd. wexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6eHfZc0cbc
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 Cf0 1 2 3 4 5 ] ^ _ ` { HcIcJcKcLcMcNcGg{fHgIg|fJg}f~fKgLgMgNg+g,g-g.g/gOgPgQg:g;g=g?g@g/b[g]gRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7gYcRcSc:b;b=b?b8g)e^g9g6 7 8 *eZd; 4icc5ioc6i# $ % 7ir 8i' 9i!i#i= $i( %ipc'io p q ) qc(irc)isc*itc+i,i-i.i/i:i;i=i?ilcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_bijjjkjljmjnj+eojpjqjrjsjhctjuj`b? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBc#c+b,bCcDc~bacEcFc-b.b,e-eMd7ehd!g#ga b c Ef%e'e(e/ ofFf4d.e: @ 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g /e9e|dNd6d*cnevf$g7dwfpf:fqf;fkcGcids t * + :e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe!e}dxfyfohShzfGf%g_g'g`gwg[ sfxgpe=f#etf~dnfuf8erf-dh i j }iXjYjZj0j1j2j3j4j5j6j7j8j9jaeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dveWdXd. wexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6eHfZc0cbc
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() 2/epf:f;f0dxfyfohSh
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 Cf0 1 2 3 4 5 ] ^ _ ` { HcIcJcKcLcMcNcGg{fHgIg|fJg}f~fKgLgMgNg+g,g-g.g/gOgPgQg:g;g=g?g@g/b[g]gRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7gYcRcSc:b;b=b?b8g)e^g9g6 7 8 *eZd; 4icc5ioc6i# $ % 7ir 8i' 9i!i#i= $i( %ipc'io p q ) qc(irc)isc*itc+i,i-i.i/i:i;i=i?ilcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_bijjjkjljmjnj+eojpjqjrjsjhctjuj`b? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBc#c+b,bCcDc~bacEcFc-b.b,e-eMd7ehd!g#ga b c Ef%e'e(e/ ofFf4d.e: @ 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g /e9e|dNd6d*cnevf$g7dwfqfkcGcids t * + :e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe!e}dzfGf%g_g'g`gwg[ sfxgpe=f#etf~dnfuf8erf-dh i j }iXjYjZj0j1j2j3j4j5j6j7j8j9jaeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dveWdXd. wexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6eHfZc0cbc
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 Cf0 1 2 3 4 5 ] ^ _ ` { HcIcJcKcLcMcNcGg{fHgIg|fJg}f~fKgLgMgNg+g,g-g.g/gOgPgQg:g;g=g?g@g/b[g]gRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7gYcRcSc:b;b=b?b8g)e^g9g6 7 8 *eZd; 4icc5ioc6i# $ % 7ir 8i' 9i!i#i= $i( %ipc'io p q ) qc(irc)isc*itc+i,i-i.i/i:i;i=i?ilcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_bijjjkjljmjnj+eojpjqjrjsjhctjuj`b? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBc#c+b,bCcDc~bacEcFc-b.b,e-eMd7ehd!g#ga b c Ef%e'e(e/ ofFf4d.e: @ 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g /e9e|dNd6d*cnevf$g7dwfpf:fqf;fkcGcids t * + :e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe!e}dxfyfohShzfGf%g_g'g`gwg[ sfxgpe=f#etf~dnfuf8erf-dh i j }iXjYjZj0j1j2j3j4j5j6j7j8j9jaeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dveWdXd. wexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6eHfZc0cbc
90 except Exception as exc: 2=f#e
91 warnings.warn( 2=f#e
92 f"mr.deallocate({int(ptr):#x}) failed during Buffer destruction; " 2=f#e
93 f"the allocation may have leaked: {exc}", 2=f#e
94 CUDAWarning, 2=f#e
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) 2ygzgAgBgCgDg4icc5i6i# $ % 7ir 8i' 9i!i#i$i( %i'io p q ) (i)i*i+i,i-i.i/i:i;i=i?ilcmck dc@bl m n ec[bWcOc]bfcgc^b_baga b c ne7dwfoeke}dlepe~dme8ebgcgfggg~h
109 if status == cydriver.CUresult.CUDA_ERROR_INVALID_CONTEXT: 2ygzgAgBgCgDg4icc5i6i# $ % 7ir 8i' 9i!i#i$i( %i'io p q ) (i)i*i+i,i-i.i/i:i;i=i?ilcmck dc@bl m n ec[bWcOc]bfcgc^b_baga b c ne7dwfoeke}dlepe~dme8ebgcgfggg~h
110 raise RuntimeError( 2oe
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) 2ygzgAgBgCgDg4icc5i6i# $ % 7ir 8i' 9i!i#i$i( %i'io p q ) (i)i*i+i,i-i.i/i:i;i=i?ilcmck dc@bl m n ec[bWcOc]bfcgc^b_baga b c ne7dwfke}dlepe~dme8ebgcgfggg~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 7c8cphqhrhshth3haibi/dcidieifi4h5hhcgiuh1c9c`b!cXca b c 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g kcGcs t VcKdLd* + icjc[ $cYd3dh i j , - . :d;d=d?d@d[d]d^d_d`d{d
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 7c8cphqhrhshth3haibi/dcidieifi4h5hhcgiuh1c9c`b!cXca b c 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g kcGcs t VcKdLd* + icjc[ $cYd3dh i j , - . :d;d=d?d@d[d]d^d_d`d{d
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 7c8cphqhrhshth3haibi/dcidieifi4h5hhcgiuh1c9c`b!cXca b c 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g kcGcs t VcKdLd* + icjc[ $cYd3dh i j , - . :d;d=d?d@d[d]d^d_d`d{d
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 7c8cphqhrhshth3haibi/dcidieifi4h5hhcgiuh1c9c`b!cXca b c 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g kcGcs t VcKdLd* + icjc[ $cYd3dh i j , - . :d;d=d?d@d[d]d^d_d`d{d
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 7c8cphqhrhshth3haibi/dcidieifi4h5hhcgiuh1c9c`b!cXca b c 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g kcGcs t VcKdLd* + icjc[ $cYd3dh i j , - . :d;d=d?d@d[d]d^d_d`d{d
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 7c8cphqhrhshth3haibi/dcidieifi4h5hhcgiuh1c9c`b!cXca b c 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g kcGcs t VcKdLd* + icjc[ $cYd3dh i j , - . :d;d=d?d@d[d]d^d_d`d{d
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 7c8cphqhrhshth3haibi/dcidieifi4h5hhcgiuh1c9c`b!cXca b c 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g kcGcs t VcKdLd* + icjc[ $cYd3dh i j , - . :d;d=d?d@d[d]d^d_d`d{d
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 7c8cphqhrhshth3haibi/dcidieifi4h5hhcgiuh1c9c`b!cXca b c 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g kcGcs t VcKdLd* + icjc[ $cYd3dh i j , - . :d;d=d?d@d[d]d^d_d`d{d
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 7c8cphqhrhshth3haibi/dcidieifi4h5hhcgiuh1c9c`b!cXca b c 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g kcGcs t VcKdLd* + icjc[ $cYd3dh i j , - . :d;d=d?d@d[d]d^d_d`d{d
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 7c8cphqhrhshth3haibi/dcidieifi4h5hhcgiuh1c9c`b!cXca b c 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g kcGcs t VcKdLd* + icjc[ $cYd3dh i j , - . :d;d=d?d@d[d]d^d_d`d{d
156 # unregistered host pointer
157 out.is_host_accessible = True 2Vcicjc:d;d=d?d@d[d]d^d_d`d{d
158 out.is_device_accessible = False 2Vcicjc:d;d=d?d@d[d]d^d_d`d{d
159 out.device_id = -1 2Vcicjc:d;d=d?d@d[d]d^d_d`d{d
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 7c8cphqhrhshth3haibi/dcidieifi4h5hhcgiuh1c9c`b!cXca b c 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g kcGcs t KdLd* + icjc[ $cYd3dh 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 7c8cphqhrhshth3haibi/dcidieifi4h5hhcgiuh1c9c`b!cXca b c 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g kcGcs t KdLd* + icjc[ $cYd3dh 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 `b!cXca b c 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g kcs t * + icjcYd3dh 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 7c8cphqhrhshth3haibi/dcidieifi4h5hhcgiuh1c9ca b c 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g kcGcKdLd* + icjc[ $c3dh 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 7c8cphqhrhshth3haibi/dcidieifi4h5hhcgiuh1c9ca b c 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g kcGcKdLd* + icjc[ $c3dh 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 7c8cphqhrhshth3haibi/dcidieifi4h5hhcgiuh1c9ca b c 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g kcGcKdLd* + icjc[ $c3dh i j
168 elif memory_type == cydriver.CUmemorytype.CU_MEMORYTYPE_DEVICE: 2`b!cXcs t Yd, - .
169 out.is_host_accessible = False 2`b!cXcs t Yd, - .
170 out.is_device_accessible = True 2`b!cXcs t Yd, - .
171 out.device_id = device_id 2`b!cXcs t Yd, - .
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 7c8cphqhrhshth3haibi/dcidieifi4h5hhcgiuh1c9c`b!cXca b c 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g kcGcs t VcKdLd* + icjc[ $cYd3dh i j , - . :d;d=d?d@d[d]d^d_d`d{d
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 7c8cphqhrhshth3haibi/dcidieifi4h5hhcgiuh1c9c`b!cXca b c 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g kcGcs t VcKdLd* + icjc[ $cYd3dh i j , - . :d;d=d?d@d[d]d^d_d`d{d
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 7c8cphqhrhshth3haibi/dcidieifi4h5hhcgiuh1c9c`b!cXca b c 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g kcGcs t VcKdLd* + icjc[ $cYd3dh i j , - . :d;d=d?d@d[d]d^d_d`d{d
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 7c8cphqhrhshth3haibi/dcidieifi4h5hhcgiuh1c9c`b!cXca b c 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g kcGcs t VcKdLd* + icjc[ $cYd3dh i j , - . :d;d=d?d@d[d]d^d_d`d{d
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 7c8cphqhrhshth3haibi/dcidieifi4h5hhcgiuh1c9c`b!cXca b c 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g kcGcs t VcKdLd* + icjc[ $cYd3dh i j , - . :d;d=d?d@d[d]d^d_d`d{d
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 dc@bl m n ec'c[b%c]b{bfcgc^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 dc@bl m n ec'c[b%c]b{bfcgc^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 dc@bl m n ec[b]b{bfcgc^b_b
203 with nogil: 2k dc@bl m n ec[b]b{bfcgc^b_b
204 HANDLE_RETURN(cydriver.cuMemcpyWithAttributesAsync(dst, src, nbytes, &cu_attr, hstream)) 2k dc@bl m n ec[b]b{bfcgc^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^ _ ` { HcIcJcKcLcMcNc/bYcRcSc:b;b=b?b; oc# $ % r ' = ( pco p q ) qcrcsctc2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_b? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBc+b,bCcDc~bacEcFc-b.ba b c %e'e(e/ : @ d e f g Nd*ckelemeh i j
215 with nogil: 2^ _ ` { HcIcJcKcLcMcNc/bYcRcSc:b;b=b?b; oc# $ % r ' = ( pco p q ) qcrcsctck l m ucn WcOc(c? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBc+b,bCcDc~bacEcFc-b.ba b c %e'e(e/ : @ d e f g Nd*ckelemeh i j
216 HANDLE_RETURN(cydriver.cuMemcpyAsync(dst, src, nbytes, as_cu(s._h_stream))) 2^ _ ` { HcIcJcKcLcMcNc/bYcRcSc:b;b=b?b; oc# $ % r ' = ( pco p q ) qcrcsctck l m ucn WcOc(c? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBc+b,bCcDc~bacEcFc-b.ba b c %e'e(e/ : @ d e f g Nd*ckelemeh i j
217 return 2^ _ ` { HcIcJcKcLcMcNc/bYcRcSc:b;b=b?b; oc# $ % r ' = ( pco p q ) qcrcsctck l m ucn WcOc(c? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBc+b,bCcDc~bacEcFc-b.ba b c %e'e(e/ : @ d e f g Nd*ckelemeh i j
218 if not isinstance(options, CopyOptions): 22c3c4ck dc@bl m ucn ec'c[b%c]b{bfcgc^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 dc@bl m ucn ec'c[b%c]b{bfcgc^b_b
223 raise TypeError( 2uc
224 f"{method_name} does not accept LEGACY_DEFAULT_STREAM with options " 2uc
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 dc@bl m n ec'c[b%c]b{bfcgc^b_b
231 raise TypeError( 2'c%c
232 f"{method_name} does not support graph capture with options " 2'c%c
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 dc@bl m n ec[b]b{bfcgc^b_b
239 _do_copy_with_attributes(dst, src, nbytes, options, as_cu(s._h_stream)) 2k dc@bl m n ec[b]b{bfcgc^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 6h7hCf8h9h!h#hhivjwj$h^f%h'h_fvh`fdj(h)hii*h0 1 2 3 4 5 ] jikilixjyjzj^ _ ` { HcIcJcKcLcMcNc[i]i^iygzgAgGg{fHgIg|fJg}f~fKgLgMgNg+g,g-g.g/gOgPgQg:g;g=g?g@g/b[g]gRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7gYcRcSc:b;b=b?b8g)e^g9g6 7 8 *eZdBgCgDg; MfccNfocOf# $ % Pfr Qf' RfSfTf= Uf( VfpcWfo p q ) qcXfrcYfscZftc0f1f2f3f4f5f6f7f8flcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_b7c8cjgkglgmgngogmi+epg~i/dqgajrgsgbjhgtgcjhcugvg1c9cdgegwhxhyh`bfh+h,h-h.hejQiRiAjSiTiBj? TcUc)cUiViCjWiXiDj/hYi:hZi;h0i=h1i?h2i@h3ifjEjgjFjhjGj6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBczh(gghAhThBhhhEgChDhEhUhFhih{g|g[h]h#cjh+b,bCcDc~bacEcFc-b.b,e-eMd7ehd^hni_h!g#goi}g`hGh~gpi!cagkhlhXca b c Ef%e'e(e/ @iofFf4d.e: @ FgVh9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g /e9e|dNd6d*cnevf$g7dwfWjpf:fqf;fkcGcids t VcKdLd* + icjc:e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe$e!e?fmhnhqike}dWhXhxfyfohShzfGf%g_g'g`gwg[ $cigle_i`i{irisitiuiviwixiyiziAiBiCiDiahEiFiGiHiIiJiKiLiMisfxgpe=f#etf~dYd3dbh@fmeIfchNinfuf8eYhHhIhZhJhdhehKh)gOiPi{hbgcgfg|hrfLhMhNhOh}hLf0h*g-dggPh~h1h2hQhh i j 9f!fRh#f$f%f'f[f]f(f)f*f+f,f-f.f/faeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dveWdXd. :d;d=dwexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6e|i?dHf@d[d]d^d_d`dZc0cbc{d
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 6h7hCf8h9h!h#hhivjwj$h^f%h'h_fvh`fdj(h)hii*h0 1 2 3 4 5 ] jikilixjyjzj^ _ ` { HcIcJcKcLcMcNc[i]i^iygzgAgGg{fHgIg|fJg}f~fKgLgMgNg+g,g-g.g/gOgPgQg:g;g=g?g@g/b[g]gRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7gYcRcSc:b;b=b?b8g)e^g9g6 7 8 *eZdBgCgDg; MfccNfocOf# $ % Pfr Qf' RfSfTf= Uf( VfpcWfo p q ) qcXfrcYfscZftc0f1f2f3f4f5f6f7f8flcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_b7c8cjgkglgmgngogmi+epg~i/dqgajrgsgbjhgtgcjhcugvg1c9cdgegwhxhyh`bfh+h,h-h.hejQiRiAjSiTiBj? TcUc)cUiViCjWiXiDj/hYi:hZi;h0i=h1i?h2i@h3ifjEjgjFjhjGj6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBczh(gghAhThBhhhEgChDhEhUhFhih{g|g[h]h#cjh+b,bCcDc~bacEcFc-b.b,e-eMd7ehd^hni_h!g#goi}g`hGh~gpi!cagkhlhXca b c Ef%e'e(e/ @iofFf4d.e: @ FgVh9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g /e9e|dNd6d*cnevf$g7dwfWjpf:fqf;fkcGcids t VcKdLd* + icjc:e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe$e!e?fmhnhqike}dWhXhxfyfohShzfGf%g_g'g`gwg[ $cigle_i`i{irisitiuiviwixiyiziAiBiCiDiahEiFiGiHiIiJiKiLiMisfxgpe=f#etf~dYd3dbh@fmeIfchNinfuf8eYhHhIhZhJhdhehKh)gOiPi{hbgcgfg|hrfLhMhNhOh}hLf0h*g-dggPh~h1h2hQhh i j 9f!fRh#f$f%f'f[f]f(f)f*f+f,f-f.f/faeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dveWdXd. :d;d=dwexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6e|i?dHf@d[d]d^d_d`dZc0cbc{d
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 6h7hCf8h9h!h#hhivjwj$h^f%h'h_fvh`fdj(h)hii*h0 1 2 3 4 5 ] jikilixjyjzj^ _ ` { HcIcJcKcLcMcNc[i]i^iygzgAgGg{fHgIg|fJg}f~fKgLgMgNg+g,g-g.g/gOgPgQg:g;g=g?g@g/b[g]gRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7gYcRcSc:b;b=b?b8g)e^g9g6 7 8 *eZdBgCgDg; MfccNfocOf# $ % Pfr Qf' RfSfTf= Uf( VfpcWfo p q ) qcXfrcYfscZftc0f1f2f3f4f5f6f7f8flcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_b7c8cjgkglgmgngogmi+epg~i/dqgajrgsgbjhgtgcjhcugvg1c9cdgegwhxhyh`bfh+h,h-h.hejQiRiAjSiTiBj? TcUc)cUiViCjWiXiDj/hYi:hZi;h0i=h1i?h2i@h3ifjEjgjFjhjGj6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBczh(gghAhThBhhhEgChDhEhUhFhih{g|g[h]h#cjh+b,bCcDc~bacEcFc-b.b,e-eMd7ehd^hni_h!g#goi}g`hGh~gpi!cagkhlhXca b c Ef%e'e(e/ @iofFf4d.e: @ FgVh9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g /e9e|dNd6d*cnevf$g7dwfWjpf:fqf;fkcGcids t VcKdLd* + icjc:e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe$e!e?fmhnhqike}dWhXhxfyfohShzfGf%g_g'g`gwg[ $cigle_i`i{irisitiuiviwixiyiziAiBiCiDiahEiFiGiHiIiJiKiLiMisfxgpe=f#etf~dYd3dbh@fmeIfchNinfuf8eYhHhIhZhJhdhehKh)gOiPi{hbgcgfg|hrfLhMhNhOh}hLf0h*g-dggPh~h1h2hQhh i j 9f!fRh#f$f%f'f[f]f(f)f*f+f,f-f.f/faeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dveWdXd. :d;d=dwexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6e|i?dHf@d[d]d^d_d`dZc0cbc{d
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 6h7hCf8h9h!h#hhivjwj$h^f%h'h_fvh`fdj(h)hii*h0 1 2 3 4 5 ] jikilixjyjzj^ _ ` { HcIcJcKcLcMcNc[i]i^iygzgAgGg{fHgIg|fJg}f~fKgLgMgNg+g,g-g.g/gOgPgQg:g;g=g?g@g/b[g]gRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7gYcRcSc:b;b=b?b8g)e^g9g6 7 8 *eZdBgCgDg; MfccNfocOf# $ % Pfr Qf' RfSfTf= Uf( VfpcWfo p q ) qcXfrcYfscZftc0f1f2f3f4f5f6f7f8flcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_b7c8cjgkglgmgngogmi+epg~i/dqgajrgsgbjhgtgcjhcugvg1c9cdgegwhxhyh`bfh+h,h-h.hejQiRiAjSiTiBj? TcUc)cUiViCjWiXiDj/hYi:hZi;h0i=h1i?h2i@h3ifjEjgjFjhjGj6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBczh(gghAhThBhhhEgChDhEhUhFhih{g|g[h]h#cjh+b,bCcDc~bacEcFc-b.b,e-eMd7ehd^hni_h!g#goi}g`hGh~gpi!cagkhlhXca b c Ef%e'e(e/ @iofFf4d.e: @ FgVh9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g /e9e|dNd6d*cnevf$g7dwfWjpf:fqf;fkcGcids t VcKdLd* + icjc:e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe$e!e?fmhnhqike}dWhXhxfyfohShzfGf%g_g'g`gwg[ $cigle_i`i{irisitiuiviwixiyiziAiBiCiDiahEiFiGiHiIiJiKiLiMisfxgpe=f#etf~dYd3dbh@fmeIfchNinfuf8eYhHhIhZhJhdhehKh)gOiPi{hbgcgfg|hrfLhMhNhOh}hLf0h*g-dggPh~h1h2hQhh i j 9f!fRh#f$f%f'f[f]f(f)f*f+f,f-f.f/faeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dveWdXd. :d;d=dwexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6e|i?dHf@d[d]d^d_d`dZc0cbc{d
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 6h7hCf8h9h!h#hhivjwj$h^f%h'h_fvh`fdj(h)hii*h0 1 2 3 4 5 ] jikilixjyjzj^ _ ` { HcIcJcKcLcMcNc[i]i^iygzgAgGg{fHgIg|fJg}f~fKgLgMgNg+g,g-g.g/gOgPgQg:g;g=g?g@g/b[g]gRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7gYcRcSc:b;b=b?b8g)e^g9g6 7 8 *eZdBgCgDg; MfccNfocOf# $ % Pfr Qf' RfSfTf= Uf( VfpcWfo p q ) qcXfrcYfscZftc0f1f2f3f4f5f6f7f8flcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_b7c8cjgkglgmgngogmi+epg~i/dqgajrgsgbjhgtgcjhcugvg1c9cdgegwhxhyh`bfh+h,h-h.hejQiRiAjSiTiBj? TcUc)cUiViCjWiXiDj/hYi:hZi;h0i=h1i?h2i@h3ifjEjgjFjhjGj6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBczh(gghAhThBhhhEgChDhEhUhFhih{g|g[h]h#cjh+b,bCcDc~bacEcFc-b.b,e-eMd7ehd^hni_h!g#goi}g`hGh~gpi!cagkhlhXca b c Ef%e'e(e/ @iofFf4d.e: @ FgVh9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g /e9e|dNd6d*cnevf$g7dwfWjpf:fqf;fkcGcids t VcKdLd* + icjc:e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe$e!e?fmhnhqike}dWhXhxfyfohShzfGf%g_g'g`gwg[ $cigle_i`i{irisitiuiviwixiyiziAiBiCiDiahEiFiGiHiIiJiKiLiMisfxgpe=f#etf~dYd3dbh@fmeIfchNinfuf8eYhHhIhZhJhdhehKh)gOiPi{hbgcgfg|hrfLhMhNhOh}hLf0h*g-dggPh~h1h2hQhh i j 9f!fRh#f$f%f'f[f]f(f)f*f+f,f-f.f/faeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dveWdXd. :d;d=dwexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6e|i?dHf@d[d]d^d_d`dZc0cbc{d
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 6h7hCf8h9h!h#hhivjwj$h^f%h'h_fvh`fdj(h)hii*h0 1 2 3 4 5 ] jikilixjyjzj^ _ ` { HcIcJcKcLcMcNc[i]i^iygzgAgGg{fHgIg|fJg}f~fKgLgMgNg+g,g-g.g/gOgPgQg:g;g=g?g@g/b[g]gRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7gYcRcSc:b;b=b?b8g)e^g9g6 7 8 *eZdBgCgDg; MfccNfocOf# $ % Pfr Qf' RfSfTf= Uf( VfpcWfo p q ) qcXfrcYfscZftc0f1f2f3f4f5f6f7f8flcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_b7c8cjgkglgmgngogmi+epg~i/dqgajrgsgbjhgtgcjhcugvg1c9cdgegwhxhyh`bfh+h,h-h.hejQiRiAjSiTiBj? TcUc)cUiViCjWiXiDj/hYi:hZi;h0i=h1i?h2i@h3ifjEjgjFjhjGj6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBczh(gghAhThBhhhEgChDhEhUhFhih{g|g[h]h#cjh+b,bCcDc~bacEcFc-b.b,e-eMd7ehd^hni_h!g#goi}g`hGh~gpi!cagkhlhXca b c Ef%e'e(e/ @iofFf4d.e: @ FgVh9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g /e9e|dNd6d*cnevf$g7dwfWjpf:fqf;fkcGcids t VcKdLd* + icjc:e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe$e!e?fmhnhqike}dWhXhxfyfohShzfGf%g_g'g`gwg[ $cigle_i`i{irisitiuiviwixiyiziAiBiCiDiahEiFiGiHiIiJiKiLiMisfxgpe=f#etf~dYd3dbh@fmeIfchNinfuf8eYhHhIhZhJhdhehKh)gOiPi{hbgcgfg|hrfLhMhNhOh}hLf0h*g-dggPh~h1h2hQhh i j 9f!fRh#f$f%f'f[f]f(f)f*f+f,f-f.f/faeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dveWdXd. :d;d=dwexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6e|i?dHf@d[d]d^d_d`dZc0cbc{d
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 6h7hCf8h9h!h#hhivjwj$h^f%h'h_fvh`fdj(h)hii*h0 1 2 3 4 5 ] jikilixjyjzj^ _ ` { HcIcJcKcLcMcNc[i]i^iygzgAgGg{fHgIg|fJg}f~fKgLgMgNg+g,g-g.g/gOgPgQg:g;g=g?g@g/b[g]gRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7gYcRcSc:b;b=b?b8g)e^g9g6 7 8 *eZdBgCgDg; MfccNfocOf# $ % Pfr Qf' RfSfTf= Uf( VfpcWfo p q ) qcXfrcYfscZftc0f1f2f3f4f5f6f7f8flcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_b7c8cjgkglgmgngogmi+epg~i/dqgajrgsgbjhgtgcjhcugvg1c9cdgegwhxhyh`bfh+h,h-h.hejQiRiAjSiTiBj? TcUc)cUiViCjWiXiDj/hYi:hZi;h0i=h1i?h2i@h3ifjEjgjFjhjGj6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBczh(gghAhThBhhhEgChDhEhUhFhih{g|g[h]h#cjh+b,bCcDc~bacEcFc-b.b,e-eMd7ehd^hni_h!g#goi}g`hGh~gpi!cagkhlhXca b c Ef%e'e(e/ @iofFf4d.e: @ FgVh9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g /e9e|dNd6d*cnevf$g7dwfWjpf:fqf;fkcGcids t VcKdLd* + icjc:e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe$e!e?fmhnhqike}dWhXhxfyfohShzfGf%g_g'g`gwg[ $cigle_i`i{irisitiuiviwixiyiziAiBiCiDiahEiFiGiHiIiJiKiLiMisfxgpe=f#etf~dYd3dbh@fmeIfchNinfuf8eYhHhIhZhJhdhehKh)gOiPi{hbgcgfg|hrfLhMhNhOh}hLf0h*g-dggPh~h1h2hQhh i j 9f!fRh#f$f%f'f[f]f(f)f*f+f,f-f.f/faeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dveWdXd. :d;d=dwexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6e|i?dHf@d[d]d^d_d`dZc0cbc{d
280 def __init__(self, *args, **kwargs) -> None:
281 raise RuntimeError("Buffer objects cannot be instantiated directly. " 2Wj
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 Cf0 1 2 3 4 5 ] ^ _ ` { HcIcJcKcLcMcNcGg{fHgIg|fJg}f~fKgLgMgNg+g,g-g.g/gOgPgQg:g;g=g?g@g/b[g]gRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7gYcRcSc:b;b=b?b8g)e^g9g6 7 8 *eZd; MfccNfocOf# $ % Pfr Qf' RfSfTf= Uf( VfpcWfo p q ) qcXfrcYfscZftc0f1f2f3f4f5f6f7f8flcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_bjgkglgmgngog+epgqgrgsghgtghcugvg`b? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBc#c+b,bCcDc~bacEcFc-b.b,e-eMd7ehd!g#ga b c Ef%e'e(e/ @iofFf4d.e: @ Fg9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g /e9e|dNd6d*cnevf$g7dwfpf:fqf;fkcGcids t VcKdLd* + icjc:e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe$e!e?f}dxfyfohShzfGf%g_g'g`g'j(jwg[ )jsfxgpe=f#etf~dbhnfuf8erf-dh i j 9f!fRh#f$f%f'f(f)f*f+f,f-f.f/faeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dveWdXd. :d;d=dwexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6e|i?dHf@d[d]d^d_d`dZc0cbc{d
304 raise ValueError("owner and memory resource cannot be both specified together") 2)j
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 Cf0 1 2 3 4 5 ] ^ _ ` { HcIcJcKcLcMcNcGg{fHgIg|fJg}f~fKgLgMgNg+g,g-g.g/gOgPgQg:g;g=g?g@g/b[g]gRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7gYcRcSc:b;b=b?b8g)e^g9g6 7 8 *eZd; MfccNfocOf# $ % Pfr Qf' RfSfTf= Uf( VfpcWfo p q ) qcXfrcYfscZftc0f1f2f3f4f5f6f7f8flcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_bjgkglgmgngog+epgqgrgsghgtghcugvg`b? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBc#c+b,bCcDc~bacEcFc-b.b,e-eMd7ehd!g#ga b c Ef%e'e(e/ @iofFf4d.e: @ Fg9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g /e9e|dNd6d*cnevf$g7dwfpf:fqf;fkcGcids t VcKdLd* + icjc:e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe$e!e?f}dxfyfohShzfGf%g_g'g`g'j(jwg[ sfxgpe=f#etf~dbhnfuf8erf-dh i j 9f!fRh#f$f%f'f(f)f*f+f,f-f.f/faeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dveWdXd. :d;d=dwexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6e|i?dHf@d[d]d^d_d`dZc0cbc{d
306 raise ValueError("stream requires a memory resource (mr)") 2'j(j
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 Cf0 1 2 3 4 5 ] ^ _ ` { HcIcJcKcLcMcNcGg{fHgIg|fJg}f~fKgLgMgNg+g,g-g.g/gOgPgQg:g;g=g?g@g/b[g]gRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7gYcRcSc:b;b=b?b8g)e^g9g6 7 8 *eZd; MfccNfocOf# $ % Pfr Qf' RfSfTf= Uf( VfpcWfo p q ) qcXfrcYfscZftc0f1f2f3f4f5f6f7f8flcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_bjgkglgmgngog+epgqgrgsghgtghcugvg`b? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBc#c+b,bCcDc~bacEcFc-b.b,e-eMd7ehd!g#ga b c Ef%e'e(e/ @iofFf4d.e: @ Fg9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g /e9e|dNd6d*cnevf$g7dwfpf:fqf;fkcGcids t VcKdLd* + icjc:e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe$e!e?f}dxfyfohShzfGf%g_g'g`gwg[ sfxgpe=f#etf~dbhnfuf8erf-dh i j 9f!fRh#f$f%f'f(f)f*f+f,f-f.f/faeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dveWdXd. :d;d=dwexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6e|i?dHf@d[d]d^d_d`dZc0cbc{d
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 Cf0 1 2 3 4 5 ] ^ _ ` { HcIcJcKcLcMcNcGg{fHgIg|fJg}f~fKgLgMgNg+g,g-g.g/gOgPgQg:g;g=g?g@g/b[g]gRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7gYcRcSc:b;b=b?b8g)e^g9g6 7 8 *eZd; MfccNfocOf# $ % Pfr Qf' RfSfTf= Uf( VfpcWfo p q ) qcXfrcYfscZftc0f1f2f3f4f5f6f7f8flcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_bjgkglgmgngog+epgqgrgsghgtghcugvg`b? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBc#c+b,bCcDc~bacEcFc-b.b,e-eMd7ehd!g#ga b c Ef%e'e(e/ @iofFf4d.e: @ Fg9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g /e9e|dNd6d*cnevf$g7dwfpf:fqf;fkcGcids t VcKdLd* + icjc:e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe$e!e?f}dxfyfohShzfGf%g_g'g`gwg[ sfxgpe=f#etf~dbhnfuf8erf-dh i j 9f!fRh#f$f%f'f(f)f*f+f,f-f.f/faeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dveWdXd. :d;d=dwexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6e|i?dHf@d[d]d^d_d`dZc0cbc{d
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 Cf0 1 2 3 4 5 ] ^ _ ` { HcIcJcKcLcMcNcGg{fHgIg|fJg}f~fKgLgMgNg+g,g-g.g/gOgPgQg:g;g=g?g@g/b[g]gRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7gYcRcSc:b;b=b?b8g)e^g9g6 7 8 *eZd; MfccNfocOf# $ % Pfr Qf' RfSfTf= Uf( VfpcWfo p q ) qcXfrcYfscZftc0f1f2f3f4f5f6f7f8flcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_bjgkglgmgngog+epgqgrgsghgtghcugvg`b? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBc#c+b,bCcDc~bacEcFc-b.b,e-eMd7ehd!g#ga b c Ef%e'e(e/ @iofFf4d.e: @ Fg9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g /e9e|dNd6d*cnevf$g7dwfpf:fqf;fkcGcids t VcKdLd* + icjc:e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe$e!e?f}dxfyfohShzfGf%g_g'g`gwg[ sfxgpe=f#etf~dbhnfuf8erf-dh i j 9f!fRh#f$f%f'f(f)f*f+f,f-f.f/faeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dveWdXd. :d;d=dwexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6e|i?dHf@d[d]d^d_d`dZc0cbc{d
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 Cf0 1 2 3 4 5 ] ^ _ ` { HcIcJcKcLcMcNcGg{fHgIg|fJg}f~fKgLgMgNg+g,g-g.g/gOgPgQg:g;g=g?g@g/b[g]gRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7gYcRcSc:b;b=b?b8g)e^g9g6 7 8 *eZd; MfccNfocOf# $ % Pfr Qf' RfSfTf= Uf( VfpcWfo p q ) qcXfrcYfscZftc0f1f2f3f4f5f6f7f8flcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_bjgkglgmgngog+epgqgrgsgtghcugvg`b? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBc#c+b,bCcDc~bacEcFc-b.b,e-eMd7ehd!g#ga b c Ef%e'e(e/ ofFf4d.e: @ 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g /e9e|dNd6d*cnevf$g7dwfpf:fqf;fkcGcids t * + :e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe!e}dxfyfohShzfGf%g_g'g`gwg[ sfxgpe=f#etf~dnfuf8erf-dh i j 9f!f#f$f%f'f(f)f*f+f,f-f.f/faeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dveWdXd. wexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6eHfZc0cbc
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 Cf0 1 2 3 4 5 ] ^ _ ` { HcIcJcKcLcMcNcGg{fHgIg|fJg}f~fKgLgMgNg+g,g-g.g/gOgPgQg:g;g=g?g@g/b[g]gRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7gYcRcSc:b;b=b?b8g)e^g9g6 7 8 *eZd; MfccNfocOf# $ % Pfr Qf' RfSfTf= Uf( VfpcWfo p q ) qcXfrcYfscZftc0f1f2f3f4f5f6f7f8flcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_bjgkglgmgngog+epgqgrgsgtghcugvg`b? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBc#c+b,bCcDc~bacEcFc-b.b,e-eMd7ehd!g#ga b c Ef%e'e(e/ ofFf4d.e: @ 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g /e9e|dNd6d*cnevf$g7dwfpf:fqf;fkcGcids t * + :e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe!e}dxfyfohShzfGf%g_g'g`gwg[ sfxgpe=f#etf~dnfuf8erf-dh i j 9f!f#f$f%f'f(f)f*f+f,f-f.f/faeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dveWdXd. wexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6eHfZc0cbc
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 Cf0 1 2 3 4 5 ] ^ _ ` { HcIcJcKcLcMcNcGg{fHgIg|fJg}f~fKgLgMgNg+g,g-g.g/gOgPgQg:g;g=g?g@g/b[g]gRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7gYcRcSc:b;b=b?b8g)e^g9g6 7 8 *eZd; MfccNfocOf# $ % Pfr Qf' RfSfTf= Uf( VfpcWfo p q ) qcXfrcYfscZftc0f1f2f3f4f5f6f7f8flcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_bjgkglgmgngog+epgqgrgsgtghcugvg`b? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBc#c+b,bCcDc~bacEcFc-b.b,e-eMd7ehd!g#ga b c Ef%e'e(e/ ofFf4d.e: @ 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g /e9e|dNd6d*cnevf$g7dwfpf:fqf;fkcGcids t * + :e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe!e}dxfyfohShzfGf%g_g'g`gwg[ sfxgpe=f#etf~dnfuf8erf-dh i j 9f!f#f$f%f'f(f)f*f+f,f-f.f/faeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dveWdXd. wexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6eHfZc0cbc
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 Cf0 1 2 3 4 5 ] ^ _ ` { HcIcJcKcLcMcNcGg{fHgIg|fJg}f~fKgLgMgNg+g,g-g.g/gOgPgQg:g;g=g?g@g/b[g]gRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7gYcRcSc:b;b=b?b8g)e^g9g6 7 8 *eZd; MfccNfocOf# $ % Pfr Qf' RfSfTf= Uf( VfpcWfo p q ) qcXfrcYfscZftc0f1f2f3f4f5f6f7f8flcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_bjgkglgmgngog+epgqgrgsgtghcugvg`b? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBc#c+b,bCcDc~bacEcFc-b.b,e-eMd7ehd!g#ga b c Ef%e'e(e/ ofFf4d.e: @ 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g /e9e|dNd6d*cnevf$g7dwfpf:fqf;fkcGcids t * + :e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe!e}dxfyfohShzfGf%g_g'g`gwg[ sfxgpe=f#etf~dnfuf8erf-dh i j 9f!f#f$f%f'f(f)f*f+f,f-f.f/faeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dveWdXd. wexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6eHfZc0cbc
319 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 Cf0 1 2 3 4 5 ] ^ _ ` { HcIcJcKcLcMcNcGg{fHgIg|fJg}f~fKgLgMgNg+g,g-g.g/gOgPgQg:g;g=g?g@g/b[g]gRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7gYcRcSc:b;b=b?b8g)e^g9g6 7 8 *eZd; MfccNfocOf# $ % Pfr Qf' RfSfTf= Uf( VfpcWfo p q ) qcXfrcYfscZftc0f1f2f3f4f5f6f7f8flcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_bjgkglgmgngog+epgqgrgsgtghcugvg`b? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBc#c+b,bCcDc~bacEcFc-b.b,e-eMd7ehd!g#ga b c Ef%e'e(e/ ofFf4d.e: @ 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g /e9e|dNd6d*cnevf$g7dwfqfkcGcids t * + :e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe!e}dohShzfGf%g_g'g`gwg[ sfxgpe=f#etf~dnfuf8erf-dh i j 9f!f#f$f%f'f(f)f*f+f,f-f.f/faeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dveWdXd. wexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6eHfZc0cbc
320 _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 Cf0 1 2 3 4 5 ] ^ _ ` { HcIcJcKcLcMcNcGg{fHgIg|fJg}f~fKgLgMgNg+g,g-g.g/gOgPgQg:g;g=g?g@g/b[g]gRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7gYcRcSc:b;b=b?b8g)e^g9g6 7 8 *eZd; MfccNfocOf# $ % Pfr Qf' RfSfTf= Uf( VfpcWfo p q ) qcXfrcYfscZftc0f1f2f3f4f5f6f7f8flcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_bjgkglgmgngog+epgqgrgsgtghcugvg`b? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBc#c+b,bCcDc~bacEcFc-b.b,e-eMd7ehd!g#ga b c Ef%e'e(e/ ofFf4d.e: @ 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g /e9e|dNd6d*cnevf$g7dwfqfkcGcids t * + :e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe!e}dohShzfGf%g_g'g`gwg[ sfxgpe=f#etf~dnfuf8erf-dh i j 9f!f#f$f%f'f(f)f*f+f,f-f.f/faeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dveWdXd. wexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6eHfZc0cbc
321 except MemoryError:
322 # Reset for the same reason as below, inside the handler so the
323 # destructor cannot swallow the MemoryError that is propagating.
324 self._h_ptr.reset()
325 raise
326 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 Cf0 1 2 3 4 5 ] ^ _ ` { HcIcJcKcLcMcNcGg{fHgIg|fJg}f~fKgLgMgNg+g,g-g.g/gOgPgQg:g;g=g?g@g/b[g]gRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7gYcRcSc:b;b=b?b8g)e^g9g6 7 8 *eZd; MfccNfocOf# $ % Pfr Qf' RfSfTf= Uf( VfpcWfo p q ) qcXfrcYfscZftc0f1f2f3f4f5f6f7f8flcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_bjgkglgmgngog+epgqgrgsgtghcugvg`b? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBc#c+b,bCcDc~bacEcFc-b.b,e-eMd7ehd!g#ga b c Ef%e'e(e/ ofFf4d.e: @ 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g /e9e|dNd6d*cnevf$g7dwfqfkcGcids t * + :e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe!e}dohShzfGf%g_g'g`gwg[ sfxgpe=f#etf~dnfuf8erf-dh i j 9f!f#f$f%f'f(f)f*f+f,f-f.f/faeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dveWdXd. wexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6eHfZc0cbc
327 # Reset before raising: the DevicePtrHandle destructor would otherwise
328 # invoke _mr_dealloc_callback, which catches any inner exception and
329 # clears the exception state, swallowing the error we're about to raise.
330 self._h_ptr.reset() 2ohSh
331 if _ds_status == cydriver.CUresult.CUDA_ERROR_INVALID_CONTEXT: 2ohSh
332 raise RuntimeError( 2ohSh
333 "Cannot record a default deallocation stream when no CUDA context is "
334 "current. Call Device.set_current() first, or pass stream= with a "
335 "non-default Stream."
336 )
337 HANDLE_RETURN(_ds_status)
338 else:
339 self._h_ptr = deviceptr_create_with_owner(c_ptr, owner) 2jgkglgmgngog+epgqgrgsghgtghcugvg`b)cvcPcwcncxcyczcAcBcCcDcEcFc@iFgs t VcKdLd* + icjc$e?fbhRh, - . :d;d=d|i?d@d[d]d^d_d`d{d
340 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 Cf0 1 2 3 4 5 ] ^ _ ` { HcIcJcKcLcMcNcGg{fHgIg|fJg}f~fKgLgMgNg+g,g-g.g/gOgPgQg:g;g=g?g@g/b[g]gRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7gYcRcSc:b;b=b?b8g)e^g9g6 7 8 *eZd; MfccNfocOf# $ % Pfr Qf' RfSfTf= Uf( VfpcWfo p q ) qcXfrcYfscZftc0f1f2f3f4f5f6f7f8flcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_bjgkglgmgngog+epgqgrgsghgtghcugvg`b? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBc#c+b,bCcDc~bacEcFc-b.b,e-eMd7ehd!g#ga b c Ef%e'e(e/ @iofFf4d.e: @ Fg9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g /e9e|dNd6d*cnevf$g7dwfpf:fqf;fkcGcids t VcKdLd* + icjc:e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe$e!e?f}dxfyfzfGf%g_g'g`gwg[ sfxgpe=f#etf~dbhnfuf8erf-dh i j 9f!fRh#f$f%f'f(f)f*f+f,f-f.f/faeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dveWdXd. :d;d=dwexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6e|i?dHf@d[d]d^d_d`dZc0cbc{d
341 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 Cf0 1 2 3 4 5 ] ^ _ ` { HcIcJcKcLcMcNcGg{fHgIg|fJg}f~fKgLgMgNg+g,g-g.g/gOgPgQg:g;g=g?g@g/b[g]gRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7gYcRcSc:b;b=b?b8g)e^g9g6 7 8 *eZd; MfccNfocOf# $ % Pfr Qf' RfSfTf= Uf( VfpcWfo p q ) qcXfrcYfscZftc0f1f2f3f4f5f6f7f8flcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_bjgkglgmgngog+epgqgrgsghgtghcugvg`b? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBc#c+b,bCcDc~bacEcFc-b.b,e-eMd7ehd!g#ga b c Ef%e'e(e/ @iofFf4d.e: @ Fg9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g /e9e|dNd6d*cnevf$g7dwfpf:fqf;fkcGcids t VcKdLd* + icjc:e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe$e!e?f}dxfyfzfGf%g_g'g`gwg[ sfxgpe=f#etf~dbhnfuf8erf-dh i j 9f!fRh#f$f%f'f(f)f*f+f,f-f.f/faeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dveWdXd. :d;d=dwexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6e|i?dHf@d[d]d^d_d`dZc0cbc{d
342 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 Cf0 1 2 3 4 5 ] ^ _ ` { HcIcJcKcLcMcNcGg{fHgIg|fJg}f~fKgLgMgNg+g,g-g.g/gOgPgQg:g;g=g?g@g/b[g]gRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7gYcRcSc:b;b=b?b8g)e^g9g6 7 8 *eZd; MfccNfocOf# $ % Pfr Qf' RfSfTf= Uf( VfpcWfo p q ) qcXfrcYfscZftc0f1f2f3f4f5f6f7f8flcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_bjgkglgmgngog+epgqgrgsghgtghcugvg`b? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBc#c+b,bCcDc~bacEcFc-b.b,e-eMd7ehd!g#ga b c Ef%e'e(e/ @iofFf4d.e: @ Fg9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g /e9e|dNd6d*cnevf$g7dwfpf:fqf;fkcGcids t VcKdLd* + icjc:e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe$e!e?f}dxfyfzfGf%g_g'g`gwg[ sfxgpe=f#etf~dbhnfuf8erf-dh i j 9f!fRh#f$f%f'f(f)f*f+f,f-f.f/faeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dveWdXd. :d;d=dwexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6e|i?dHf@d[d]d^d_d`dZc0cbc{d
343 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 Cf0 1 2 3 4 5 ] ^ _ ` { HcIcJcKcLcMcNcGg{fHgIg|fJg}f~fKgLgMgNg+g,g-g.g/gOgPgQg:g;g=g?g@g/b[g]gRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7gYcRcSc:b;b=b?b8g)e^g9g6 7 8 *eZd; MfccNfocOf# $ % Pfr Qf' RfSfTf= Uf( VfpcWfo p q ) qcXfrcYfscZftc0f1f2f3f4f5f6f7f8flcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_bjgkglgmgngog+epgqgrgsghgtghcugvg`b? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBc#c+b,bCcDc~bacEcFc-b.b,e-eMd7ehd!g#ga b c Ef%e'e(e/ @iofFf4d.e: @ Fg9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g /e9e|dNd6d*cnevf$g7dwfpf:fqf;fkcGcids t VcKdLd* + icjc:e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe$e!e?f}dxfyfzfGf%g_g'g`gwg[ sfxgpe=f#etf~dbhnfuf8erf-dh i j 9f!fRh#f$f%f'f(f)f*f+f,f-f.f/faeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dveWdXd. :d;d=dwexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6e|i?dHf@d[d]d^d_d`dZc0cbc{d
344 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 Cf0 1 2 3 4 5 ] ^ _ ` { HcIcJcKcLcMcNcGg{fHgIg|fJg}f~fKgLgMgNg+g,g-g.g/gOgPgQg:g;g=g?g@g/b[g]gRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7gYcRcSc:b;b=b?b8g)e^g9g6 7 8 *eZd; MfccNfocOf# $ % Pfr Qf' RfSfTf= Uf( VfpcWfo p q ) qcXfrcYfscZftc0f1f2f3f4f5f6f7f8flcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_bjgkglgmgngog+epgqgrgsghgtghcugvg`b? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBc#c+b,bCcDc~bacEcFc-b.b,e-eMd7ehd!g#ga b c Ef%e'e(e/ @iofFf4d.e: @ Fg9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g /e9e|dNd6d*cnevf$g7dwfpf:fqf;fkcGcids t VcKdLd* + icjc:e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe$e!e?f}dxfyfzfGf%g_g'g`gwg[ sfxgpe=f#etf~dbhnfuf8erf-dh i j 9f!fRh#f$f%f'f(f)f*f+f,f-f.f/faeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dveWdXd. :d;d=dwexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6e|i?dHf@d[d]d^d_d`dZc0cbc{d
345 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 Cf0 1 2 3 4 5 ] ^ _ ` { HcIcJcKcLcMcNcGg{fHgIg|fJg}f~fKgLgMgNg+g,g-g.g/gOgPgQg:g;g=g?g@g/b[g]gRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7gYcRcSc:b;b=b?b8g)e^g9g6 7 8 *eZd; MfccNfocOf# $ % Pfr Qf' RfSfTf= Uf( VfpcWfo p q ) qcXfrcYfscZftc0f1f2f3f4f5f6f7f8flcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_bjgkglgmgngog+epgqgrgsghgtghcugvg`b? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBc#c+b,bCcDc~bacEcFc-b.b,e-eMd7ehd!g#ga b c Ef%e'e(e/ @iofFf4d.e: @ Fg9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g /e9e|dNd6d*cnevf$g7dwfpf:fqf;fkcGcids t VcKdLd* + icjc:e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe$e!e?f}dxfyfzfGf%g_g'g`gwg[ sfxgpe=f#etf~dbhnfuf8erf-dh i j 9f!fRh#f$f%f'f(f)f*f+f,f-f.f/faeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dveWdXd. :d;d=dwexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6e|i?dHf@d[d]d^d_d`dZc0cbc{d
347 @staticmethod
348 def _reduce_helper(mr, ipc_descriptor):
349 cdef ContextHandle h_ctx = get_current_context()
350 cdef int device_id
351 if not h_ctx:
352 # Spawned processes unpickle arguments before entering their target,
353 # so initialize the context needed to bind the default-stream token.
354 device_id = mr.device_id
355 (Device(device_id) if device_id >= 0 else Device()).set_current()
356 # The parent process's stream is not portable across processes, so the
357 # pickle path cannot thread an explicit stream through. Seed the
358 # imported buffer's deallocation with the current context's default
359 # stream; the receiver can override it before or during close.
360 return Buffer.from_ipc_descriptor(mr, ipc_descriptor, stream=default_stream())
362 def __reduce__(self) -> tuple[object, ...]:
363 # Unpickling performs a live CUDA IPC import from descriptor bytes in the
364 # pickle stream. Only deserialize Buffers from a trusted principal.
365 # Must not serialize the parent's stream!
366 Buffer_check_open(self) 2+h,h-h.hTcUc/h:h;h=h?h@h6b7b8b9b| } !b#b~ ab$b%b'b(b)b*b+b,b-b.b
367 return Buffer._reduce_helper, (self.memory_resource, self.ipc_descriptor) 2+h,h-h.hTcUc/h:h;h=h?h@h6b7b8b9b| } !b#b~ ab$b%b'b(b)b*b+b,b-b.b
369 @staticmethod
370 def from_handle(
371 ptr: DevicePointerType, size_t size, mr: MemoryResource | None = None,
372 owner: object | None = None,
373 *,
374 stream: Stream | GraphBuilder | None = None,
375 ) -> Buffer:
376 """Create a new :class:`Buffer` object from a pointer.
378 Parameters
379 ----------
380 ptr : :obj:`~_memory.DevicePointerType`
381 Allocated buffer handle object
382 size : int
383 Memory size of the buffer
384 mr : :obj:`~_memory.MemoryResource`, optional
385 Memory resource associated with the buffer. When provided,
386 :meth:`MemoryResource.deallocate` is called when the buffer is
387 closed or garbage collected.
388 owner : object, optional
389 An object holding external allocation that the ``ptr`` points to.
390 The reference is kept as long as the buffer is alive.
391 The ``owner`` and ``mr`` cannot be specified together.
392 stream : :obj:`~_stream.Stream` | :obj:`~graph.GraphBuilder`, optional
393 Keyword-only. The stream used to order the buffer's deallocation
394 when ``mr`` owns the pointer. Defaults to ``default_stream()``.
395 Recording a default-stream token requires a CUDA context to be
396 current. Host-only resources (``mr.is_device_accessible`` is
397 ``False``) record no stream and need no context. If the buffer may
398 be freed from a different host thread,
399 pass a stream other than the per-thread default stream, which
400 refers to a different stream on each thread.
402 Note
403 ----
404 When neither ``mr`` nor ``owner`` is specified, this creates a
405 non-owning reference. The pointer will NOT be freed when the
406 :class:`Buffer` is closed or garbage collected.
407 """
408 return Buffer._init(ptr, size, mr=mr, owner=owner, stream=stream) 2^ _ ` { HcIcJcKcLcMcNc; ccoc# $ = ( pco p q ) qcrcsctck dc@bl m n ec[bWcOc]bfcgc^b_bjgkglgmgngog+epgqgrgsgtghcugvg`b? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBc#c+b,bCcDc~bacEcFc-b.b7e%e'e(e@i/e9e|dNd6d*cnevf$g7dwfpf:fqf;fkcGcids t VcKdLd* + icjc:e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe$e!e?f}dxfyfohzf%g'g'j[ )jsfxgpe=f#etf~dbhnfrf-dRh, - . :d;d=d|i?d@d[d]d^d_d`d{d
410 @classmethod
411 def from_ipc_descriptor(
412 cls, mr: DeviceMemoryResource | PinnedMemoryResource | VirtualMemoryResource,
413 IPCBufferDescriptor ipc_descriptor not None: IPCBufferDescriptor,
414 *, Stream stream not None: Stream
415 ) -> Buffer:
416 """Import a buffer that was exported from another process.
418 Parameters
419 ----------
420 mr : :obj:`~_memory.DeviceMemoryResource` | :obj:`~_memory.PinnedMemoryResource` | :obj:`~_memory.VirtualMemoryResource`
421 The IPC-enabled memory resource matching the exporting process. A
422 descriptor exported from a :class:`VirtualMemoryBuffer` is imported
423 with a :class:`VirtualMemoryResource` of this process whose
424 ``handle_type`` matches the exporter's; the import maps the shared
425 physical memory for that resource's device with that resource's
426 access options.
427 ipc_descriptor : :obj:`~_memory.IPCBufferDescriptor`
428 The descriptor exported from another process.
429 stream : :obj:`~_stream.Stream`
430 Keyword-only. The stream used for asynchronous deallocation when
431 the buffer is closed or garbage collected.
433 Note
434 ----
435 The descriptor payload and ``size`` are supplied by the exporting peer
436 and must be treated as untrusted input unless the peer is known to be
437 cooperating.
438 """
439 return _ipc.Buffer_from_ipc_descriptor(cls, mr, ipc_descriptor, stream) 2? ~_a`b`(gghAhEgUhih{g[h#cjhahch
441 @property
442 @cython.critical_section
443 def ipc_descriptor(self) -> IPCBufferDescriptor:
444 """Descriptor for sharing this buffer with other processes.
446 A pool-backed buffer caches its descriptor; a
447 :class:`VirtualMemoryBuffer` exports a new one on every access.
448 """
449 Buffer_check_open(self) 2+h,h-h.hQiRiSiTi? TcUcUiViWiXi/hYi:hZi;h0i=h1i?h2i@h3i6b7b|b}b8b9b| } !b#b~ ab$b%b'b(b)b*b#c+b,b~bac-b.b$eahIfch[f]f
450 cdef object ipc_data
451 if self._ipc_data is None: 2+h,h-h.hQiRiSiTi? TcUcUiViWiXi/hYi:hZi;h0i=h1i?h2i@h3i6b7b|b}b8b9b| } !b#b~ ab$b%b'b(b)b*b#c+b,b~bac-b.bahIfch[f]f
452 ipc_data = IPCDataForBuffer(_ipc.Buffer_get_ipc_descriptor(self), False) 2+h,h-h.hQiRiSiTi? TcUcUiViWiXi/hYi:hZi;h0i=h1i?h2i@h3i6b7b|b}b8b9b| } !b#b~ ab$b%b'b(b)b*b#c+b,b~bac-b.bahIfch[f]f
453 if self._ipc_data is None: 2+h,h-h.hQiRiSiTi? TcUcUiViWiXi/hYi:hZi;h0i=h1i?h2i@h3i6b7b|b}b8b9b| } !b#b~ ab$b%b'b(b)b*b+b,b~bac-b.bIf[f]f
454 self._ipc_data = ipc_data 2+h,h-h.hQiRiSiTi? TcUcUiViWiXi/hYi:hZi;h0i=h1i?h2i@h3i6b7b|b}b8b9b| } !b#b~ ab$b%b'b(b)b*b+b,b~bac-b.bIf[f]f
455 return self._ipc_data.ipc_descriptor 2+h,h-h.hQiRiSiTi? TcUcUiViWiXi/hYi:hZi;h0i=h1i?h2i@h3i6b7b|b}b8b9b| } !b#b~ ab$b%b'b(b)b*b+b,b~bac-b.bIf[f]f
457 def close(self, stream: Stream | GraphBuilder | None = None) -> None:
458 """Deallocate this buffer asynchronously on the given stream.
460 This buffer is released back to their memory resource
461 asynchronously on the given stream.
463 Parameters
464 ----------
465 stream : :obj:`~_stream.Stream` | :obj:`~graph.GraphBuilder`, optional
466 The stream object to use for asynchronous deallocation. If None,
467 the deallocation stream stored in the handle is used.
469 See Also
470 --------
471 set_deallocation_stream
472 Change the deallocation stream without closing the buffer.
473 """
474 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 6h7hCf8h9hhi^f'h_fvh`f(h)hii*h0 1 2 3 4 5 jikili^ _ ` { HcIcJcKcLcMcNcygzgAg)e6 7 8 *eZdBgCgDg; 4icc5ioc6i# $ % 7ir 8i' 9i!i#i= $i( %ipc'io p q ) qc(irc)isc*itc+i,i-i.i/i:i;i=i?ilcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_b7c8cijjjkjljmjnjmi+eojHj/dpjIjqjrjJjhgsjKjhctjuj1c9cdgegwhxhyh`bfh? 6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBczh(gghAhThBhhhEgChDhEhUhFhih{g|g[h]h#cjh+b,bCcDc~bacEcFc-b.bMd7ehd^hni_hoi}g`hGh~gpi!cagkhlhXca b c Ef/ ofFf4d.e: @ FgVh9 ! d e f g /e9e|dNd6d*cnevf7ds t Vc* + icjc:e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe$e!e?fmhnhqike}dWhXhxfyfzfGfiglerisitiuiviwixiyiziAiBiCiDiahEiFiGiHiIiJiKiLiMisfpe#etf~dYd3dbh@fmeIfchNinfuf8eYhHhIhZhJhdhehKh)gOiPi{hbgcgfg|hrfLhMhNhOh}hLf0h*g-dggPh1h2hQh}i[f]faeVdbeQc.dcedeqeeefegehereseteieue1dje2dveWdXdZc0cbc
476 def set_deallocation_stream(self, stream: Stream | GraphBuilder) -> None:
477 """Change the stream that orders this buffer's eventual deallocation.
479 The buffer remains open and usable. A later :meth:`close` without a
480 stream, garbage collection, or release of the final retained device
481 pointer handle uses the replacement stream.
483 This method does not synchronize streams or establish dependencies.
484 The caller must ensure that allocation and all accesses are ordered
485 before the deallocation on ``stream``.
487 Parameters
488 ----------
489 stream : :obj:`~_stream.Stream` | :obj:`~graph.GraphBuilder`
490 The stream to use for eventual asynchronous deallocation.
492 Raises
493 ------
494 RuntimeError
495 If the buffer is already closed, or if a default-stream token
496 cannot be bound because no CUDA context is current.
497 TypeError
498 If ``stream`` is ``None`` or is not an accepted stream object.
500 Notes
501 -----
502 Synchronizing concurrent mutation and destruction of the same buffer
503 is the caller's responsibility.
504 """
505 Buffer_set_deallocation_stream(self, stream) 27dwf!enfbgcgfg~h
507 def __enter__(self):
508 return self 2)e*eZdhgfh? (ghhEg|g#cMd7ehd}gGh~gkhlhXc/ of4d.e: @ d e f g 9eVdQc1d2dveZc0c
510 def __exit__(self, exc_type, exc_val, exc_tb):
511 self.close() 2)e*eZdhgfh? (ghhEg|g#cMd7ehd}gGh~gkhlhXc/ of4d.e: @ d e f g 9eVdQc1d2dveZc0c
512 return False 2)e*eZdhgfh? (ghhEg|g#cMd7ehd}gGh~gkhlhXc/ of4d.e: @ d e f g 9eVdQc1d2dveZc0c
514 def copy_to(self, Buffer dst: Buffer | None = None, *, stream: Stream | GraphBuilder,
515 options: CopyOptions | None = None) -> Buffer:
516 """Copy from this buffer to the dst buffer asynchronously on the given stream.
518 Copies the data from this buffer to the provided dst buffer.
519 If the dst buffer is not provided, then a new buffer is first
520 allocated using the associated memory resource before the copy.
522 Parameters
523 ----------
524 dst : :obj:`~_memory.Buffer`, optional
525 Destination buffer to copy data to. If not provided, a new buffer
526 is allocated using this buffer's memory resource.
527 stream : :obj:`~_stream.Stream` | :obj:`~graph.GraphBuilder`
528 Keyword argument specifying the stream for the
529 asynchronous copy
530 options : :class:`~utils.CopyOptions`, optional
531 Transfer hints (source access order, location hints, overlap mode).
532 Honored on the CUDA 13 build of ``cuda.core`` with a driver of CUDA
533 13.2 or newer. Not accepted with ``LEGACY_DEFAULT_STREAM``; use
534 ``PER_THREAD_DEFAULT_STREAM`` instead. Not accepted with a
535 capturing stream either, since a graph cannot represent these
536 attributes; use :meth:`graph.GraphNode.memcpy` for a plain,
537 non-attributed copy node, or pass ``options=None``. On an older
538 cuda.bindings/driver, ``src_access_order`` values of ``STREAM``
539 and ``ANY`` are silently ignored; ``DURING_API_CALL`` raises
540 instead of silently downgrading its guarantee.
542 Raises
543 ------
544 TypeError
545 If ``options`` is not a :class:`~utils.CopyOptions` instance, or
546 if ``options`` is given together with ``LEGACY_DEFAULT_STREAM``
547 or a stream currently in graph capture mode.
548 RuntimeError
549 If ``options.src_access_order`` is ``DURING_API_CALL`` and
550 cuda.bindings or the driver is older than CUDA 13.2: falling
551 back to a plain copy cannot honor that guarantee.
553 """
554 Buffer_check_open(self) 2/bRcSc:b;b=b?b% r ' o p q 2c3c4ck @bl m ucn [b%cOc(c]b{b^b_ba b c / : @ d e f g 6d*c$e?fkelemeh i j
555 cdef Stream s = Stream_accept(stream) 2/bRcSc:b;b=b?b% r ' o p q 2c3c4ck @bl m ucn [b%cOc(c]b{b^b_ba b c / : @ d e f g 6d*c$e?fkelemeh i j
556 cdef size_t src_size = self._size 2/bRcSc:b;b=b?b% r ' o p q 2c3c4ck @bl m ucn [b%cOc(c]b{b^b_ba b c / : @ d e f g 6d*c$e?fkelemeh i j
558 if dst is None: 2/bRcSc:b;b=b?b% r ' o p q 2c3c4ck @bl m ucn [b%cOc(c]b{b^b_ba b c / : @ d e f g 6d*c$e?fkelemeh i j
559 if self._memory_resource is None: 2k ?f
560 raise ValueError("a destination buffer must be provided (this " 2?f
561 "buffer does not have a memory_resource)")
562 dst = self._memory_resource.allocate(src_size, stream=s) 1k
563 else:
564 Buffer_check_open(dst) 2/bRcSc:b;b=b?b% r ' o p q 2c3c4ck @bl m ucn [b%cOc(c]b{b^b_ba b c / : @ d e f g 6d*c$ekelemeh i j
566 cdef size_t dst_size = dst._size 2/bRcSc:b;b=b?b% r ' o p q 2c3c4ck @bl m ucn [b%cOc(c]b{b^b_ba b c / : @ d e f g 6d*ckelemeh i j
567 if dst_size != src_size: 2/bRcSc:b;b=b?b% r ' o p q 2c3c4ck @bl m ucn [b%cOc(c]b{b^b_ba b c / : @ d e f g 6d*ckelemeh i j
568 raise ValueError( "buffer sizes mismatch between src and dst (sizes " 26d
569 f"are: src={src_size}, dst={dst_size})" 26d
570 )
571 _dispatch_buffer_copy( 2/bRcSc:b;b=b?b% r ' o p q 2c3c4ck @bl m ucn [b%cOc(c]b{b^b_ba b c / : @ d e f g *ckelemeh i j
572 as_cu(dst._h_ptr), as_cu(self._h_ptr), src_size, s, options, "copy_to")
573 return dst 2/bRcSc:b;b=b?b% r ' o p q k @bl m ucn [bOc(c]b{b^b_ba b c / : @ d e f g *ckelemeh i j
575 def copy_from(self, Buffer src not None: Buffer, *, stream: Stream | GraphBuilder,
576 options: CopyOptions | None = None) -> None:
577 """Copy from the src buffer to this buffer asynchronously on the given stream.
579 Parameters
580 ----------
581 src : :obj:`~_memory.Buffer`
582 Source buffer to copy data from
583 stream : :obj:`~_stream.Stream` | :obj:`~graph.GraphBuilder`
584 Keyword argument specifying the stream for the
585 asynchronous copy
586 options : :class:`~utils.CopyOptions`, optional
587 Transfer hints (source access order, location hints, overlap mode).
588 Honored on the CUDA 13 build of ``cuda.core`` with a driver of CUDA
589 13.2 or newer. Not accepted with ``LEGACY_DEFAULT_STREAM``; use
590 ``PER_THREAD_DEFAULT_STREAM`` instead. Not accepted with a
591 capturing stream either, since a graph cannot represent these
592 attributes; use :meth:`graph.GraphNode.memcpy` for a plain,
593 non-attributed copy node, or pass ``options=None``. On an older
594 cuda.bindings/driver, ``src_access_order`` values of ``STREAM``
595 and ``ANY`` are silently ignored; ``DURING_API_CALL`` raises
596 instead of silently downgrading its guarantee.
598 Raises
599 ------
600 TypeError
601 If ``options`` is not a :class:`~utils.CopyOptions` instance, or
602 if ``options`` is given together with ``LEGACY_DEFAULT_STREAM``
603 or a stream currently in graph capture mode.
604 RuntimeError
605 If ``options.src_access_order`` is ``DURING_API_CALL`` and
606 cuda.bindings or the driver is older than CUDA 13.2: falling
607 back to a plain copy cannot honor that guarantee.
608 """
609 Buffer_check_open(self) 2^ _ ` { HcIcJcKcLcMcNc/bYcSc:b;b=b?b; oc# $ = ( pc) qcrcsctc2c3c4cdcucec'cWc{bfcgc? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBc+b,bCcDc~bacEcFc-b.b%e'e(e|dNd$e
610 Buffer_check_open(src) 2^ _ ` { HcIcJcKcLcMcNc/bYcSc:b;b=b?b; oc# $ = ( pc) qcrcsctc2c3c4cdcucec'cWc{bfcgc? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBc+b,bCcDc~bacEcFc-b.b%e'e(e|dNd$e
611 cdef Stream s = Stream_accept(stream) 2^ _ ` { HcIcJcKcLcMcNc/bYcSc:b;b=b?b; oc# $ = ( pc) qcrcsctc2c3c4cdcucec'cWc{bfcgc? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBc+b,bCcDc~bacEcFc-b.b%e'e(e|dNd
612 cdef size_t dst_size = self._size 2^ _ ` { HcIcJcKcLcMcNc/bYcSc:b;b=b?b; oc# $ = ( pc) qcrcsctc2c3c4cdcucec'cWc{bfcgc? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBc+b,bCcDc~bacEcFc-b.b%e'e(e|dNd
613 cdef size_t src_size = src._size 2^ _ ` { HcIcJcKcLcMcNc/bYcSc:b;b=b?b; oc# $ = ( pc) qcrcsctc2c3c4cdcucec'cWc{bfcgc? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBc+b,bCcDc~bacEcFc-b.b%e'e(e|dNd
615 if src_size != dst_size: 2^ _ ` { HcIcJcKcLcMcNc/bYcSc:b;b=b?b; oc# $ = ( pc) qcrcsctc2c3c4cdcucec'cWc{bfcgc? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBc+b,bCcDc~bacEcFc-b.b%e'e(e|dNd
616 raise ValueError( "buffer sizes mismatch between src and dst (sizes " 2|d
617 f"are: src={src_size}, dst={dst_size})" 2|d
618 )
619 _dispatch_buffer_copy( 2^ _ ` { HcIcJcKcLcMcNc/bYcSc:b;b=b?b; oc# $ = ( pc) qcrcsctc2c3c4cdcucec'cWc{bfcgc? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBc+b,bCcDc~bacEcFc-b.b%e'e(eNd
620 as_cu(self._h_ptr), as_cu(src._h_ptr), dst_size, s, options, "copy_from")
622 def fill(self, value: int | BufferProtocol, *, stream: Stream | GraphBuilder) -> None:
623 """Fill this buffer with a repeating byte pattern.
625 Parameters
626 ----------
627 value : int | :obj:`collections.abc.Buffer`
628 - int: Must be in range [0, 256). Converted to 1 byte.
629 - :obj:`collections.abc.Buffer`: Must be 1, 2, or 4 bytes.
630 stream : :obj:`~_stream.Stream` | :obj:`~graph.GraphBuilder`
631 Stream for the asynchronous fill operation.
633 Raises
634 ------
635 TypeError
636 If value is not an int and does not support the buffer protocol.
637 ValueError
638 If value byte length is not 1, 2, or 4.
639 If buffer size is not divisible by value byte length.
640 OverflowError
641 If int value is outside [0, 256).
643 """
644 Buffer_check_open(self) 2!h#h$h^f%h_f`f^ _ ` { /bYcRcSc:b;b=b?b; ccr = o p q k l m n / : @ :e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf$e
645 cdef Stream s_stream = Stream_accept(stream) 2!h#h$h^f%h_f`f^ _ ` { /bYcRcSc:b;b=b?b; ccr = o p q k l m n / : @ :e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf
646 cdef unsigned int val
647 cdef unsigned int elem_size
648 val, elem_size = _parse_fill_value(value) 2!h#h$h^f%h_f`f^ _ ` { /bYcRcSc:b;b=b?b; ccr = o p q k l m n / : @ :e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf
650 cdef size_t buffer_size = self._size 2!h#h$h^f%h_f`f^ _ ` { /bYcRcSc:b;b=b?b; ccr = o p q k l m n / : @ Od8djd9dkdPdldQdRdSdmdndodpdqdrdTdUdsdtd!dudvd#dwd$d+c%d,cxd-cydzdAd.c/c:c;c=c?cBdCd@c[c'd]c^c(dDd)d_c*d`cEd{cFdGdHd|c}c~cadbdcdIdJddded+dfdgd,d
651 cdef cydriver.CUdeviceptr dst = as_cu(self._h_ptr) 2!h#h$h^f%h_f`f^ _ ` { /bYcRcSc:b;b=b?b; ccr = o p q k l m n / : @ Od8djd9dkdPdldQdRdSdmdndodpdqdrdTdUdsdtd!dudvd#dwd$d+c%d,cxd-cydzdAd.c/c:c;c=c?cBdCd@c[c'd]c^c(dDd)d_c*d`cEd{cFdGdHd|c}c~cadbdcdIdJddded+dfdgd,d
652 cdef cydriver.CUstream s = as_cu(s_stream._h_stream) 2!h#h$h^f%h_f`f^ _ ` { /bYcRcSc:b;b=b?b; ccr = o p q k l m n / : @ Od8djd9dkdPdldQdRdSdmdndodpdqdrdTdUdsdtd!dudvd#dwd$d+c%d,cxd-cydzdAd.c/c:c;c=c?cBdCd@c[c'd]c^c(dDd)d_c*d`cEd{cFdGdHd|c}c~cadbdcdIdJddded+dfdgd,d
654 if elem_size == 1: 2!h#h$h^f%h_f`f^ _ ` { /bYcRcSc:b;b=b?b; ccr = o p q k l m n / : @ Od8djd9dkdPdldQdRdSdmdndodpdqdrdTdUdsdtd!dudvd#dwd$d+c%d,cxd-cydzdAd.c/c:c;c=c?cBdCd@c[c'd]c^c(dDd)d_c*d`cEd{cFdGdHd|c}c~cadbdcdIdJddded+dfdgd,d
655 with nogil: 2!h#h$h^f%h_f`f^ _ ` { /bYcRcSc:b;b=b?b; ccr = o p q k l m n / : @ OdPdQdRdSdTdUdwdxdydzdAdBdCdDdEdFdGdHdIdJd
656 HANDLE_RETURN(cydriver.cuMemsetD8Async(dst, val, buffer_size, s)) 2!h#h$h^f%h_f`f^ _ ` { /bYcRcSc:b;b=b?b; ccr = o p q k l m n / : @ OdPdQdRdSdTdUdwdxdydzdAdBdCdDdEdFdGdHdIdJd
657 elif elem_size == 2:
658 if buffer_size & 0x1: 28djdmdndodsdtd!d$d+c.c/c:c@c[c'd)d_c|c}c~cdded+d
659 raise ValueError(f"buffer size ({buffer_size}) must be divisible by 2") 28d!d$d'd)d+d
660 with nogil: 2jdmdndodsdtd+c.c/c:c@c[c_c|c}c~cdded
661 HANDLE_RETURN(cydriver.cuMemsetD16Async(dst, val, buffer_size // 2, s)) 2jdmdndodsdtd+c.c/c:c@c[c_c|c}c~cdded
662 elif elem_size == 4:
663 if buffer_size & 0x3: 29dkdldpdqdrdudvd#d%d,c-c;c=c?c]c^c(d*d`c{cadbdcdfdgd,d
664 raise ValueError(f"buffer size ({buffer_size}) must be divisible by 4") 29d#d%d(d*d,d
665 with nogil: 2kdldpdqdrdudvd,c-c;c=c?c]c^c`c{cadbdcdfdgd
666 HANDLE_RETURN(cydriver.cuMemsetD32Async(dst, val, buffer_size // 4, s)) 2kdldpdqdrdudvd,c-c;c=c?c]c^c`c{cadbdcdfdgd
668 def __dlpack__(
669 self,
670 *,
671 stream: int | None = None,
672 max_version: tuple[int, int] | None = None,
673 dl_device: tuple[int, int] | None = None,
674 copy: bool | None = None,
675 ) -> object:
676 # Note: we ignore the stream argument entirely (as if it is -1).
677 # It is the user's responsibility to maintain stream order.
678 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 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g pfid$e[ $ch i j 5c6cbc
679 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 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g pfid[ $ch i j 5c6cbc
680 raise BufferError("Sorry, not supported: dl_device other than None") 2id
681 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 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g pfid[ $ch i j 5c6cbc
682 raise BufferError("Sorry, not supported: copy=True") 2id
683 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 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g pfid[ $ch i j 5c6cbc
684 versioned = False 2pfid
685 else:
686 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 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g id[ $ch i j 5c6cbc
687 raise BufferError(f"Expected max_version tuple[int, int], got {max_version}") 2id
688 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 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g id[ $ch i j 5c6cbc
689 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 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g pfid[ $ch i j 5c6cbc
691 def __dlpack_device__(self) -> tuple[int, int]:
692 Buffer_check_open(self) 2:fqf;fkcGc$e[ $c5c6cbc
693 return classify_dl_device(self) 2:fqf;fkcGc[ $c5c6cbc
695 def __buffer__(self, flags: int, /) -> memoryview:
696 # Support for Python-level buffer protocol as per PEP 688.
697 # This raises a BufferError unless:
698 # 1. Python is 3.12+
699 # 2. This Buffer object is host accessible
700 raise NotImplementedError("WIP: Buffer.__buffer__ hasn't been implemented yet.")
702 def __release_buffer__(self, buffer: memoryview, /) -> None:
703 # Supporting method paired with __buffer__.
704 raise NotImplementedError("WIP: Buffer.__release_buffer__ hasn't been implemented yet.")
706 @property
707 def device_id(self) -> int:
708 """Return the device ordinal of this buffer, or -1 for memory not bound to a device."""
709 Buffer_check_open(self) 2[i]i^i,e-e!cXcqfids t VcKdLd* + icjc$emhnh_i`i{i@fdheh)gLf5d5c6c, - QcveWdXd. :d;d=dwexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e?d@d[d]d^d_d`dZc0cbc{d
710 if self._memory_resource is not None: 2[i]i^i,e-e!cXcqfids t VcKdLd* + icjcmhnh_i`i{i@fdheh)gLf5d5c6c, - QcveWdXd. :d;d=dwexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e?d@d[d]d^d_d`dZc0cbc{d
711 return self._memory_resource.device_id 2[i]i^i,e-eqfidmhnh_i`i{i@fdheh)gLf5d5c6cQcveWdXdwexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6eZc0cbc
712 _init_memory_attrs(self) 2!cXcs t VcKdLd* + icjc, - . :d;d=d?d@d[d]d^d_d`d{d
713 return self._mem_attrs.device_id 2!cXcs t VcKdLd* + icjc, - . :d;d=d?d@d[d]d^d_d`d{d
715 @property
716 def handle(self) -> int:
717 """Return the buffer handle object.
719 .. caution::
721 This handle is a Python object. To get the memory address of the underlying C
722 handle, call ``int(Buffer.handle)``.
723 """
724 # Return raw integer for compatibility with ctypes and other tools
725 # that expect a raw pointer value
726 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 6h7h8h9h!h#h$h^f%h'h_fvh`fdj(h)h*h0 1 2 3 4 5 ] ^ _ ` { HcIcJcKcLcMcNc[i]i^iGg{fHgIg|fJg}f~fKgLgMgNgOgPgQg/bRgSgTgUgVgWgXgYgZg0g1g2g3g4g5g6g7gYcRcSc:b;b=b?b8g)e9g6 7 8 *eZd; ccoc# $ % r ' = ( pco p q ) qcrcsctck dc@bl m n ec[bWcOc(c]b{bfcgc^b_bphjgqhkgrhlgshmgthngog+epgqgrgsgtghcuguhvg1c`b? TcUc)c6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBczh(gghBhEgChDhEhFhih{g#cjh+b,bCcDc~bacEcFc-b.b,e-eMd7ehd^h_h!g#g}g`h~g!caglhXca b c %e'e(e/ @i.e: FgVh9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g /e9eNd*c7dwfpfids t * + wd+c,cxd-cydzdAd.c/c:c;c=c?cBdCd@c[c]c^cDd_c`cEd{cFdGdHd|c}c~cadbdcdIdJdddedfdgd0dke}dWhXhwg[ $cle_i`i{isfxgtf~dmeufYhHhIhJhKh)g{hfgrfLhMhNhOhLf*gPh~h1hQhh i j }i!jRhaeVd5d5c6c, - beQc.d2dveWdXd. :d;d=dwexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e?dHf@d[d]d^d_d`dZc0cbc{d
728 @property
729 def is_closed(self) -> bool:
730 """Whether this buffer has been closed."""
731 return self._h_ptr.get() == NULL 2phqhrhshth3hhg4h5huhFgVh!egg}i
733 def __eq__(self, other: object) -> bool:
734 if not isinstance(other, Buffer): 2{f|f}f~f!jRh__*j#j$j
735 return NotImplemented 2!j__
736 cdef Buffer other_buf = <Buffer>other 2{f|f}f~f!jRh*j#j$j
737 return (as_intptr(self._h_ptr) == as_intptr(other_buf._h_ptr) and 2{f|f}f~f!jRh*j#j$j
738 self._size == other_buf._size) 2!jRh#j$j
740 def __hash__(self) -> int:
741 return hash((as_intptr(self._h_ptr), self._size)) 2Rhc`d`e`f`#j$j
743 def __repr__(self) -> str:
744 maybe_is_mapped = " is_mapped=True" if self.is_mapped else "" 2}i+j
745 return f"<Buffer ptr={as_intptr(self._h_ptr):#x} size={self._size}{maybe_is_mapped}>" 2}i+j
747 @property
748 def is_device_accessible(self) -> bool:
749 """Return True if this buffer can be accessed by the GPU, otherwise False."""
750 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 !cXca b c 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g pf:fqf;fkcGcids t VcKdLd* + icjc0d$e[ $cig@fIfLfh i j 5d5c6c, - Qc. :d;d=dwexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e?d@d[d]d^d_d`dZc0cbc{d
751 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 !cXca b c 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g pf:fqf;fkcGcids t VcKdLd* + icjc0d[ $cig@fIfLfh i j 5d5c6c, - Qc. :d;d=dwexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6e?d@d[d]d^d_d`dZc0cbc{d
752 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 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g pf:fqf;fkcGcid0d[ $cig@fIfLfh i j 5d5c6cQcwexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1e2e3e4e5e6eZc0cbc
753 _init_memory_attrs(self) 2!cXcs t VcKdLd* + icjc, - . :d;d=d?d@d[d]d^d_d`d{d
754 return self._mem_attrs.is_device_accessible 2!cXcs t VcKdLd* + icjc, - . :d;d=d?d@d[d]d^d_d`d{d
756 @property
757 def is_host_accessible(self) -> bool:
758 """Return True if this buffer can be accessed by the CPU, otherwise False."""
759 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 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g pf:fqf;fkcGcids t VcKdLd* + icjcOdjdkdPdldQdRdSdmdndodpdqdrdTdUdsdtdudvdwd+c,cxd-cydzdAd.c/c:c;c=c?cBdCd@c[c]c^cDd_c`cEd{cFdGdHd|c}c~cadbdcdIdJdddedfdgd0d$exfyf[ $cig@fIfLf*gh i j 5d5c6c, - Qc. bc
760 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 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g pf:fqf;fkcGcids t VcKdLd* + icjcOdjdkdPdldQdRdSdmdndodpdqdrdTdUdsdtdudvdwd+c,cxd-cydzdAd.c/c:c;c=c?cBdCd@c[c]c^cDd_c`cEd{cFdGdHd|c}c~cadbdcdIdJdddedfdgd0dxfyf[ $cig@fIfLf*gh i j 5d5c6c, - Qc. bc
761 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 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g pf:fqf;fkcGcidOdjdkdPdldQdRdSdmdndodpdqdrdTdUdsdtdudvdwd+c,cxd-cydzdAd.c/c:c;c=c?cBdCd@c[c]c^cDd_c`cEd{cFdGdHd|c}c~cadbdcdIdJdddedfdgd0dxfyf[ $cig@fIfLf*gh i j 5d5c6cQcbc
762 _init_memory_attrs(self) 2s t VcKdLd* + icjc, - .
763 return self._mem_attrs.is_host_accessible 2s t VcKdLd* + icjc, - .
765 @property
766 def is_managed(self) -> bool:
767 """Return True if this buffer is CUDA managed (unified) memory, otherwise False."""
768 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 7c8cphqhrhshth3haibi/dcidieifi4h5hhcgiuh1c9c`ba b c 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g kcGc$e[ $cYd3dh i j
769 _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 7c8cphqhrhshth3haibi/dcidieifi4h5hhcgiuh1c9c`ba b c 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g kcGc[ $cYd3dh i j
770 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 7c8cphqhrhshth3haibi/dcidieifi4h5hhcgiuh1c9c`ba b c 9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g kcGc[ $cYd3dh i j
771 return True 27c8cphqhrhshth3haibi/dcidieifi4h5hhcgiuh1c9cGc[ $c
772 # Pool-allocated managed memory does not set CU_POINTER_ATTRIBUTE_IS_MANAGED,
773 # so fall back to the memory resource when it advertises managed allocations.
774 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 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g kcYd3dh i j
776 @property
777 def is_mapped(self) -> bool:
778 """Return True if this buffer is mapped into the process via IPC."""
779 return getattr(self._ipc_data, "is_mapped", False) 2| } ncAh{gjh0d}i+j
782 @property
783 def memory_resource(self) -> MemoryResource:
784 """Return the memory resource associated with this buffer."""
785 return self._memory_resource 2vh^ _ ` { HcIcJcKcLcMcNc; oc# $ = ( pc) qcrcsctc+h,h-h.hejQiRiSiTi? TcUc)cUiViWiXi/hYi:hZi;h0i=h1i?h2i@h3ifjgjhj6b7bvc|b}b8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBczhghThBhhhEgChDhEhFhih{g|g]h#c+b,bCcDc~bacEcFc-b.b7ehd!cXc/e9e0dkeigleah@fmeIfchHhIhZhJhdhehKh)gbgcg|hLhMhNhOhLf0h*g-dPh2hQh[f]f5dQc:d;d=dwexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAf2e3eBf4e5e6e?d@d[d]d^d_d`dZc0cbc{d
787 @property
788 def size(self) -> int:
789 """Return the memory size of this buffer."""
790 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 vh0 1 2 3 4 5 ] ^ _ ` { HcIcJcKcLcMcNc[i]i^i/bSc:b;b=b?b6 7 8 ; ccoc# $ % r ' = ( Njpco p q ) qcrcsctcOjPjQjlcmck dc@bl m n ec[bWcOc(c]b{bfcgc^b_bphjgqhkgrhlgshmgthngog+epgqgrgsgtghcuguhvg`b+h,h-h.hQiRiSiTi? TcUc)cUiViWiXi/hYi:hZi;h0i=h1i?h2i@h3i6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBczh(gghAhThBhEgChDhEhUhFhih{g|gjh+b,bCcDc~bacEcFc-b.b,e-eMd7ehd}g~g!cagkha b c %e'e(e9 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g 7dwfpfid0dmhnhkeWhXhwg[ $cigle_i`i{i@fmeIfufYhHhIhZhJhdhehKh)gbgcgrfLhMhNhOh}hLf0h*gPh~h1h2hQhh i j Rh[f]fVd5d5c6cQc.dcedeeefegeheie1djeveWdXdwexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAf2e3eBf4e5e6eZc0cbc
792 @property
793 def owner(self) -> object:
794 """Return the object holding external allocation."""
795 return self._owner 2Vc
798cdef class MemoryResource:
799 """Abstract base class for memory resources that manage allocation and
800 deallocation of buffers.
802 Subclasses must implement methods for allocating and deallocation, as well
803 as properties associated with this memory resource from which all allocated
804 buffers will inherit. (Since all :class:`Buffer` instances allocated and
805 returned by the :meth:`allocate` method would hold a reference to self, the
806 buffer properties are retrieved simply by looking up the underlying memory
807 resource's respective property.)
808 """
810 def allocate(self, size_t size, *, stream: Stream | GraphBuilder) -> Buffer:
811 """Allocate a buffer of the requested size.
813 Parameters
814 ----------
815 size : int
816 The size of the buffer to allocate, in bytes.
817 stream : :obj:`~_stream.Stream` | :obj:`~graph.GraphBuilder`
818 Keyword-only. The stream on which to perform the allocation
819 asynchronously. Must be passed explicitly; pass
820 ``device.default_stream`` to use the default stream. For subclasses
821 that support stream-ordered deallocation, this stream also orders
822 the buffer's eventual deallocation, so if the buffer may be freed
823 from a different host thread, prefer a stream other than the
824 per-thread default stream, which refers to a different stream on
825 each thread.
827 Returns
828 -------
829 Buffer
830 The allocated buffer object, which can be used for device or host operations
831 depending on the resource's properties.
832 """
833 raise TypeError("MemoryResource.allocate must be implemented by subclasses.") 2%j
835 def deallocate(
836 self,
837 ptr: DevicePointerType,
838 size_t size,
839 *,
840 stream: Stream | GraphBuilder
841 ) -> None:
842 """Deallocate a buffer previously allocated by this resource.
844 Parameters
845 ----------
846 ptr : :obj:`~_memory.DevicePointerType`
847 The pointer or handle to the buffer to deallocate.
848 size : int
849 The size of the buffer to deallocate, in bytes.
850 stream : :obj:`~_stream.Stream` | :obj:`~graph.GraphBuilder`
851 Keyword-only. The stream on which to perform the deallocation
852 asynchronously. Must be passed explicitly; pass
853 ``device.default_stream`` to use the default stream.
854 """
855 raise TypeError("MemoryResource.deallocate must be implemented by subclasses.") 2%j
857 @property
858 def is_device_accessible(self) -> bool:
859 """Whether buffers allocated by this resource are device-accessible."""
860 raise TypeError("MemoryResource.is_device_accessible must be implemented by subclasses.") 2%j
862 @property
863 def is_host_accessible(self) -> bool:
864 """Whether buffers allocated by this resource are host-accessible."""
865 raise TypeError("MemoryResource.is_host_accessible must be implemented by subclasses.") 2%j
867 @property
868 def is_managed(self) -> bool:
869 """Whether buffers allocated by this resource are CUDA managed (unified) memory."""
870 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 ! bbcbdbebfbgbhbibjbkblbmbnbobpbqbrbsbtbubvbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLbMbNbObPbQbRbSbTbUbVbWbXbYbZb0b1b2b3b4b5bd e f g kcYd3dh i j
872 @property
873 def device_id(self) -> int:
874 """Device ID associated with this memory resource, or -1 if not applicable."""
875 raise TypeError("MemoryResource.device_id must be implemented by subclasses.") 2%j
878# Buffer Implementation Helpers
879# -----------------------------
880cdef Buffer Buffer_from_deviceptr_handle(
881 DevicePtrHandle h_ptr,
882 size_t size,
883 MemoryResource mr,
884 object ipc_descriptor = None,
885 type cls = Buffer,
886):
887 """Create a Buffer (or subclass instance) from an existing DevicePtrHandle."""
888 cdef Buffer buf = cls.__new__(cls) 26h7h8h9h!h#hhivjwj$h^f%h'h_fvh`fdj(h)hii*hjikilixjyjzj^ _ ` { HcIcJcKcLcMcNc[i]i^iygzgAg/bYcRc:b;b=b?bZdBgCgDgMfNfOf# $ % Pfr Qf' RfSfTfUf( VfWfo p q ) XfYfZf0f1f2f3f4f5f6f7f8flcmck l m n 7c8cmi~i/dajbjcj1c9cdgegwhxhyhfh+h,h-h.hejQiRiAjSiTiBj? TcUc)cUiViCjWiXiDj/hYi:hZi;h0i=h1i?h2i@h3ifjEjgjFjhjGj6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBczh(gghAhThBhhhEgChDhEhUhFhih{g|g[h]h#cjh+b,bCcDc~bacEcFc-b.b,e-eMdhd^hni_hoi}g`hGh~gpi!cagkhlhXca b c / 4d: @ Vhd e f g s t mhnhqikeWhXh$cigle_i`i{irisitiuiviwixiyiziAiBiCiDiahEiFiGiHiIiJiKiLiMiYd3d@fmeIfchNiYhHhIhZhJhdhehKh)gOiPi{hbgcgfg|hLhMhNhOh}hLf0h*g-dggPh~h1h2hQhh i j 9f!f#f$f%f'f[f]f(f)f*f+f,f-f.f/faeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dWdXd. wexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6eHfZc0cbc
889 buf._h_ptr = h_ptr 26h7h8h9h!h#hhivjwj$h^f%h'h_fvh`fdj(h)hii*hjikilixjyjzj^ _ ` { HcIcJcKcLcMcNc[i]i^iygzgAg/bYcRc:b;b=b?bZdBgCgDgMfNfOf# $ % Pfr Qf' RfSfTfUf( VfWfo p q ) XfYfZf0f1f2f3f4f5f6f7f8flcmck l m n 7c8cmi~i/dajbjcj1c9cdgegwhxhyhfh+h,h-h.hejQiRiAjSiTiBj? TcUc)cUiViCjWiXiDj/hYi:hZi;h0i=h1i?h2i@h3ifjEjgjFjhjGj6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBczh(gghAhThBhhhEgChDhEhUhFhih{g|g[h]h#cjh+b,bCcDc~bacEcFc-b.b,e-eMdhd^hni_hoi}g`hGh~gpi!cagkhlhXca b c / 4d: @ Vhd e f g s t mhnhqikeWhXh$cigle_i`i{irisitiuiviwixiyiziAiBiCiDiahEiFiGiHiIiJiKiLiMiYd3d@fmeIfchNiYhHhIhZhJhdhehKh)gOiPi{hbgcgfg|hLhMhNhOh}hLf0h*g-dggPh~h1h2hQhh i j 9f!f#f$f%f'f[f]f(f)f*f+f,f-f.f/faeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dWdXd. wexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6eHfZc0cbc
890 buf._size = size 26h7h8h9h!h#hhivjwj$h^f%h'h_fvh`fdj(h)hii*hjikilixjyjzj^ _ ` { HcIcJcKcLcMcNc[i]i^iygzgAg/bYcRc:b;b=b?bZdBgCgDgMfNfOf# $ % Pfr Qf' RfSfTfUf( VfWfo p q ) XfYfZf0f1f2f3f4f5f6f7f8flcmck l m n 7c8cmi~i/dajbjcj1c9cdgegwhxhyhfh+h,h-h.hejQiRiAjSiTiBj? TcUc)cUiViCjWiXiDj/hYi:hZi;h0i=h1i?h2i@h3ifjEjgjFjhjGj6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBczh(gghAhThBhhhEgChDhEhUhFhih{g|g[h]h#cjh+b,bCcDc~bacEcFc-b.b,e-eMdhd^hni_hoi}g`hGh~gpi!cagkhlhXca b c / 4d: @ Vhd e f g s t mhnhqikeWhXh$cigle_i`i{irisitiuiviwixiyiziAiBiCiDiahEiFiGiHiIiJiKiLiMiYd3d@fmeIfchNiYhHhIhZhJhdhehKh)gOiPi{hbgcgfg|hLhMhNhOh}hLf0h*g-dggPh~h1h2hQhh i j 9f!f#f$f%f'f[f]f(f)f*f+f,f-f.f/faeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dWdXd. wexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6eHfZc0cbc
891 buf._memory_resource = mr 26h7h8h9h!h#hhivjwj$h^f%h'h_fvh`fdj(h)hii*hjikilixjyjzj^ _ ` { HcIcJcKcLcMcNc[i]i^iygzgAg/bYcRc:b;b=b?bZdBgCgDgMfNfOf# $ % Pfr Qf' RfSfTfUf( VfWfo p q ) XfYfZf0f1f2f3f4f5f6f7f8flcmck l m n 7c8cmi~i/dajbjcj1c9cdgegwhxhyhfh+h,h-h.hejQiRiAjSiTiBj? TcUc)cUiViCjWiXiDj/hYi:hZi;h0i=h1i?h2i@h3ifjEjgjFjhjGj6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBczh(gghAhThBhhhEgChDhEhUhFhih{g|g[h]h#cjh+b,bCcDc~bacEcFc-b.b,e-eMdhd^hni_hoi}g`hGh~gpi!cagkhlhXca b c / 4d: @ Vhd e f g s t mhnhqikeWhXh$cigle_i`i{irisitiuiviwixiyiziAiBiCiDiahEiFiGiHiIiJiKiLiMiYd3d@fmeIfchNiYhHhIhZhJhdhehKh)gOiPi{hbgcgfg|hLhMhNhOh}hLf0h*g-dggPh~h1h2hQhh i j 9f!f#f$f%f'f[f]f(f)f*f+f,f-f.f/faeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dWdXd. wexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6eHfZc0cbc
892 buf._ipc_data = IPCDataForBuffer(ipc_descriptor, True) if ipc_descriptor is not None else None 26h7h8h9h!h#hhivjwj$h^f%h'h_fvh`fdj(h)hii*hjikilixjyjzj^ _ ` { HcIcJcKcLcMcNc[i]i^iygzgAg/bYcRc:b;b=b?bZdBgCgDgMfNfOf# $ % Pfr Qf' RfSfTfUf( VfWfo p q ) XfYfZf0f1f2f3f4f5f6f7f8flcmck l m n 7c8cmi~i/dajbjcj1c9cdgegwhxhyhfh+h,h-h.hejQiRiAjSiTiBj? TcUc)cUiViCjWiXiDj/hYi:hZi;h0i=h1i?h2i@h3ifjEjgjFjhjGj6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBczh(gghAhThBhhhEgChDhEhUhFhih{g|g[h]h#cjh+b,bCcDc~bacEcFc-b.b,e-eMdhd^hni_hoi}g`hGh~gpi!cagkhlhXca b c / 4d: @ Vhd e f g s t mhnhqikeWhXh$cigle_i`i{irisitiuiviwixiyiziAiBiCiDiahEiFiGiHiIiJiKiLiMiYd3d@fmeIfchNiYhHhIhZhJhdhehKh)gOiPi{hbgcgfg|hLhMhNhOh}hLf0h*g-dggPh~h1h2hQhh i j 9f!f#f$f%f'f[f]f(f)f*f+f,f-f.f/faeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dWdXd. wexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6eHfZc0cbc
893 buf._owner = None 26h7h8h9h!h#hhivjwj$h^f%h'h_fvh`fdj(h)hii*hjikilixjyjzj^ _ ` { HcIcJcKcLcMcNc[i]i^iygzgAg/bYcRc:b;b=b?bZdBgCgDgMfNfOf# $ % Pfr Qf' RfSfTfUf( VfWfo p q ) XfYfZf0f1f2f3f4f5f6f7f8flcmck l m n 7c8cmi~i/dajbjcj1c9cdgegwhxhyhfh+h,h-h.hejQiRiAjSiTiBj? TcUc)cUiViCjWiXiDj/hYi:hZi;h0i=h1i?h2i@h3ifjEjgjFjhjGj6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBczh(gghAhThBhhhEgChDhEhUhFhih{g|g[h]h#cjh+b,bCcDc~bacEcFc-b.b,e-eMdhd^hni_hoi}g`hGh~gpi!cagkhlhXca b c / 4d: @ Vhd e f g s t mhnhqikeWhXh$cigle_i`i{irisitiuiviwixiyiziAiBiCiDiahEiFiGiHiIiJiKiLiMiYd3d@fmeIfchNiYhHhIhZhJhdhehKh)gOiPi{hbgcgfg|hLhMhNhOh}hLf0h*g-dggPh~h1h2hQhh i j 9f!f#f$f%f'f[f]f(f)f*f+f,f-f.f/faeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dWdXd. wexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6eHfZc0cbc
894 buf._mem_attrs_inited.store(False) 26h7h8h9h!h#hhivjwj$h^f%h'h_fvh`fdj(h)hii*hjikilixjyjzj^ _ ` { HcIcJcKcLcMcNc[i]i^iygzgAg/bYcRc:b;b=b?bZdBgCgDgMfNfOf# $ % Pfr Qf' RfSfTfUf( VfWfo p q ) XfYfZf0f1f2f3f4f5f6f7f8flcmck l m n 7c8cmi~i/dajbjcj1c9cdgegwhxhyhfh+h,h-h.hejQiRiAjSiTiBj? TcUc)cUiViCjWiXiDj/hYi:hZi;h0i=h1i?h2i@h3ifjEjgjFjhjGj6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBczh(gghAhThBhhhEgChDhEhUhFhih{g|g[h]h#cjh+b,bCcDc~bacEcFc-b.b,e-eMdhd^hni_hoi}g`hGh~gpi!cagkhlhXca b c / 4d: @ Vhd e f g s t mhnhqikeWhXh$cigle_i`i{irisitiuiviwixiyiziAiBiCiDiahEiFiGiHiIiJiKiLiMiYd3d@fmeIfchNiYhHhIhZhJhdhehKh)gOiPi{hbgcgfg|hLhMhNhOh}hLf0h*g-dggPh~h1h2hQhh i j 9f!f#f$f%f'f[f]f(f)f*f+f,f-f.f/faeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dWdXd. wexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6eHfZc0cbc
895 return buf 26h7h8h9h!h#hhivjwj$h^f%h'h_fvh`fdj(h)hii*hjikilixjyjzj^ _ ` { HcIcJcKcLcMcNc[i]i^iygzgAg/bYcRc:b;b=b?bZdBgCgDgMfNfOf# $ % Pfr Qf' RfSfTfUf( VfWfo p q ) XfYfZf0f1f2f3f4f5f6f7f8flcmck l m n 7c8cmi~i/dajbjcj1c9cdgegwhxhyhfh+h,h-h.hejQiRiAjSiTiBj? TcUc)cUiViCjWiXiDj/hYi:hZi;h0i=h1i?h2i@h3ifjEjgjFjhjGj6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBczh(gghAhThBhhhEgChDhEhUhFhih{g|g[h]h#cjh+b,bCcDc~bacEcFc-b.b,e-eMdhd^hni_hoi}g`hGh~gpi!cagkhlhXca b c / 4d: @ Vhd e f g s t mhnhqikeWhXh$cigle_i`i{irisitiuiviwixiyiziAiBiCiDiahEiFiGiHiIiJiKiLiMiYd3d@fmeIfchNiYhHhIhZhJhdhehKh)gOiPi{hbgcgfg|hLhMhNhOh}hLf0h*g-dggPh~h1h2hQhh i j 9f!f#f$f%f'f[f]f(f)f*f+f,f-f.f/faeVd5d5c6c, - beQc.dcedeqeeefegehereseteieue1dje2dWdXd. wexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeNeOePeQeReSeTeUeVeWeXeYeZe0e1eAfJfKf2e3eBf4e5e6eHfZc0cbc
898cdef tuple Buffer_coerce_batch(object buffers, str what, str single_hint):
899 """Coerce ``buffers`` to a ``tuple[Buffer, ...]``; reject a bare Buffer.
901 Shared by the batched free functions. Passing one Buffer is rejected
902 rather than treated as a one-element batch so that the per-buffer API
903 named by ``single_hint`` stays the single obvious way to do it.
904 """
905 cdef list out
906 if isinstance(buffers, Buffer): 2; ccoc# $ % r ' TjUj= ( Njpco p q ) qcrcsctcVjOjPjQjRjSjLjMjlcmc7c8c1c9cdgegwhxhyh
907 raise TypeError( 2Mjwhxhyh
908 f"{what}: pass a sequence of Buffers; for a single buffer use {single_hint}" 2Mjwhxhyh
909 )
910 if not isinstance(buffers, Sequence): 2; ccoc# $ % r ' TjUj= ( Njpco p q ) qcrcsctcVjOjPjQjRjSjLjMjlcmc7c8c1c9cdgeg
911 raise TypeError( 2Lj
912 f"{what}: buffers must be a sequence of Buffer, got {type(buffers).__name__}" 2Lj
913 )
914 if not buffers: 2; ccoc# $ % r ' TjUj= ( Njpco p q ) qcrcsctcVjOjPjQjRjSjLjMjlcmc7c8c1c9cdgeg
915 raise ValueError(f"{what}: empty buffers sequence") 2Rj
916 out = [] 2; ccoc# $ % r ' TjUj= ( Njpco p q ) qcrcsctcVjOjPjQjRjSjLjMjlcmc7c8c1c9cdgeg
917 for item in buffers: 2; ccoc# $ % r ' TjUj= ( Njpco p q ) qcrcsctcVjOjPjQjRjSjLjMjlcmc7c8c1c9cdgeg
918 if not isinstance(item, Buffer): 2; ccoc# $ % r ' TjUj= ( Njpco p q ) qcrcsctcVjOjPjQjRjSjLjMjlcmc7c8c1c9cdgeg
919 raise TypeError(f"{what}: expected Buffer, got {type(item).__name__}") 2Sj
920 Buffer_check_open(<Buffer>item) 2; ccoc# $ % r ' TjUj= ( Njpco p q ) qcrcsctcVjOjPjQjRjSjLjMjlcmc7c8c1c9cdgeg
921 out.append(item) 2; ccoc# $ % r ' TjUj= ( Njpco p q ) qcrcsctcVjOjPjQjRjSjLjMjlcmc7c8c1c9cdgeg
922 return tuple(out) 2; ccoc# $ % r ' TjUj= ( Njpco p q ) qcrcsctcVjOjPjQjRjSjLjMjlcmc7c8c1c9cdgeg
924cdef inline void Buffer_set_deallocation_stream(Buffer self, object stream):
925 """Validate and replace a live buffer's deallocation recipe."""
926 Buffer_check_open(self) 2ygzgAgBgCgDg4icc5i6i# $ % 7ir 8i' 9i!i#i$i( %i'io p q ) (i)i*i+i,i-i.i/i:i;i=i?ilcmck dc@bl m n ec[bWcOc]bfcgc^b_baga b c ne7dwfoe!eke}dlepe~dmenf8ebgcgfggg~h
927 cdef Stream s = Stream_accept(stream) 2ygzgAgBgCgDg4icc5i6i# $ % 7ir 8i' 9i!i#i$i( %i'io p q ) (i)i*i+i,i-i.i/i:i;i=i?ilcmck dc@bl m n ec[bWcOc]bfcgc^b_baga b c ne7dwfoe!eke}dlepe~dmenf8ebgcgfggg~h
928 _apply_deallocation_stream(self._h_ptr, s._h_stream) 2ygzgAgBgCgDg4icc5i6i# $ % 7ir 8i' 9i!i#i$i( %i'io p q ) (i)i*i+i,i-i.i/i:i;i=i?ilcmck dc@bl m n ec[bWcOc]bfcgc^b_baga b c ne7dwfoeke}dlepe~dme8ebgcgfggg~h
931cdef inline void Buffer_close(Buffer self, object stream):
932 """Close a buffer, freeing its memory."""
933 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 6h7hCf8h9hhi^f'h_fvh`f(h)hii*h0 1 2 3 4 5 jikili^ _ ` { HcIcJcKcLcMcNcygzgAg)e6 7 8 *eZdBgCgDg; 4icc5ioc6i# $ % 7ir 8i' 9i!i#i= $i( %ipc'io p q ) qc(irc)isc*itc+i,i-i.i/i:i;i=i?ilcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_b7c8cijjjkjljmjnjmi+eojHj/dpjIjqjrjJjhgsjKjhctjuj1c9cdgegwhxhyh`bfh? 6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBczh(gghAhThBhhhEgChDhEhUhFhih{g|g[h]h#cjh+b,bCcDc~bacEcFc-b.bMd7ehd^hni_hoi}g`hGh~gpi!cagkhlhXca b c Ef/ ofFf4d.e: @ FgVh9 ! d e f g /e9e|dNd6d*cnevf7ds t Vc* + icjc:e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe$e!e?fmhnhqike}dWhXhxfyfzfGfiglerisitiuiviwixiyiziAiBiCiDiahEiFiGiHiIiJiKiLiMisfpe#etf~dYd3dbh@fmeIfchNinfuf8eYhHhIhZhJhdhehKh)gOiPi{hbgcgfg|hrfLhMhNhOh}hLf0h*g-dggPh1h2hQh}i[f]faeVdbeQc.dcedeqeeefegehereseteieue1dje2dveWdXdZc0cbc
934 return 2~ abFg}i
935 # Update deallocation stream if provided
936 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 6h7hCf8h9hhi^f'h_fvh`f(h)hii*h0 1 2 3 4 5 jikili^ _ ` { HcIcJcKcLcMcNcygzgAg)e6 7 8 *eZdBgCgDg; 4icc5ioc6i# $ % 7ir 8i' 9i!i#i= $i( %ipc'io p q ) qc(irc)isc*itc+i,i-i.i/i:i;i=i?ilcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_b7c8cijjjkjljmjnjmi+eojHj/dpjIjqjrjJjhgsjKjhctjuj1c9cdgegwhxhyh`bfh? 6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBczh(gghAhThBhhhEgChDhEhUhFhih{g|g[h]h#cjh+b,bCcDc~bacEcFc-b.bMd7ehd^hni_hoi}g`hGh~gpi!cagkhlhXca b c Ef/ ofFf4d.e: @ FgVh9 ! d e f g /e9e|dNd6d*cnevf7ds t Vc* + icjc:e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe$e!e?fmhnhqike}dWhXhxfyfzfGfiglerisitiuiviwixiyiziAiBiCiDiahEiFiGiHiIiJiKiLiMisfpe#etf~dYd3dbh@fmeIfchNinfuf8eYhHhIhZhJhdhehKh)gOiPi{hbgcgfg|hrfLhMhNhOh}hLf0h*g-dggPh1h2hQh}i[f]faeVdbeQc.dcedeqeeefegehereseteieue1dje2dveWdXdZc0cbc
937 Buffer_set_deallocation_stream(self, stream) 2ygzgAgBgCgDg4icc5i6i# $ % 7ir 8i' 9i!i#i$i( %i'io p q ) (i)i*i+i,i-i.i/i:i;i=i?ilcmck dc@bl m n ec[bWcOc]bfcgc^b_baga b c neoe!eke}dlepe~dme8egg
938 # Reset handle - RAII deleter will free the memory (and release owner ref in C++)
939 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 6h7hCf8h9hhi^f'h_fvh`f(h)hii*h0 1 2 3 4 5 jikili^ _ ` { HcIcJcKcLcMcNcygzgAg)e6 7 8 *eZdBgCgDg; 4icc5ioc6i# $ % 7ir 8i' 9i!i#i= $i( %ipc'io p q ) qc(irc)isc*itc+i,i-i.i/i:i;i=i?ilcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_b7c8cijjjkjljmjnjmi+eojHj/dpjIjqjrjJjhgsjKjhctjuj1c9cdgegwhxhyh`bfh? 6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBczh(gghAhThBhhhEgChDhEhUhFhih{g|g[h]h#cjh+b,bCcDc~bacEcFc-b.bMd7ehd^hni_hoi}g`hGh~gpi!cagkhlhXca b c Ef/ ofFf4d.e: @ FgVh9 ! d e f g /e9e|dNd6d*cnevf7ds t Vc* + icjc:e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe$e!e?fmhnhqike}dWhXhxfyfzfGfiglerisitiuiviwixiyiziAiBiCiDiahEiFiGiHiIiJiKiLiMisfpe#etf~dYd3dbh@fmeIfchNinfuf8eYhHhIhZhJhdhehKh)gOiPi{hbgcgfg|hrfLhMhNhOh}hLf0h*g-dggPh1h2hQh}i[f]faeVdbeQc.dcedeqeeefegehereseteieue1dje2dveWdXdZc0cbc
940 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 6h7hCf8h9hhi^f'h_fvh`f(h)hii*h0 1 2 3 4 5 jikili^ _ ` { HcIcJcKcLcMcNcygzgAg)e6 7 8 *eZdBgCgDg; 4icc5ioc6i# $ % 7ir 8i' 9i!i#i= $i( %ipc'io p q ) qc(irc)isc*itc+i,i-i.i/i:i;i=i?ilcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_b7c8cijjjkjljmjnjmi+eojHj/dpjIjqjrjJjhgsjKjhctjuj1c9cdgegwhxhyh`bfh? 6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBczh(gghAhThBhhhEgChDhEhUhFhih{g|g[h]h#cjh+b,bCcDc~bacEcFc-b.bMd7ehd^hni_hoi}g`hGh~gpi!cagkhlhXca b c Ef/ ofFf4d.e: @ FgVh9 ! d e f g /e9e|dNd6d*cnevf7ds t Vc* + icjc:e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe$e!e?fmhnhqike}dWhXhxfyfzfGfiglerisitiuiviwixiyiziAiBiCiDiahEiFiGiHiIiJiKiLiMisfpe#etf~dYd3dbh@fmeIfchNinfuf8eYhHhIhZhJhdhehKh)gOiPi{hbgcgfg|hrfLhMhNhOh}hLf0h*g-dggPh1h2hQh}i[f]faeVdbeQc.dcedeqeeefegehereseteieue1dje2dveWdXdZc0cbc
941 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 6h7hCf8h9hhi^f'h_fvh`f(h)hii*h0 1 2 3 4 5 jikili^ _ ` { HcIcJcKcLcMcNcygzgAg)e6 7 8 *eZdBgCgDg; 4icc5ioc6i# $ % 7ir 8i' 9i!i#i= $i( %ipc'io p q ) qc(irc)isc*itc+i,i-i.i/i:i;i=i?ilcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_b7c8cijjjkjljmjnjmi+eojHj/dpjIjqjrjJjhgsjKjhctjuj1c9cdgegwhxhyh`bfh? 6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBczh(gghAhThBhhhEgChDhEhUhFhih{g|g[h]h#cjh+b,bCcDc~bacEcFc-b.bMd7ehd^hni_hoi}g`hGh~gpi!cagkhlhXca b c Ef/ ofFf4d.e: @ FgVh9 ! d e f g /e9e|dNd6d*cnevf7ds t Vc* + icjc:e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe$e!e?fmhnhqike}dWhXhxfyfzfGfiglerisitiuiviwixiyiziAiBiCiDiahEiFiGiHiIiJiKiLiMisfpe#etf~dYd3dbh@fmeIfchNinfuf8eYhHhIhZhJhdhehKh)gOiPi{hbgcgfg|hrfLhMhNhOh}hLf0h*g-dggPh1h2hQh}i[f]faeVdbeQc.dcedeqeeefegehereseteieue1dje2dveWdXdZc0cbc
942 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 6h7hCf8h9hhi^f'h_fvh`f(h)hii*h0 1 2 3 4 5 jikili^ _ ` { HcIcJcKcLcMcNcygzgAg)e6 7 8 *eZdBgCgDg; 4icc5ioc6i# $ % 7ir 8i' 9i!i#i= $i( %ipc'io p q ) qc(irc)isc*itc+i,i-i.i/i:i;i=i?ilcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_b7c8cijjjkjljmjnjmi+eojHj/dpjIjqjrjJjhgsjKjhctjuj1c9cdgegwhxhyh`bfh? 6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBczh(gghAhThBhhhEgChDhEhUhFhih{g|g[h]h#cjh+b,bCcDc~bacEcFc-b.bMd7ehd^hni_hoi}g`hGh~gpi!cagkhlhXca b c Ef/ ofFf4d.e: @ FgVh9 ! d e f g /e9e|dNd6d*cnevf7ds t Vc* + icjc:e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe$e!e?fmhnhqike}dWhXhxfyfzfGfiglerisitiuiviwixiyiziAiBiCiDiahEiFiGiHiIiJiKiLiMisfpe#etf~dYd3dbh@fmeIfchNinfuf8eYhHhIhZhJhdhehKh)gOiPi{hbgcgfg|hrfLhMhNhOh}hLf0h*g-dggPh1h2hQh}i[f]faeVdbeQc.dcedeqeeefegehereseteieue1dje2dveWdXdZc0cbc
943 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 6h7hCf8h9hhi^f'h_fvh`f(h)hii*h0 1 2 3 4 5 jikili^ _ ` { HcIcJcKcLcMcNcygzgAg)e6 7 8 *eZdBgCgDg; 4icc5ioc6i# $ % 7ir 8i' 9i!i#i= $i( %ipc'io p q ) qc(irc)isc*itc+i,i-i.i/i:i;i=i?ilcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_b7c8cijjjkjljmjnjmi+eojHj/dpjIjqjrjJjhgsjKjhctjuj1c9cdgegwhxhyh`bfh? 6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBczh(gghAhThBhhhEgChDhEhUhFhih{g|g[h]h#cjh+b,bCcDc~bacEcFc-b.bMd7ehd^hni_hoi}g`hGh~gpi!cagkhlhXca b c Ef/ ofFf4d.e: @ FgVh9 ! d e f g /e9e|dNd6d*cnevf7ds t Vc* + icjc:e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe$e!e?fmhnhqike}dWhXhxfyfzfGfiglerisitiuiviwixiyiziAiBiCiDiahEiFiGiHiIiJiKiLiMisfpe#etf~dYd3dbh@fmeIfchNinfuf8eYhHhIhZhJhdhehKh)gOiPi{hbgcgfg|hrfLhMhNhOh}hLf0h*g-dggPh1h2hQh}i[f]faeVdbeQc.dcedeqeeefegehereseteieue1dje2dveWdXdZc0cbc
944 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 6h7hCf8h9hhi^f'h_fvh`f(h)hii*h0 1 2 3 4 5 jikili^ _ ` { HcIcJcKcLcMcNcygzgAg)e6 7 8 *eZdBgCgDg; 4icc5ioc6i# $ % 7ir 8i' 9i!i#i= $i( %ipc'io p q ) qc(irc)isc*itc+i,i-i.i/i:i;i=i?ilcmcDf2c3c4ck dc@bl m ucn ec'c[b%cWcOc(c]b{bfcgc^b_b7c8cijjjkjljmjnjmi+eojHj/dpjIjqjrjJjhgsjKjhctjuj1c9cdgegwhxhyh`bfh? 6b7bvc|b}bPc8b9bwc| } nc!b#b~ abxcyc$b%bzc'b(bAc)b*bBczh(gghAhThBhhhEgChDhEhUhFhih{g|g[h]h#cjh+b,bCcDc~bacEcFc-b.bMd7ehd^hni_hoi}g`hGh~gpi!cagkhlhXca b c Ef/ ofFf4d.e: @ FgVh9 ! d e f g /e9e|dNd6d*cnevf7ds t Vc* + icjc:e;eOd8djd=e9dkdPd?e@e[eld]eQdRdSdmdndodpdqdrd^eTdUdsdtd!dudvd#d_e`e{ewd$d+c|e%d,cxd}e~eaf-cbfydzdAd.c/c:c;c=c?ccfBdCd@c[c'd]c^c(ddfefffDd)d_cgf*d`cEdhfifjf{ckfFdGdHd|c}c~cadbdcdlfIdJddded+dfdgd,dmf0doe$e!e?fmhnhqike}dWhXhxfyfzfGfiglerisitiuiviwixiyiziAiBiCiDiahEiFiGiHiIiJiKiLiMisfpe#etf~dYd3dbh@fmeIfchNinfuf8eYhHhIhZhJhdhehKh)gOiPi{hbgcgfg|hrfLhMhNhOh}hLf0h*g-dggPh1h2hQh}i[f]faeVdbeQc.dcedeqeeefegehereseteieue1dje2dveWdXdZc0cbc