code: def test_serialization(es):
      value = IdentityFeature(es["log"].ww["value"])
      primitive = Max()
      max1 = AggregationFeature(value, "customers", primitive)
  
      path = next(es.find_backward_paths("customers", "log"))
      dictionary = {
          "name": max1.get_name(),
          "base_features": [value.unique_name()],
          "relationship_path": [r.to_dictionary() for r in path],
          "primitive": primitive,
          "where": None,
          "use_previous": None,
      }
  
      assert dictionary == max1.get_arguments()
      deserialized = AggregationFeature.from_dictionary(
          dictionary,
          es,
          {value.unique_name(): value},
          primitive,
      )
      _assert_agg_feats_equal(max1, deserialized)
  
      is_purchased = IdentityFeature(es["log"].ww["purchased"])
      use_previous = Timedelta(3, "d")
      max2 = AggregationFeature(
          value,
          "customers",
          primitive,
          where=is_purchased,
          use_previous=use_previous,
      )
  
      dictionary = {
          "name": max2.get_name(),
          "base_features": [value.unique_name()],
          "relationship_path": [r.to_dictionary() for r in path],
          "primitive": primitive,
          "where": is_purchased.unique_name(),
          "use_previous": use_previous.get_arguments(),
      }
  
      assert dictionary == max2.get_arguments()
      dependencies = {
          value.unique_name(): value,
          is_purchased.unique_name(): is_purchased,
      }
      deserialized = AggregationFeature.from_dictionary(
          dictionary,
          es,
          dependencies,
          primitive,
      )
      _assert_agg_feats_equal(max2, deserialized)
  
imports: from datetime import datetime
  from inspect import isclass
  from math import isnan
  import numpy
  import pandas
  import pytest
  from woodwork.column_schema import ColumnSchema
  from woodwork.logical_types import Datetime
  from featuretools import AggregationFeature, Feature, IdentityFeature, Timedelta, calculate_feature_matrix, dfs, primitives
  from featuretools.entityset.relationship import RelationshipPath
  from featuretools.feature_base.cache import feature_cache
  from featuretools.primitives import Count, Max, Mean, Median, NMostCommon, NumTrue, NumUnique, Sum, TimeSinceFirst, TimeSinceLast, get_aggregation_primitives
  from featuretools.primitives.base import AggregationPrimitive
  from featuretools.synthesis.deep_feature_synthesis import DeepFeatureSynthesis, match
  from featuretools.tests.testing_utils import backward_path, feature_with_name, to_pandas
  from featuretools.utils.gen_utils import Library
label_desc: Use image node_id 14 for calling a global function with example usage: test_serialization(es) without return types