code: def cramervonmises(rvs, cdf, args=()):
      """Perform the one-sample Cramér-von Mises test for goodness of fit.
  
      This performs a test of the goodness of fit of a cumulative distribution
      function (cdf) :math:`F` compared to the empirical distribution function
      :math:`F_n` of observed random variates :math:`X_1, ..., X_n` that are
      assumed to be independent and identically distributed ([1]_).
      The null hypothesis is that the :math:`X_i` have cumulative distribution
      :math:`F`.
  
      Parameters
      ----------
      rvs : array_like
          A 1-D array of observed values of the random variables :math:`X_i`.
      cdf : str or callable
          The cumulative distribution function :math:`F` to test the
          observations against. If a string, it should be the name of a
          distribution in `scipy.stats`. If a callable, that callable is used
          to calculate the cdf: ``cdf(x, *args) -> float``.
      args : tuple, optional
          Distribution parameters. These are assumed to be known; see Notes.
  
      Returns
      -------
      res : object with attributes
          statistic : float
              Cramér-von Mises statistic.
          pvalue : float
              The p-value.
  
      See Also
      --------
      kstest, cramervonmises_2samp
  
      Notes
      -----
      .. versionadded:: 1.6.0
  
      The p-value relies on the approximation given by equation 1.8 in [2]_.
      It is important to keep in mind that the p-value is only accurate if
      one tests a simple hypothesis, i.e. the parameters of the reference
      distribution are known. If the parameters are estimated from the data
      (composite hypothesis), the computed p-value is not reliable.
  
      References
      ----------
      .. [1] Cramér-von Mises criterion, Wikipedia,
             https://en.wikipedia.org/wiki/Cram%C3%A9r%E2%80%93von_Mises_criterion
      .. [2] Csörgő, S. and Faraway, J. (1996). The Exact and Asymptotic
             Distribution of Cramér-von Mises Statistics. Journal of the
             Royal Statistical Society, pp. 221-234.
  
      Examples
      --------
  
      Suppose we wish to test whether data generated by ``scipy.stats.norm.rvs``
      were, in fact, drawn from the standard normal distribution. We choose a
      significance level of ``alpha=0.05``.
  
      >>> import numpy as np
      >>> from scipy import stats
      >>> rng = np.random.default_rng(165417232101553420507139617764912913465)
      >>> x = stats.norm.rvs(size=500, random_state=rng)
      >>> res = stats.cramervonmises(x, 'norm')
      >>> res.statistic, res.pvalue
      (0.1072085112565724, 0.5508482238203407)
  
      The p-value exceeds our chosen significance level, so we do not
      reject the null hypothesis that the observed sample is drawn from the
      standard normal distribution.
  
      Now suppose we wish to check whether the same samples shifted by 2.1 is
      consistent with being drawn from a normal distribution with a mean of 2.
  
      >>> y = x + 2.1
      >>> res = stats.cramervonmises(y, 'norm', args=(2,))
      >>> res.statistic, res.pvalue
      (0.8364446265294695, 0.00596286797008283)
  
      Here we have used the `args` keyword to specify the mean (``loc``)
      of the normal distribution to test the data against. This is equivalent
      to the following, in which we create a frozen normal distribution with
      mean 2.1, then pass its ``cdf`` method as an argument.
  
      >>> frozen_dist = stats.norm(loc=2)
      >>> res = stats.cramervonmises(y, frozen_dist.cdf)
      >>> res.statistic, res.pvalue
      (0.8364446265294695, 0.00596286797008283)
  
      In either case, we would reject the null hypothesis that the observed
      sample is drawn from a normal distribution with a mean of 2 (and default
      variance of 1) because the p-value is less than our chosen
      significance level.
  
      """
      if isinstance(cdf, str):
          cdf = getattr(distributions, cdf).cdf
  
      vals = np.sort(np.asarray(rvs))
  
      if vals.size <= 1:
          raise ValueError(
              "The sample must contain at least two observations."
          )
  
      n = len(vals)
      cdfvals = cdf(vals, *args)
  
      u = (2 * np.arange(1, n + 1) - 1) / (2 * n)
      w = 1 / (12 * n) + np.sum((u - cdfvals) ** 2)
  
      # avoid small negative values that can occur due to the approximation
      p = max(0, 1.0 - _cdf_cvm(w, n))
  
      return CramerVonMisesResult(statistic=w, pvalue=p)
  
imports: from collections import namedtuple
  from dataclasses import dataclass
  from math import comb
  import numpy
  import warnings
  from itertools import combinations
  import scipy.stats
  from scipy.optimize import shgo
  from .None import distributions
  from ._common import ConfidenceInterval
  from ._continuous_distns import chi2, norm
  from scipy.special import gamma, kv, gammaln
  from scipy.fft import ifft
  from ._stats_pythran import _a_ij_Aij_Dij2
  from ._stats_pythran import _concordant_pairs, _discordant_pairs
  from ._axis_nan_policy import _axis_nan_policy_factory
  from scipy.stats import _stats_py
label_desc: Use image node_id 8 for calling a global function with example usage: cramervonmises(rvs, cdf, args) and returns: CramerVonMisesResult