code: def test_nested_module_parent_unloaded(self, fob):
      lso = local_sources_watcher.LocalSourcesWatcher(SCRIPT_PATH)
      lso.register_file_change_callback(NOOP_CALLBACK)
  
      fob.assert_called_once()
  
      with patch(
          "sys.modules",
          {
              "DUMMY_MODULE_1": DUMMY_MODULE_1,
              "NESTED_MODULE_PARENT": NESTED_MODULE_PARENT,
              "NESTED_MODULE_CHILD": NESTED_MODULE_CHILD,
          },
      ):
          lso.update_watched_modules()
  
          # Simulate a change to the child module
          lso.on_file_changed(NESTED_MODULE_CHILD_FILE)
  
          # Assert that both the parent and child are unloaded, ready for reload
          self.assertNotIn("NESTED_MODULE_CHILD", sys.modules)
          self.assertNotIn("NESTED_MODULE_PARENT", sys.modules)
  
imports: import os
  import sys
  import unittest
  from unittest.mock import MagicMock, patch
  import tests.streamlit.watcher.test_data.dummy_module1
  import tests.streamlit.watcher.test_data.dummy_module2
  import tests.streamlit.watcher.test_data.misbehaved_module
  import tests.streamlit.watcher.test_data.nested_module_child
  import tests.streamlit.watcher.test_data.nested_module_parent
  from streamlit import config
  from streamlit.watcher import local_sources_watcher
  from streamlit.watcher.path_watcher import NoOpPathWatcher, watchdog_available
label_desc: Use image node_id 7 for calling the LocalSourcesWatcherTest obj's underlying member method code with example usage: obj.test_nested_module_parent_unloaded(fob) without return types