docstr: Delete this :class:`~perspective.Table` and clean up associated
  resources, assuming it has no :class:`~perspective.View` instances
  registered to it (which must be deleted first).
docstr_tok: ["Delete","this",":","class",":","`","~perspective.Table","`","and","clean","up","associated","resources",",","assuming","it","has","no",":","class",":","`","~perspective.View","`","instances","registered","to","it","(","which","must","be","deleted","first",")","."]
code: def delete(self):
      """Delete this :class:`~perspective.Table` and clean up associated
      resources, assuming it has no :class:`~perspective.View` instances
      registered to it (which must be deleted first).
      """
      if len(self._views) > 0:
          raise PerspectiveError(
              "Cannot delete a Table with active views still linked to it "
              + "- call delete() on each view, and try again."
          )
      self._state_manager.remove_process(self._table.get_id())
      self._table.unregister_gnode(self._gnode_id)
      [cb() for cb in self._delete_callbacks]
      self._table = None
  
imports: from datetime import date, datetime
  from ..core.exception import PerspectiveError
  from ._accessor import _PerspectiveAccessor
  from ._callback_cache import _PerspectiveCallBackCache
  from ._date_validator import _PerspectiveDateValidator
  from ._state import _PerspectiveStateManager
  from ._utils import _dtype_to_pythontype, _dtype_to_str, _parse_expression_inputs, _str_to_pythontype
  from .libpsppy import make_table, update_table, str_to_filter_op, t_dtype, t_filter_op, t_op, validate_expressions
  from .view import View
label_desc: Use image node_id 21 for calling the Table obj's underlying member method code with example usage: obj.delete() without return types