You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
94 lines
2.4 KiB
94 lines
2.4 KiB
6 months ago
|
"""
|
||
|
Hypothesis data generator helpers.
|
||
|
"""
|
||
|
from datetime import datetime
|
||
|
|
||
|
from hypothesis import strategies as st
|
||
|
from hypothesis.extra.dateutil import timezones as dateutil_timezones
|
||
|
from hypothesis.extra.pytz import timezones as pytz_timezones
|
||
|
|
||
|
from pandas.compat import is_platform_windows
|
||
|
|
||
|
import pandas as pd
|
||
|
|
||
|
from pandas.tseries.offsets import (
|
||
|
BMonthBegin,
|
||
|
BMonthEnd,
|
||
|
BQuarterBegin,
|
||
|
BQuarterEnd,
|
||
|
BYearBegin,
|
||
|
BYearEnd,
|
||
|
MonthBegin,
|
||
|
MonthEnd,
|
||
|
QuarterBegin,
|
||
|
QuarterEnd,
|
||
|
YearBegin,
|
||
|
YearEnd,
|
||
|
)
|
||
|
|
||
|
OPTIONAL_INTS = st.lists(st.one_of(st.integers(), st.none()), max_size=10, min_size=3)
|
||
|
|
||
|
OPTIONAL_FLOATS = st.lists(st.one_of(st.floats(), st.none()), max_size=10, min_size=3)
|
||
|
|
||
|
OPTIONAL_TEXT = st.lists(st.one_of(st.none(), st.text()), max_size=10, min_size=3)
|
||
|
|
||
|
OPTIONAL_DICTS = st.lists(
|
||
|
st.one_of(st.none(), st.dictionaries(st.text(), st.integers())),
|
||
|
max_size=10,
|
||
|
min_size=3,
|
||
|
)
|
||
|
|
||
|
OPTIONAL_LISTS = st.lists(
|
||
|
st.one_of(st.none(), st.lists(st.text(), max_size=10, min_size=3)),
|
||
|
max_size=10,
|
||
|
min_size=3,
|
||
|
)
|
||
|
|
||
|
OPTIONAL_ONE_OF_ALL = st.one_of(
|
||
|
OPTIONAL_DICTS, OPTIONAL_FLOATS, OPTIONAL_INTS, OPTIONAL_LISTS, OPTIONAL_TEXT
|
||
|
)
|
||
|
|
||
|
if is_platform_windows():
|
||
|
DATETIME_NO_TZ = st.datetimes(min_value=datetime(1900, 1, 1))
|
||
|
else:
|
||
|
DATETIME_NO_TZ = st.datetimes()
|
||
|
|
||
|
DATETIME_JAN_1_1900_OPTIONAL_TZ = st.datetimes(
|
||
|
min_value=pd.Timestamp(
|
||
|
1900, 1, 1
|
||
|
).to_pydatetime(), # pyright: ignore[reportGeneralTypeIssues]
|
||
|
max_value=pd.Timestamp(
|
||
|
1900, 1, 1
|
||
|
).to_pydatetime(), # pyright: ignore[reportGeneralTypeIssues]
|
||
|
timezones=st.one_of(st.none(), dateutil_timezones(), pytz_timezones()),
|
||
|
)
|
||
|
|
||
|
DATETIME_IN_PD_TIMESTAMP_RANGE_NO_TZ = st.datetimes(
|
||
|
min_value=pd.Timestamp.min.to_pydatetime(warn=False),
|
||
|
max_value=pd.Timestamp.max.to_pydatetime(warn=False),
|
||
|
)
|
||
|
|
||
|
INT_NEG_999_TO_POS_999 = st.integers(-999, 999)
|
||
|
|
||
|
# The strategy for each type is registered in conftest.py, as they don't carry
|
||
|
# enough runtime information (e.g. type hints) to infer how to build them.
|
||
|
YQM_OFFSET = st.one_of(
|
||
|
*map(
|
||
|
st.from_type,
|
||
|
[
|
||
|
MonthBegin,
|
||
|
MonthEnd,
|
||
|
BMonthBegin,
|
||
|
BMonthEnd,
|
||
|
QuarterBegin,
|
||
|
QuarterEnd,
|
||
|
BQuarterBegin,
|
||
|
BQuarterEnd,
|
||
|
YearBegin,
|
||
|
YearEnd,
|
||
|
BYearBegin,
|
||
|
BYearEnd,
|
||
|
],
|
||
|
)
|
||
|
)
|