code: def test_score_cache(self):
      def local_scores(*args):
          if args == ("key1", ["key2", "key3"]):
              return -1
          if args == ("key2", ["key3"]):
              return -2
  
          assert False, "Unhandled arguments"
  
      data = pd.DataFrame({"key1": [1, 2], "key2": [1, 2]})
      base_scorer = MagicMock(spec=BicScore)
      base_scorer.local_score = Mock(side_effect=local_scores)
      cache = ScoreCache(base_scorer, data)
  
      self.assertEqual(cache.local_score("key1", ["key2", "key3"]), -1)
      self.assertEqual(
          cache.local_score("key1", ["key2", "key3"]), -1
      )  # cached
      self.assertEqual(cache.local_score("key2", ["key3"]), -2)
      self.assertEqual(
          cache.local_score("key2", ["key3"]), -2
      )  # cached
  
      expected_function_calls = [
          call("key1", ["key2", "key3"]),
          call("key2", ["key3"]),
      ]
      base_scorer.local_score.assert_has_calls(
          expected_function_calls, any_order=False
      )
  
file_path: pgmpy/pgmpy/tests/test_estimators/test_ScoreCache.py
imports: import unittest
  from mock import Mock, MagicMock, call
  from pgmpy.estimators.ScoreCache import LRUCache, ScoreCache
  from pgmpy.estimators import BicScore
  import pandas
label_desc: Use image node_id 5 for calling the TestScoreCache obj's underlying member method code with example usage: obj.test_score_cache() and returns: unknown, unknown