def METHOD_NAME(
    vstate,
    Ô,
    use_covariance,
    *,
    mutable: CollectionFilter,
) -> tuple[Stats, PyTree]:
    if not isinstance(Ô, Squared) and not config.netket_experimental:
        raise RuntimeError(
            """
            Computing the gradient of non hermitian operator is an
            experimental feature under development and is known not to
            return wrong values sometimes.
            If you want to debug it, set the environment variable
            NETKET_EXPERIMENTAL=1
            """
        )
    σ, args = get_local_kernel_arguments(vstate, Ô)
    local_estimator_fun = get_local_kernel(vstate, Ô)
    Ō, Ō_grad, new_model_state = grad_expect_operator_kernel(
        local_estimator_fun,
        vstate._apply_fun,
        vstate.sampler.machine_pow,
        mutable,
        vstate.parameters,
        vstate.model_state,
        σ,
        args,
    )
    if mutable is not False:
        vstate.model_state = new_model_state
    return Ō, Ō_grad