| 193 | return f"<buf real:{self.is_allocated()} device:{self.device} size:{self.size} dtype:{self.dtype}" + \ |
| 194 | (f" offset:{self.offset}" if self._base is not None else "") + (f" {self.options=}" if self.options is not None else "") + ">" |
| 195 | def as_memoryview(self, allow_zero_copy=False, force_zero_copy=False) -> memoryview: |
| 196 | # zero copy with as_memoryview (disabled by default due to use after free) |
| 197 | if (force_zero_copy or allow_zero_copy) and hasattr(self.allocator, '_as_buffer') and self.options is None: |
| 198 | return self.allocator._as_buffer(self._buf) |
| 199 | assert not force_zero_copy, "force zero copy was passed, but copy is required" |
| 200 | return self.copyout(memoryview(bytearray(self.nbytes))) |
| 201 | def numpy(self) -> 'np.ndarray': # type: ignore [name-defined] # noqa: F821 |
| 202 | import numpy as np |
| 203 | assert _to_np_dtype(self.dtype.base) is not None, f"no np dtype for {self.dtype.base}" |