def METHOD_NAME(self):
    ig = [ ImageGeometry(10,20,30) , \
           ImageGeometry(10,20,30) , \
           ImageGeometry(10,20,30) ]
    x = [ g.allocate() for g in ig ]
    ops = [ IdentityOperator(g) for g in ig ]
    K = BlockOperator(*ops)
    X = BlockDataContainer(x[0])
    Y = K.direct(X)
    self.assertTrue(Y.shape == K.shape)
    numpy.testing.assert_array_equal(Y.get_item(0).as_array(),X.get_item(0).as_array())
    numpy.testing.assert_array_equal(Y.get_item(1).as_array(),X.get_item(0).as_array())
    #numpy.testing.assert_array_equal(Y.get_item(2).as_array(),X.get_item(2).as_array())
    X = BlockDataContainer(*x) + 1
    Y = K.T.direct(X)
    # K.T (1,3) X (3,1) => output shape (1,1)
    self.assertTrue(Y.shape == (1,1))
    zero = numpy.zeros(X.get_item(0).shape)
    numpy.testing.assert_array_equal(Y.get_item(0).as_array(),len(x)+zero)
    K2 = BlockOperator(*(ops+ops), shape=(3,2))
    Y = K2.T.direct(X)
    # K.T (2,3) X (3,1) => output shape (2,1)
    self.assertTrue(Y.shape == (2,1))
    try:
        # this should fail as the domain is not compatible
        ig = [ ImageGeometry(10,20,31) , \
            ImageGeometry(10,20,30) , \
            ImageGeometry(10,20,30) ]
        x = [ g.allocate() for g in ig ]
        ops = [ IdentityOperator(g) for g in ig ]
        K = BlockOperator(*ops)
        self.assertFalse(K.column_wise_compatible())
    except ValueError as ve:
        logging.info(str(ve))
        self.assertTrue(True)
    try:
        # this should fail as the range is not compatible
        ig = [ ImageGeometry(10,20,30) , \
            ImageGeometry(10,20,30) , \
            ImageGeometry(10,20,30) ]
        rg0 = [ ImageGeometry(10,20,31) , \
            ImageGeometry(10,20,31) , \
            ImageGeometry(10,20,31) ]
        rg1 = [ ImageGeometry(10,22,31) , \
               ImageGeometry(10,22,31) , \
               ImageGeometry(10,20,31) ]
        x = [ g.allocate() for g in ig ]
        ops = [ IdentityOperator(g, range_geometry=r) for g,r in zip(ig, rg0) ]
        ops += [ IdentityOperator(g, range_geometry=r) for g,r in zip(ig, rg1) ]
        K = BlockOperator(*ops, shape=(2,3))
        logging.info ("K col comp? {}".format(K.column_wise_compatible()))
        logging.info ("K row comp? {}".format(K.row_wise_compatible()))
        for op in ops:
            logging.info ("range {}".format(op.range_geometry().shape))
        for op in ops:
            logging.info ("domain {}".format(op.domain_geometry().shape))
        self.assertFalse(K.row_wise_compatible())
    except ValueError as ve:
        logging.info (str(ve))
        self.assertTrue(True)