code: def test_time_cutoff_from_datetime():
      df = pd.DataFrame(
          {
              "date": [
                  datetime(2020, 1, 1, 0, 1, 0),
                  datetime(2000, 1, 1, 0, 0, 0),
                  datetime(1999, 12, 31, 2, 0, 0),
                  None,
              ]
          }
      )
      converter = DateTimeSearchKeyConverter("date")
      dataset = converter.convert(df)
      assert dataset.loc[0, "date"] == 1577836800000
      assert dataset.loc[1, "date"] == 946684800000
      assert dataset.loc[2, "date"] == 946598400000
      assert pd.isnull(dataset.loc[3, "date"])
  
      assert "datetime_time_sin_1" in dataset.columns
      assert dataset.loc[0, "datetime_time_sin_1"] == pytest.approx(
          np.sin(2 * np.pi / 24 / 60), abs=0.000001
      )
      assert dataset.loc[1, "datetime_time_sin_1"] == 0.0
      assert dataset.loc[2, "datetime_time_sin_1"] == pytest.approx(
          np.sin(2 * np.pi / 12), abs=0.000001
      )
      assert pd.isnull(dataset.loc[3, "datetime_time_sin_1"])
  
      assert "datetime_time_cos_1" in dataset.columns
      assert dataset.loc[0, "datetime_time_cos_1"] == pytest.approx(
          np.cos(2 * np.pi / 24 / 60), abs=0.000001
      )
      assert dataset.loc[1, "datetime_time_cos_1"] == 1.0
      assert dataset.loc[2, "datetime_time_cos_1"] == pytest.approx(
          np.cos(2 * np.pi / 12), abs=0.000001
      )
      assert pd.isnull(dataset.loc[3, "datetime_time_cos_1"])
  
      assert "datetime_time_sin_2" in dataset.columns
      assert dataset.loc[0, "datetime_time_sin_2"] == pytest.approx(
          np.sin(2 * np.pi / 12 / 60), abs=0.000001
      )
      assert dataset.loc[1, "datetime_time_sin_2"] == 0.0
      assert dataset.loc[2, "datetime_time_sin_2"] == pytest.approx(
          np.sin(2 * np.pi / 6), abs=0.000001
      )
      assert pd.isnull(dataset.loc[3, "datetime_time_sin_2"])
  
      assert "datetime_time_cos_2" in dataset.columns
      assert dataset.loc[0, "datetime_time_cos_2"] == pytest.approx(
          np.cos(2 * np.pi / 12 / 60), abs=0.000001
      )
      assert dataset.loc[1, "datetime_time_cos_2"] == 1.0
      assert dataset.loc[2, "datetime_time_cos_2"] == pytest.approx(
          np.cos(2 * np.pi / 6), abs=0.000001
      )
      assert pd.isnull(dataset.loc[3, "datetime_time_cos_2"])
  
      assert "datetime_time_sin_24" in dataset.columns
      assert dataset.loc[0, "datetime_time_sin_24"] == pytest.approx(
          np.sin(2 * np.pi / 60), abs=0.000001
      )
      assert dataset.loc[1, "datetime_time_sin_24"] == 0.0
      assert dataset.loc[2, "datetime_time_sin_24"] == 0.0
      assert pd.isnull(dataset.loc[3, "datetime_time_sin_24"])
  
      assert "datetime_time_cos_24" in dataset.columns
      assert dataset.loc[0, "datetime_time_cos_24"] == pytest.approx(
          np.cos(2 * np.pi / 60), abs=0.000001
      )
      assert dataset.loc[1, "datetime_time_cos_24"] == 1.0
      assert dataset.loc[2, "datetime_time_cos_24"] == 1.0
      assert pd.isnull(dataset.loc[3, "datetime_time_cos_24"])
  
      assert "datetime_time_sin_48" in dataset.columns
      assert dataset.loc[0, "datetime_time_sin_48"] == pytest.approx(
          np.sin(2 * np.pi / 30), abs=0.000001
      )
      assert dataset.loc[1, "datetime_time_sin_48"] == 0.0
      assert dataset.loc[2, "datetime_time_sin_48"] == 0.0
      assert pd.isnull(dataset.loc[3, "datetime_time_sin_48"])
  
      assert "datetime_time_cos_48" in dataset.columns
      assert dataset.loc[0, "datetime_time_cos_48"] == pytest.approx(
          np.cos(2 * np.pi / 30), abs=0.000001
      )
      assert dataset.loc[1, "datetime_time_cos_48"] == 1.0
      assert dataset.loc[2, "datetime_time_cos_48"] == 1.0
      assert pd.isnull(dataset.loc[3, "datetime_time_cos_48"])
  
imports: import ipaddress
  import random
  from datetime import date, datetime
  import numpy
  import pandas
  import pytest
  from pandas.testing import assert_frame_equal
  from upgini import Dataset, FileColumnMeaningType
  from upgini.errors import ValidationError
  from upgini.metadata import ModelTaskType, SearchKey
  from upgini.resource_bundle import bundle
  from upgini.utils.datetime_utils import DateTimeSearchKeyConverter
  from upgini.utils.email_utils import EmailSearchKeyConverter
  from upgini.utils.features_validator import FeaturesValidator
  from upgini.utils.warning_counter import WarningCounter
label_desc: Use image node_id 23 for calling a global function with example usage: test_time_cutoff_from_datetime() without return types