code: def test_nchypergeom_fisher_naive(self):
      # test against a very simple implementation
      x, N, m1, n, odds = self.x, self.N, self.m1, self.n, self.odds
  
      @np.vectorize
      def pmf_mean_var(x, N, m1, n, w):
          # simple implementation of nchypergeom_fisher pmf
          m2 = N - m1
          xl = np.maximum(0, n - m2)
          xu = np.minimum(n, m1)
  
          def f(x):
              t1 = special_binom(m1, x)
              t2 = special_binom(m2, n - x)
              return t1 * t2 * w**x
  
          def P(k):
              return sum(f(y) * y**k for y in range(xl, xu + 1))
  
          P0 = P(0)
          P1 = P(1)
          P2 = P(2)
          pmf = f(x) / P0
          mean = P1 / P0
          var = P2 / P0 - (P1 / P0) ** 2
          return pmf, mean, var
  
      pmf, mean, var = pmf_mean_var(x, N, m1, n, odds)
      assert_allclose(nchypergeom_fisher.pmf(x, N, m1, n, odds), pmf)
      assert_allclose(
          nchypergeom_fisher.stats(N, m1, n, odds, moments="m"), mean
      )
      assert_allclose(
          nchypergeom_fisher.stats(N, m1, n, odds, moments="v"), var
      )
  
imports: import pytest
  import itertools
  from scipy.stats import betabinom, betanbinom, hypergeom, nhypergeom, bernoulli, boltzmann, skellam, zipf, zipfian, binom, nbinom, nchypergeom_fisher, nchypergeom_wallenius, randint
  import numpy
  from numpy.testing import assert_almost_equal, assert_equal, assert_allclose, suppress_warnings
  from scipy.special import binom
  from scipy.optimize import root_scalar
  from scipy.integrate import quad
label_desc: Use image node_id 2 for calling the TestNCH obj's underlying member method code with example usage: obj.test_nchypergeom_fisher_naive() and returns: pmf,  mean,  var, unknown, sum