def broadcast_check()

in blocksparse/ewops.py [0:0]


def broadcast_check(x, y, ew_op, bc_op, tf_op, name):
    xshape = x.shape.as_list()
    yshape = y.shape.as_list()

    if xshape == yshape:
        if name is None: name = ew_names[ew_op]
        return ew_z_xy_op(x, y, op=ew_op, name=name)

    if bc_op is not None:
        if xshape[-1] == yshape[-1]:
            if yshape[-1] == y.get_shape().num_elements():
                if name is None: name = ew_names[bc_op]
                return ew_z_xb_op(x, y, op=bc_op, name=name)

            if xshape[-1] == x.get_shape().num_elements():
                if name is None: name = ew_names[bc_op]
                return ew_z_xb_op(y, x, op=bc_op, name=name)

    # fall back to tf for everything else for now..
    return tf_op(x, y, name=name)