Source code for gridstatus.tests.test_utils

import pandas as pd
import time_machine

import gridstatus
from gridstatus.utils import is_dst_end, is_today, is_yesterday


[docs]def test_is_dst_end(): date = pd.Timestamp("Nov 6, 2022", tz=gridstatus.NYISO.default_timezone) assert is_dst_end(date) assert not is_dst_end(date - pd.Timedelta("1 day")) assert not is_dst_end(date + pd.Timedelta("1 day")) # test start dst_start = pd.Timestamp( "Mar 13, 2022", tz=gridstatus.NYISO.default_timezone, ) assert not is_dst_end(dst_start)
[docs]eastern_timezone = "America/New_York"
[docs]central_timezone = "America/Chicago"
[docs]def test_is_today(): # Mock a time where the EST date is different from the UTC date with time_machine.travel("2024-01-01T02:00:00Z", tick=False): utc_start_of_day = pd.Timestamp.utcnow().normalize() assert ( pd.Timestamp.utcnow().date() != pd.Timestamp.now(tz=eastern_timezone).date() ) # Because is_today converts the timestamp into the timezone provided, # this should be true assert is_today(utc_start_of_day, tz=eastern_timezone) # EST offset is 5 hours so this timestamp is tomorrow in EST assert not is_today( utc_start_of_day + pd.Timedelta(hours=5), tz=eastern_timezone, ) # Yesterday in EST assert not is_today( utc_start_of_day - pd.Timedelta(hours=19, seconds=1), tz=eastern_timezone, ) # CST offset is 6 hours so this timestamp is today in CST assert is_today(utc_start_of_day + pd.Timedelta(hours=5), tz=central_timezone) # Yesterday in CST assert not is_today( utc_start_of_day - pd.Timedelta(hours=18, seconds=1), tz=central_timezone, ) # Tomorrow in CST assert not is_today( utc_start_of_day + pd.Timedelta(hours=6), tz=central_timezone, ) # Mock a time where the EST date is the same as the UTC date with time_machine.travel("2024-01-01T12:00:00Z", tick=False): utc_start_of_day = pd.Timestamp.utcnow().normalize() assert ( pd.Timestamp.utcnow().date() == pd.Timestamp.now(tz=eastern_timezone).date() ) # Yesterday in EST assert not is_today(utc_start_of_day, tz=eastern_timezone) assert is_today(utc_start_of_day + pd.Timedelta(hours=5), tz=eastern_timezone) assert is_today(utc_start_of_day + pd.DateOffset(days=1), tz=eastern_timezone) # Tomorrow in EST assert not is_today( utc_start_of_day + pd.DateOffset(days=1) + pd.Timedelta(hours=5), tz=eastern_timezone, ) # Yesterday in CST assert not is_today(utc_start_of_day, tz=central_timezone) assert is_today(utc_start_of_day + pd.Timedelta(hours=6), tz=central_timezone) # Tomorrow in CST assert not is_today( utc_start_of_day + pd.DateOffset(days=1) + pd.Timedelta(hours=6), tz=central_timezone, )
[docs]def test_is_yesterday(): with time_machine.travel("2024-01-01T02:00:00Z", tick=False): start_of_utc_yesterday = pd.Timestamp.utcnow().normalize() - pd.DateOffset( days=1, ) # Because is_yesterday converts the timestamp into the given timezone, # this should be true assert is_yesterday(start_of_utc_yesterday, tz=eastern_timezone) # EST offset is 5 hours so this timestamp is today in EST assert not is_yesterday( start_of_utc_yesterday + pd.Timedelta(hours=5), tz=eastern_timezone, ) assert is_yesterday(start_of_utc_yesterday, tz=central_timezone) assert is_yesterday( start_of_utc_yesterday + pd.Timedelta(hours=5), tz=central_timezone, ) # CST offset is 6 hours so this timestamp is today in CST assert not is_yesterday( start_of_utc_yesterday + pd.Timedelta(hours=6), tz=central_timezone, ) with time_machine.travel("2024-01-01T12:00:00Z", tick=False): start_of_utc_yesterday = pd.Timestamp.utcnow().normalize() - pd.DateOffset( days=1, ) # This is the day before yesterday in EST assert not is_yesterday(start_of_utc_yesterday, tz=eastern_timezone) assert is_yesterday( start_of_utc_yesterday + pd.Timedelta(hours=5), tz=eastern_timezone, ) # This is today in EST assert not is_yesterday( start_of_utc_yesterday + pd.DateOffset(days=1) + pd.Timedelta(hours=6), tz=eastern_timezone, ) # This is the day before yesterday in CST assert not is_yesterday(start_of_utc_yesterday, tz=central_timezone) assert is_yesterday( start_of_utc_yesterday + pd.Timedelta(hours=6), tz=central_timezone, ) # This is today in CST assert not is_yesterday( start_of_utc_yesterday + pd.DateOffset(days=1) + pd.Timedelta(hours=6), tz=central_timezone, )