code: def test_is_color_tuple_shape(self) -> None:
      assert bcpd.ColorSpec.is_color_tuple_shape((1, 2, 3, 0.5))
      assert bcpd.ColorSpec.is_color_tuple_shape((1.0, 2, 3, 0.5))
      assert bcpd.ColorSpec.is_color_tuple_shape((1, 2.0, 3, 0.5))
      assert bcpd.ColorSpec.is_color_tuple_shape((1, 2, 3.0, 0.5))
  
      assert not bcpd.ColorSpec.is_color_tuple_shape("red")
      assert not bcpd.ColorSpec.is_color_tuple_shape("#ff1234")
      assert not bcpd.ColorSpec.is_color_tuple_shape(None)
      assert not bcpd.ColorSpec.is_color_tuple_shape(10)
  
imports: from __future__ import annotations
  import pytest
  import datetime
  import warnings
  from copy import copy
  import numpy
  import pandas
  from bokeh.core.has_props import HasProps, Local
  from bokeh.core.property.vectorization import Field, Value, field, value
  from tests.support.util.api import verify_all
  import bokeh.core.property.dataspec
label_desc: Use image node_id 14 for calling the Test_ColorSpec obj's underlying member method code with example usage: obj.test_is_color_tuple_shape() without return types