code: def test_with_custom_ww_logical_type():
      class CustomLogicalType(LogicalType):
          pass
  
      ww_type_system.add_type(CustomLogicalType)
      columns = ["integer", "natural_language", "custom_logical_type"]
      dataframe = pd.DataFrame(columns=columns)
      es = EntitySet()
      ltype_dict = {
          "integer": "integer",
          "natural_language": "natural_language",
          "custom_logical_type": CustomLogicalType,
      }
      es.add_dataframe(
          dataframe=dataframe,
          dataframe_name="custom_type",
          index="integer",
          logical_types=ltype_dict,
      )
      description = serialize.entityset_to_description(es)
      _es = deserialize.description_to_entityset(description)
      assert isinstance(
          _es["custom_type"].ww.logical_types["custom_logical_type"],
          CustomLogicalType,
      )
      assert es.__eq__(_es, deep=True)
  
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 3 for calling a global function with example usage: test_with_custom_ww_logical_type() without return types