class_docstr: A Buffer that supports spilling memory off the GPU to avoid OOMs.
  
  This buffer supports spilling the represented data to host memory.
  Spilling can be done manually by calling `.spill(target="cpu")` but
  usually the associated spilling manager triggers spilling based on current
  device memory usage see `cudf.core.buffer.spill_manager.SpillManager`.
  Unspill is triggered automatically when accessing the data of the buffer.
  
  The buffer might not be spillable, which is based on the "expose" status of
  the buffer. We say that the buffer has been exposed if the device pointer
  (integer or void*) has been accessed outside of SpillableBufferOwner.
  In this case, we cannot invalidate the device pointer by moving the data
  to host.
  
  A buffer can be exposed permanently at creation or by accessing the `.ptr`
  property. To avoid this, one can use `.get_ptr()` instead, which support
  exposing the buffer temporarily.
  
  Use the factory function `as_buffer` to create a SpillableBufferOwner
  instance.
class_docstr_tok: ["A","Buffer","that","supports","spilling","memory","off","the","GPU","to","avoid","OOMs",".","This","buffer","supports","spilling","the","represented","data","to","host","memory",".","Spilling","can","be","done","manually","by","calling","`",".spill","(","target=","''","cpu","''",")","`","but","usually","the","associated","spilling","manager","triggers","spilling","based","on","current","device","memory","usage","see","`","cudf.core.buffer.spill_manager.SpillManager","`",".","Unspill","is","triggered","automatically","when","accessing","the","data","of","the","buffer",".","The","buffer","might","not","be","spillable",",","which","is","based","on","the","``","expose","''","status","of","the","buffer",".","We","say","that","the","buffer","has","been","exposed","if","the","device","pointer","(","integer","or","void","*",")","has","been","accessed","outside","of","SpillableBufferOwner",".","In","this","case",",","we","can","not","invalidate","the","device","pointer","by","moving","the","data","to","host",".","A","buffer","can","be","exposed","permanently","at","creation","or","by","accessing","the","`",".ptr","`","property",".","To","avoid","this",",","one","can","use","`",".get_ptr","(",")","`","instead",",","which","support","exposing","the","buffer","temporarily",".","Use","the","factory","function","`","as_buffer","`","to","create","a","SpillableBufferOwner","instance","."]
code: def is_spilled(self) -> bool:
      return self._ptr_desc["type"] != "gpu"
  
imports: from __future__ import annotations
  import collections.abc
  import pickle
  import time
  import weakref
  from threading import RLock
  from typing import TYPE_CHECKING, Any, Dict, List, Literal, Optional, Tuple
  import numpy
  from typing_extensions import Self
  import rmm
  from cudf.core.buffer.buffer import Buffer, BufferOwner, cuda_array_interface_wrapper, host_memory_allocation
  from cudf.utils.nvtx_annotation import _get_color_for_nvtx, annotate
  from cudf.utils.string import format_bytes
label_desc: Use image node_id 4 for calling the SpillableBufferOwner obj's underlying member method code with example usage: obj.is_spilled() and returns: unknown