code: def test_gpusplit_opt(self):
      # Test that we move the node to the GPU
      # Also test float16 computation at the same time.
      rng = np.random.RandomState(seed=utt.fetch_seed())
      m = self.shared(rng.rand(4, 6).astype("float16"))
      o = T.Split(2)(m, 0, [2, 2])
      assert o[0].dtype == "float16"
      f = theano.function([], o, mode=self.mode)
      assert any(
          [
              isinstance(node.op, self.split_op_class)
              for node in f.maker.fgraph.toposort()
          ]
      )
      o1, o2 = f()
      assert np.allclose(o1, m.get_value(borrow=True)[:2])
      assert np.allclose(o2, m.get_value(borrow=True)[2:])
  
imports: from __future__ import absolute_import, print_function, division
  import unittest
  from theano.compat import izip
  from six import iteritems
  import numpy
  import theano
  import theano.tensor
  from theano.tensor import TensorType
  from theano.tensor.basic import alloc
  from theano.tensor.tests import test_basic
  from theano.tensor.tests.test_basic import rand, safe_make_node
  from theano.tests import unittest_tools
  from ..type import GpuArrayType, get_context, gpuarray_shared_constructor
  from ..basic_ops import host_from_gpu, HostFromGpu, GpuFromHost, GpuReshape, GpuToGpu, GpuAlloc, GpuAllocEmpty, GpuContiguous, gpu_join, GpuJoin, GpuSplit, GpuEye, GpuTri, gpu_contiguous
  from ..elemwise import GpuDimShuffle, GpuElemwise
  from ..subtensor import GpuSubtensor
  from .config import mode_with_gpu, mode_without_gpu, test_ctx_name
  from pygpu import gpuarray
label_desc: Use image node_id 2 for calling the G_Join_and_Split obj's underlying member method code with example usage: obj.test_gpusplit_opt() without return types