def cftime_start_time(date, freq): """Get the cftime.datetime for the start of a period. As we are not supplying actual period objects, assumptions regarding the period are made based on the given freq. IMPORTANT NOTE: this function cannot be used on greater-than-day freq that start at the beginning of a month, e.g. 'MS', 'QS', 'AS' -- this mirrors pandas behavior. Parameters ---------- date : cftime.datetime The original datetime object as a proxy representation for period. freq : str String specifying the frequency/offset such as 'MS', '2D', 'H', or '3T' Returns ------- cftime.datetime The starting datetime of the period inferred from date and freq. """ freq = to_offset(freq) if isinstance(freq, (YearBegin, QuarterBegin, MonthBegin)): raise ValueError("Invalid frequency: " + freq.rule_code()) if isinstance(freq, YearEnd): month = freq.month return date - YearEnd(n=1, month=month) + pydt.timedelta(days=1) if isinstance(freq, QuarterEnd): month = freq.month return date - QuarterEnd(n=1, month=month) + pydt.timedelta(days=1) if isinstance(freq, MonthEnd): return date - MonthEnd(n=1) + pydt.timedelta(days=1) return date
return str(param) @pytest.fixture(params=_CFTIME_CALENDARS) def calendar(request): return request.param @pytest.mark.parametrize( ("offset", "expected_n"), [ (BaseCFTimeOffset(), 1), (YearBegin(), 1), (YearEnd(), 1), (QuarterBegin(), 1), (QuarterEnd(), 1), (BaseCFTimeOffset(n=2), 2), (YearBegin(n=2), 2), (YearEnd(n=2), 2), (QuarterBegin(n=2), 2), (QuarterEnd(n=2), 2), ], ids=_id_func, ) def test_cftime_offset_constructor_valid_n(offset, expected_n): assert offset.n == expected_n @pytest.mark.parametrize( ("offset", "invalid_n"), [
"""Called on each parameter passed to pytest.mark.parametrize""" return str(param) @pytest.fixture(params=_CFTIME_CALENDARS) def calendar(request): return request.param @pytest.mark.parametrize( ('offset', 'expected_n'), [(BaseCFTimeOffset(), 1), (YearBegin(), 1), (YearEnd(), 1), (QuarterBegin(), 1), (QuarterEnd(), 1), (BaseCFTimeOffset(n=2), 2), (YearBegin(n=2), 2), (YearEnd(n=2), 2), (QuarterBegin(n=2), 2), (QuarterEnd(n=2), 2)], ids=_id_func ) def test_cftime_offset_constructor_valid_n(offset, expected_n): assert offset.n == expected_n @pytest.mark.parametrize( ('offset', 'invalid_n'), [(BaseCFTimeOffset, 1.5), (YearBegin, 1.5),