code: def test_accurate_dataspecs(self) -> None:
      class Base(HasProps):
          num = NumberSpec(12)
          not_a_dataspec = Float(10)
  
      class Mixin(HasProps):
          mixin_num = NumberSpec(14)
  
      class Sub(Base, Mixin):
          sub_num = NumberSpec(16)
  
      base = Base()
      mixin = Mixin()
      sub = Sub()
  
      assert {"num"} == set(base.dataspecs())
      assert {"mixin_num"} == set(mixin.dataspecs())
      assert {"num", "mixin_num", "sub_num"} == set(sub.dataspecs())
  
imports: from __future__ import annotations
  import pytest
  import numpy
  from bokeh.core.has_props import HasProps, Local
  from bokeh.core.properties import Alias, Dict, Enum, Float, Instance, Int, List, NotSerialized, Nullable, NumberSpec, Override, Readonly, String, UnsetValueError
  from bokeh.model import Model
  from tests.support.util.api import verify_all
  import bokeh.core.properties
label_desc: Use image node_id 6 for calling the TestBasic obj's underlying member method code with example usage: obj.test_accurate_dataspecs() without return types