code: def test_to_dictionary_direct(es):
      actual = Feature(
          IdentityFeature(es["sessions"].ww["customer_id"]),
          "log",
      ).to_dictionary()
  
      expected = {
          "type": "DirectFeature",
          "dependencies": ["sessions: customer_id"],
          "arguments": {
              "name": "sessions.customer_id",
              "base_feature": "sessions: customer_id",
              "relationship": {
                  "parent_dataframe_name": "sessions",
                  "child_dataframe_name": "log",
                  "parent_column_name": "id",
                  "child_column_name": "session_id",
              },
          },
      }
  
      assert expected == actual
  
imports: import os.path
  import re
  import pytest
  from pympler.asizeof import asizeof
  from woodwork.column_schema import ColumnSchema
  from woodwork.logical_types import Datetime, Integer
  from featuretools import Feature, config, feature_base
  from featuretools.feature_base import IdentityFeature
  from featuretools.primitives import Count, Diff, Last, Mode, Negate, NMostCommon, NumUnique, Sum, TransformPrimitive
  from featuretools.synthesis.deep_feature_synthesis import can_stack_primitive_on_inputs
  from featuretools.tests.testing_utils import check_rename
label_desc: Use image node_id 12 for calling a global function with example usage: test_to_dictionary_direct(es) without return types