code: def test_filled_unfilled_mix(self):
      x = [1, 2]
      y = [4, 5]
      marker = ["a", "b"]
      shapes = ["o", "x"]
  
      mark = Dots(stroke=2)
      p = (
          Plot(x=x, y=y)
          .add(mark, marker=marker)
          .scale(marker=shapes)
          .plot()
      )
      ax = p._figure.axes[0]
      (points,) = ax.collections
      C0, C1, *_ = p._theme["axes.prop_cycle"].by_key()["color"]
      self.check_offsets(points, x, y)
      self.check_colors(
          "face", points, [to_rgba(C0, 0.2), to_rgba(C0, 0)], None
      )
      self.check_colors("edge", points, [C0, C0], 1)
      assert_array_equal(points.get_linewidths(), [mark.stroke] * 2)
  
imports: from matplotlib.colors import to_rgba, to_rgba_array
  import pytest
  from numpy.testing import assert_array_equal
  from seaborn.palettes import color_palette
  from seaborn._core.plot import Plot
  from seaborn._marks.dot import Dot, Dots
label_desc: Use image node_id 7 for calling the TestDots obj's underlying member method code with example usage: obj.test_filled_unfilled_mix() without return types