code: def test_feature_hash():
      bf1 = LiteFeature("bf", Double)
      bf2 = LiteFeature("bf", Double, df_id="df")
  
      p1 = Lag(periods=1)
      p2 = Lag(periods=2)
      f1 = LiteFeature(
          primitive=p1,
          logical_type=Double,
          base_features=[bf1],
      )
  
      f2 = LiteFeature(
          primitive=p2,
          logical_type=Double,
          base_features=[bf1],
      )
  
      f3 = LiteFeature(
          primitive=p2,
          logical_type=Double,
          base_features=[bf1],
      )
  
      f4 = LiteFeature(
          primitive=p1,
          logical_type=Double,
          base_features=[bf2],
      )
  
      # TODO(dreed): ensure ID is parquet and arrow acceptable, length and starting character might be problematic
  
      assert f1 != f2
      assert f2 == f3
      assert f1 != f4
  
imports: import json
  from unittest.mock import patch
  import pytest
  from woodwork.logical_types import Boolean, Double
  from featuretools.feature_discovery.feature_discovery import generate_features_from_primitives, schema_to_features
  from featuretools.feature_discovery.FeatureCollection import FeatureCollection
  from featuretools.feature_discovery.LiteFeature import LiteFeature
  from featuretools.primitives import Absolute, AddNumeric, DivideNumeric, Lag, MultiplyNumeric
  from featuretools.tests.feature_discovery.test_feature_discovery import MultiOutputPrimitiveForTest
  from featuretools.tests.testing_utils.generate_fake_dataframe import generate_fake_dataframe
label_desc: Use image node_id 4 for calling a global function with example usage: test_feature_hash() without return types