code: def test_get_embedded_bindparams(self, has_cache_key):
      bp = bindparam("x")
  
      if not has_cache_key:
  
          class NotCacheable(TypeDecorator):
              impl = String
              cache_ok = False
  
          stmt = select(column("q", NotCacheable())).where(
              column("y") == bp
          )
  
      else:
          stmt = select(column("q")).where(column("y") == bp)
  
      eq_(stmt._get_embedded_bindparams(), [bp])
  
      if not has_cache_key:
          is_(stmt._generate_cache_key(), None)
      else:
          is_not_none(stmt._generate_cache_key())
  
imports: from itertools import zip_longest
  from sqlalchemy import bindparam
  from sqlalchemy import Column
  from sqlalchemy import Integer
  from sqlalchemy import MetaData
  from sqlalchemy import select
  from sqlalchemy import String
  from sqlalchemy import Table
  from sqlalchemy import testing
  from sqlalchemy import TypeDecorator
  from sqlalchemy.sql import base
  from sqlalchemy.sql import coercions
  from sqlalchemy.sql import column
  from sqlalchemy.sql import ColumnElement
  from sqlalchemy.sql import roles
  from sqlalchemy.sql import util
  from sqlalchemy.testing import assert_raises
  from sqlalchemy.testing import assert_raises_message
  from sqlalchemy.testing import eq_
  from sqlalchemy.testing import expect_raises_message
  from sqlalchemy.testing import fixtures
  from sqlalchemy.testing import is_
  from sqlalchemy.testing import is_not_none
label_desc: Use image node_id 3 for calling the MiscTest obj's underlying member method code with example usage: obj.test_get_embedded_bindparams(has_cache_key) without return types