def METHOD_NAME(
    self, arg_objs, shape: Tuple[int, ...], data=None
) -> Tuple[lo.LinOp, List[Constraint]]:
    """Kronecker product of two matrices.
    Parameters
    ----------
    arg_objs : list
        LinOp for each argument.
    shape : tuple
        The shape of the resulting expression.
    data :
        Additional data required by the atom.
    Returns
    -------
    tuple
        (LinOp for objective, list of constraints)
    """
    if self.args[0].is_constant():
        return lu.kron_r(arg_objs[0], arg_objs[1], shape), []
    else:
        return lu.kron_l(arg_objs[0], arg_objs[1], shape), []