code: def test_basic(self) -> None:
      t = bt.factor_mark(
          "foo", ["hex", "square"], ["foo", "bar"], start=1, end=2
      )
      assert isinstance(t, Field)
      assert t.field == "foo"
      assert isinstance(t.transform, CategoricalMarkerMapper)
      assert t.transform.markers == ["hex", "square"]
      assert t.transform.factors == ["foo", "bar"]
      assert t.transform.start == 1
      assert t.transform.end == 2
  
imports: from __future__ import annotations
  import pytest
  from bokeh.core.property.vectorization import Expr, Field
  from bokeh.models import CategoricalColorMapper, CategoricalMarkerMapper, CategoricalPatternMapper, CumSum, Dodge, EqHistColorMapper, FactorRange, Jitter, LinearColorMapper, LogColorMapper, Stack
  from tests.support.util.api import verify_all
  import bokeh.transform
label_desc: Use image node_id 1 for calling the Test_factor_mark obj's underlying member method code with example usage: obj.test_basic() without return types