code: def testFeatureValues(self):
      training_data = np.array(
          [[0, 0, 2], [1, 1, 0], [0, 2, 2], [1, 3, 0]]
      )
  
      explainer = LimeTabularExplainer(
          training_data=training_data, categorical_features=[0, 1, 2]
      )
  
      self.assertEqual(set(explainer.feature_values[0]), {0, 1})
      self.assertEqual(set(explainer.feature_values[1]), {0, 1, 2, 3})
      self.assertEqual(set(explainer.feature_values[2]), {0, 2})
  
      assert_array_equal(
          explainer.feature_frequencies[0], np.array([0.5, 0.5])
      )
      assert_array_equal(
          explainer.feature_frequencies[1],
          np.array([0.25, 0.25, 0.25, 0.25]),
      )
      assert_array_equal(
          explainer.feature_frequencies[2], np.array([0.5, 0.5])
      )
  
imports: import unittest
  import numpy
  import collections
  import sklearn
  import sklearn.datasets
  import sklearn.ensemble
  import sklearn.linear_model
  from numpy.testing import assert_array_equal
  from sklearn.datasets import load_iris, make_classification, make_multilabel_classification
  from sklearn.ensemble import RandomForestClassifier
  from sklearn.linear_model import LinearRegression
  from lime.discretize import QuartileDiscretizer, DecileDiscretizer, EntropyDiscretizer
  from lime.lime_tabular import LimeTabularExplainer
label_desc: Use image node_id 10 for calling the TestLimeTabular obj's underlying member method code with example usage: obj.testFeatureValues() without return types