code: def test_single_table_dask_entityset_cutoff_time_df():
      primitives_list = [
          "absolute",
          "is_weekend",
          "year",
          "day",
          "num_characters",
          "num_words",
      ]
  
      dask_es = EntitySet(id="dask_es")
      df = pd.DataFrame(
          {
              "id": [0, 1, 2],
              "values": [1, 12, -34],
              "dates": [
                  pd.to_datetime("2019-01-10"),
                  pd.to_datetime("2019-02-03"),
                  pd.to_datetime("2019-01-01"),
              ],
              "strings": ["I am a string", "23", "abcdef ghijk"],
          },
      )
      values_dd = dd.from_pandas(df, npartitions=2)
      ltypes = {
          "values": IntegerNullable,
          "dates": Datetime,
          "strings": NaturalLanguage,
      }
      dask_es.add_dataframe(
          dataframe_name="data",
          dataframe=values_dd,
          index="id",
          time_index="dates",
          logical_types=ltypes,
      )
  
      ids = [0, 1, 2, 0]
      times = [
          pd.Timestamp("2019-01-05 04:00"),
          pd.Timestamp("2019-01-05 04:00"),
          pd.Timestamp("2019-01-05 04:00"),
          pd.Timestamp("2019-01-15 04:00"),
      ]
      labels = [True, False, True, False]
      cutoff_times = pd.DataFrame(
          {"id": ids, "time": times, "labels": labels},
          columns=["id", "time", "labels"],
      )
  
      dask_fm, _ = dfs(
          entityset=dask_es,
          target_dataframe_name="data",
          trans_primitives=primitives_list,
          cutoff_time=cutoff_times,
      )
  
      pd_es = EntitySet(id="pd_es")
      pd_es.add_dataframe(
          dataframe_name="data",
          dataframe=df,
          index="id",
          time_index="dates",
          logical_types=ltypes,
      )
  
      fm, _ = dfs(
          entityset=pd_es,
          target_dataframe_name="data",
          trans_primitives=primitives_list,
          cutoff_time=cutoff_times,
      )
      # Because row ordering with Dask is not guaranteed, we need to sort on two columns to make sure that values
      # for instance id 0 are compared correctly. Also, make sure the index column has the same dtype.
      fm = fm.sort_values(["id", "labels"])
      dask_fm = dask_fm.compute().astype({"id": "int64"})
      dask_fm = dask_fm.set_index("id").sort_values(["id", "labels"])
      pd.testing.assert_frame_equal(fm, dask_fm, check_dtype=False)
  
file_path: featuretools/featuretools/tests/synthesis/test_dask_dfs.py
imports: import pandas
  import pytest
  from woodwork.logical_types import Datetime, Double, Integer, IntegerNullable, NaturalLanguage
  from featuretools import dfs
  from featuretools.entityset import EntitySet
  from featuretools.utils.gen_utils import import_or_none
label_desc: Use image node_id 5 for calling a global function with example usage: test_single_table_dask_entityset_cutoff_time_df() without return types