code: def testMissingValues(self):
      np.random.seed(23)
      fz = np.array([1.0] * 10000)
      fx = np.random.random(10000)
      fa = np.array([1] * 5000 + [2] * 5000, dtype=float)
      fb = np.array([2.3] * 5000 + [None] * 5000)
      fc = np.array([0.0] * 5000 + [10.0] * 5000)
  
      for method in ["smaller_data", "larger_data"]:
          result = _MI(
              [fz],
              [fa],
              [False],
              [False],
              seed=23,
              estimate_method=method,
          )
          self.assertLess(abs(result), 1e-2)
  
          result = _MI(
              [fc],
              [fa],
              [False],
              [False],
              seed=23,
              estimate_method=method,
          )
          self.assertLess(abs(result - 1), 1e-2)
  
          result = _MI(
              [fb],
              [fa],
              [False],
              [False],
              seed=23,
              estimate_method=method,
          )
          self.assertLess(abs(result - 1), 1e-2)
  
          # Add an independent feature does not affect.
          result = _MI(
              [fc, fx],
              [fa],
              [False] * 2,
              [False],
              seed=23,
              estimate_method=method,
          )
          self.assertLess(abs(result - 1), 1e-2)
  
          result = _MI(
              [fb, fx],
              [fa],
              [False] * 2,
              [False],
              seed=23,
              estimate_method=method,
          )
          self.assertLess(abs(result - 1), 1e-2)
  
imports: from absl.testing import absltest
  from absl.testing import parameterized
  import numpy
  from tensorflow_data_validation.utils import mutual_information_util
label_desc: Use image node_id 6 for calling the RanklabMutualInformationTest obj's underlying member method code with example usage: obj.testMissingValues() without return types