code: def size(self):
      if self.cached_size is not None:
          return self.cached_size
      elif self.is_memory:
          return 0
      elif self.is_mutable:
          return Path(self.path).stat().st_size
      elif self.ds.inspect_data and self.ds.inspect_data.get(self.name):
          self.cached_size = self.ds.inspect_data[self.name]["size"]
          return self.cached_size
      else:
          self.cached_size = Path(self.path).stat().st_size
          return self.cached_size
  
imports: import asyncio
  from collections import namedtuple
  from pathlib import Path
  import hashlib
  import janus
  import queue
  import sys
  import threading
  import uuid
  from .tracer import trace
  from .utils import detect_fts, detect_primary_keys, detect_spatialite, get_all_foreign_keys, get_outbound_foreign_keys, sqlite_timelimit, sqlite3, table_columns, table_column_details
  from .inspect import inspect_hash
label_desc: Use image node_id 9 for calling the Database obj's underlying member method code with example usage: obj.size() and returns: self, int, Path, self, self