def method(
        self: Any,
        rhs: Any,
        out: Any | None = None,
        where: bool = True,
        casting: CastingKind = "same_kind",
        order: str = "K",
        dtype: np.dtype[Any] | None = None,
    ) -> Any:
        """
        Helper method to apply binary ufunc operations.
        """
        self.check_eager_args(rhs, out)
        if self.deferred is not None:
            from .._array.array import ndarray  # Lazy import

            a = ndarray(self.shape, self.dtype, thunk=self.deferred)
            deferred_ufunc = getattr(_ufunc, ufunc_name)
            return deferred_ufunc._call_full(
                a,
                rhs,
                out=out,
                where=where,
                casting=casting,
                order=order,
                dtype=dtype,
            )
        else:
            rhs_array = (
                rhs._thunk.__numpy_array__()
                if (rhs is not None and hasattr(rhs, "_thunk"))
                else rhs
            )

            out_array = (
                out._thunk.__numpy_array__()
                if (out is not None and hasattr(out, "_thunk"))
                else out
            )
            np_ufunc = getattr(np, ufunc_name)

            return np_ufunc(
                self.array,
                rhs_array,
                out=out_array,
                where=where,
                casting=casting,
                order=order,
                dtype=dtype,
            )

        Helper method to apply binary ufunc operations.
        
cupynumeric/_thunk/eager.py