code: def test_operations_invalidate_metadata(es):
      new_es = EntitySet(id="test")
      # test metadata gets created on access
      assert new_es._data_description is None
      assert new_es.metadata is not None  # generated after access
      assert new_es._data_description is not None
      if not isinstance(es["customers"], pd.DataFrame):
          customers_ltypes = es["customers"].ww.logical_types
          customers_ltypes["signup_date"] = Datetime
      else:
          customers_ltypes = None
      new_es.add_dataframe(
          es["customers"],
          "customers",
          logical_types=customers_ltypes,
      )
      if not isinstance(es["sessions"], pd.DataFrame):
          sessions_ltypes = es["sessions"].ww.logical_types
      else:
          sessions_ltypes = None
      new_es.add_dataframe(
          es["sessions"],
          "sessions",
          logical_types=sessions_ltypes,
      )
  
      assert new_es._data_description is None
      assert new_es.metadata is not None
      assert new_es._data_description is not None
  
      new_es = new_es.add_relationship(
          "customers", "id", "sessions", "customer_id"
      )
      assert new_es._data_description is None
      assert new_es.metadata is not None
      assert new_es._data_description is not None
  
      new_es = new_es.normalize_dataframe(
          "customers", "cohort", "cohort"
      )
      assert new_es._data_description is None
      assert new_es.metadata is not None
      assert new_es._data_description is not None
  
      new_es.add_last_time_indexes()
      assert new_es._data_description is None
      assert new_es.metadata is not None
      assert new_es._data_description is not None
  
      # automatically adding interesting values not supported in Dask or Spark
      if new_es.dataframe_type == Library.PANDAS:
          new_es.add_interesting_values()
          assert new_es._data_description is None
          assert new_es.metadata is not None
          assert new_es._data_description is not None
  
imports: import json
  import logging
  import os
  import tempfile
  from unittest.mock import patch
  from urllib.request import urlretrieve
  import boto3
  import pandas
  import pytest
  import woodwork.type_sys.type_system
  from woodwork.logical_types import Datetime, LogicalType, Ordinal
  from woodwork.serializers.serializer_base import typing_info_to_dict
  from woodwork.type_sys.utils import list_logical_types
  from featuretools.entityset import EntitySet, deserialize, serialize
  from featuretools.tests.testing_utils import to_pandas
  from featuretools.utils.gen_utils import Library
  from featuretools.version import ENTITYSET_SCHEMA_VERSION
label_desc: Use image node_id 31 for calling a global function with example usage: test_operations_invalidate_metadata(es) without return types