code: def test_numpy_sources(self):
      table = numpy.ones((5, 6, 7, 3), dtype=numpy.float16)
      with pytest.raises(
          ValueError, match="should have either channels"
      ):
          lut = ImageFilter.Color3DLUT((5, 6, 7), table)
  
      table = numpy.ones((7, 6, 5, 3), dtype=numpy.float16)
      lut = ImageFilter.Color3DLUT((5, 6, 7), table)
      assert isinstance(lut.table, numpy.ndarray)
      assert lut.table.dtype == table.dtype
      assert lut.table.shape == (table.size,)
  
      table = numpy.ones((7 * 6 * 5, 3), dtype=numpy.float16)
      lut = ImageFilter.Color3DLUT((5, 6, 7), table)
      assert lut.table.shape == (table.size,)
  
      table = numpy.ones((7 * 6 * 5 * 3), dtype=numpy.float16)
      lut = ImageFilter.Color3DLUT((5, 6, 7), table)
      assert lut.table.shape == (table.size,)
  
      # Check application
      Image.new("RGB", (10, 10), 0).filter(lut)
  
      # Check copy
      table[0] = 33
      assert lut.table[0] == 1
  
      # Check not copy
      table = numpy.ones((7 * 6 * 5 * 3), dtype=numpy.float16)
      lut = ImageFilter.Color3DLUT((5, 6, 7), table, _copy_table=False)
      table[0] = 33
      assert lut.table[0] == 33
  
imports: from __future__ import annotations
  from array import array
  import pytest
  from PIL import Image, ImageFilter
  from .helper import assert_image_equal
label_desc: Use image node_id 3 for calling the TestColorLut3DFilter obj's underlying member method code with example usage: obj.test_numpy_sources() without return types