mirror of
https://github.com/wassname/catalyst.git
synced 2026-07-12 21:31:09 +08:00
e8185a1512
BUG: correctly create asset finder MAINT: rename fixture STY: fixes for flake8 STY: add space around assignment MAINT: add var back to constructor MAINT: remove unused import MAINT: compare var with None directly MAINT: fix merge errors
236 lines
7.6 KiB
Python
236 lines
7.6 KiB
Python
"""
|
|
Tests for the reference loader for Buyback Authorizations.
|
|
"""
|
|
import blaze as bz
|
|
from blaze.compute.core import swap_resources_into_scope
|
|
import pandas as pd
|
|
from six import iteritems
|
|
|
|
from zipline.pipeline.common import(
|
|
BUYBACK_ANNOUNCEMENT_FIELD_NAME,
|
|
CASH_FIELD_NAME,
|
|
DAYS_SINCE_PREV,
|
|
PREVIOUS_BUYBACK_ANNOUNCEMENT,
|
|
PREVIOUS_BUYBACK_CASH,
|
|
PREVIOUS_BUYBACK_SHARE_COUNT,
|
|
SHARE_COUNT_FIELD_NAME,
|
|
SID_FIELD_NAME,
|
|
TS_FIELD_NAME
|
|
)
|
|
from zipline.pipeline.data import (
|
|
CashBuybackAuthorizations,
|
|
ShareBuybackAuthorizations
|
|
)
|
|
from zipline.pipeline.factors.events import (
|
|
BusinessDaysSinceCashBuybackAuth,
|
|
BusinessDaysSinceShareBuybackAuth
|
|
)
|
|
from zipline.pipeline.loaders.buyback_auth import (
|
|
CashBuybackAuthorizationsLoader,
|
|
ShareBuybackAuthorizationsLoader
|
|
)
|
|
from zipline.pipeline.loaders.blaze import (
|
|
BlazeCashBuybackAuthorizationsLoader,
|
|
BlazeShareBuybackAuthorizationsLoader,
|
|
)
|
|
from zipline.pipeline.loaders.utils import (
|
|
get_values_for_date_ranges,
|
|
zip_with_floats,
|
|
zip_with_dates
|
|
)
|
|
from zipline.testing.fixtures import (
|
|
WithPipelineEventDataLoader, ZiplineTestCase
|
|
)
|
|
|
|
date_intervals = [[None, '2014-01-04'], ['2014-01-05', '2014-01-09'],
|
|
['2014-01-10', None]]
|
|
|
|
buyback_authorizations_cases = [
|
|
pd.DataFrame({
|
|
SHARE_COUNT_FIELD_NAME: [1, 15],
|
|
CASH_FIELD_NAME: [10, 20],
|
|
TS_FIELD_NAME: pd.to_datetime(['2014-01-05', '2014-01-10']),
|
|
BUYBACK_ANNOUNCEMENT_FIELD_NAME: pd.to_datetime(['2014-01-04',
|
|
'2014-01-09'])
|
|
}),
|
|
pd.DataFrame(
|
|
columns=[SHARE_COUNT_FIELD_NAME,
|
|
CASH_FIELD_NAME,
|
|
BUYBACK_ANNOUNCEMENT_FIELD_NAME,
|
|
TS_FIELD_NAME],
|
|
dtype='datetime64[ns]'
|
|
),
|
|
]
|
|
|
|
|
|
def get_expected_previous_values(zip_date_index_with_vals,
|
|
dates,
|
|
vals_for_date_intervals):
|
|
return pd.DataFrame({
|
|
0: get_values_for_date_ranges(zip_date_index_with_vals,
|
|
vals_for_date_intervals,
|
|
date_intervals,
|
|
dates),
|
|
1: zip_date_index_with_vals(dates, ['NaN'] * len(dates)),
|
|
}, index=dates)
|
|
|
|
|
|
class CashBuybackAuthLoaderTestCase(WithPipelineEventDataLoader,
|
|
ZiplineTestCase):
|
|
"""
|
|
Test for cash buyback authorizations dataset.
|
|
"""
|
|
pipeline_columns = {
|
|
PREVIOUS_BUYBACK_CASH:
|
|
CashBuybackAuthorizations.cash_amount.latest,
|
|
PREVIOUS_BUYBACK_ANNOUNCEMENT:
|
|
CashBuybackAuthorizations.announcement_date.latest,
|
|
DAYS_SINCE_PREV:
|
|
BusinessDaysSinceCashBuybackAuth(),
|
|
}
|
|
|
|
@classmethod
|
|
def get_sids(cls):
|
|
return range(2)
|
|
|
|
@classmethod
|
|
def get_dataset(cls):
|
|
return {sid:
|
|
frame.drop(SHARE_COUNT_FIELD_NAME, axis=1)
|
|
for sid, frame
|
|
in enumerate(buyback_authorizations_cases)}
|
|
|
|
loader_type = CashBuybackAuthorizationsLoader
|
|
|
|
def setup(self, dates):
|
|
cols = {}
|
|
_expected_previous_cash = get_expected_previous_values(
|
|
zip_with_floats, dates,
|
|
['NaN', 10, 20]
|
|
)
|
|
cols[
|
|
PREVIOUS_BUYBACK_ANNOUNCEMENT
|
|
] = get_expected_previous_values(zip_with_dates, dates,
|
|
['NaT', '2014-01-04', '2014-01-09'])
|
|
cols[PREVIOUS_BUYBACK_CASH] = _expected_previous_cash
|
|
cols[DAYS_SINCE_PREV] = self._compute_busday_offsets(
|
|
cols[PREVIOUS_BUYBACK_ANNOUNCEMENT]
|
|
)
|
|
return cols
|
|
|
|
|
|
class ShareBuybackAuthLoaderTestCase(WithPipelineEventDataLoader,
|
|
ZiplineTestCase):
|
|
"""
|
|
Test for share buyback authorizations dataset.
|
|
"""
|
|
pipeline_columns = {
|
|
PREVIOUS_BUYBACK_SHARE_COUNT:
|
|
ShareBuybackAuthorizations.share_count.latest,
|
|
PREVIOUS_BUYBACK_ANNOUNCEMENT:
|
|
ShareBuybackAuthorizations.announcement_date.latest,
|
|
DAYS_SINCE_PREV:
|
|
BusinessDaysSinceShareBuybackAuth(),
|
|
}
|
|
|
|
@classmethod
|
|
def get_sids(cls):
|
|
return range(2)
|
|
|
|
@classmethod
|
|
def get_dataset(cls):
|
|
return {sid:
|
|
frame.drop(CASH_FIELD_NAME, axis=1)
|
|
for sid, frame
|
|
in enumerate(buyback_authorizations_cases)}
|
|
|
|
loader_type = ShareBuybackAuthorizationsLoader
|
|
|
|
def setup(self, dates):
|
|
cols = {}
|
|
cols[
|
|
PREVIOUS_BUYBACK_SHARE_COUNT
|
|
] = get_expected_previous_values(zip_with_floats,
|
|
dates,
|
|
['NaN', 1, 15])
|
|
cols[
|
|
PREVIOUS_BUYBACK_ANNOUNCEMENT
|
|
] = get_expected_previous_values(zip_with_dates, dates,
|
|
['NaT', '2014-01-04', '2014-01-09'])
|
|
cols[DAYS_SINCE_PREV] = self._compute_busday_offsets(
|
|
cols[PREVIOUS_BUYBACK_ANNOUNCEMENT]
|
|
)
|
|
return cols
|
|
|
|
|
|
class BlazeCashBuybackAuthLoaderTestCase(CashBuybackAuthLoaderTestCase):
|
|
""" Test case for loading via blaze.
|
|
"""
|
|
loader_type = BlazeCashBuybackAuthorizationsLoader
|
|
|
|
def pipeline_event_loader_args(self, dates):
|
|
_, mapping = super(
|
|
BlazeCashBuybackAuthLoaderTestCase,
|
|
self,
|
|
).pipeline_event_loader_args(dates)
|
|
return (bz.data(pd.concat(
|
|
pd.DataFrame({
|
|
BUYBACK_ANNOUNCEMENT_FIELD_NAME:
|
|
frame[BUYBACK_ANNOUNCEMENT_FIELD_NAME],
|
|
CASH_FIELD_NAME:
|
|
frame[CASH_FIELD_NAME],
|
|
TS_FIELD_NAME:
|
|
frame[TS_FIELD_NAME],
|
|
SID_FIELD_NAME: sid,
|
|
})
|
|
for sid, frame in iteritems(mapping)
|
|
).reset_index(drop=True)),)
|
|
|
|
|
|
class BlazeShareBuybackAuthLoaderTestCase(ShareBuybackAuthLoaderTestCase):
|
|
""" Test case for loading via blaze.
|
|
"""
|
|
loader_type = BlazeShareBuybackAuthorizationsLoader
|
|
|
|
def pipeline_event_loader_args(self, dates):
|
|
_, mapping = super(
|
|
BlazeShareBuybackAuthLoaderTestCase,
|
|
self,
|
|
).pipeline_event_loader_args(dates)
|
|
return (bz.data(pd.concat(
|
|
pd.DataFrame({
|
|
BUYBACK_ANNOUNCEMENT_FIELD_NAME:
|
|
frame[BUYBACK_ANNOUNCEMENT_FIELD_NAME],
|
|
SHARE_COUNT_FIELD_NAME:
|
|
frame[SHARE_COUNT_FIELD_NAME],
|
|
TS_FIELD_NAME:
|
|
frame[TS_FIELD_NAME],
|
|
SID_FIELD_NAME: sid,
|
|
})
|
|
for sid, frame in iteritems(mapping)
|
|
).reset_index(drop=True)),)
|
|
|
|
|
|
class BlazeShareBuybackAuthLoaderNotInteractiveTestCase(
|
|
BlazeShareBuybackAuthLoaderTestCase):
|
|
"""Test case for passing a non-interactive symbol and a dict of resources.
|
|
"""
|
|
def pipeline_event_loader_args(self, dates):
|
|
(bound_expr,) = super(
|
|
BlazeShareBuybackAuthLoaderNotInteractiveTestCase,
|
|
self,
|
|
).pipeline_event_loader_args(dates)
|
|
return swap_resources_into_scope(bound_expr, {})
|
|
|
|
|
|
class BlazeCashBuybackAuthLoaderNotInteractiveTestCase(
|
|
BlazeCashBuybackAuthLoaderTestCase):
|
|
"""Test case for passing a non-interactive symbol and a dict of resources.
|
|
"""
|
|
def pipeline_event_loader_args(self, dates):
|
|
(bound_expr,) = super(
|
|
BlazeCashBuybackAuthLoaderNotInteractiveTestCase,
|
|
self,
|
|
).pipeline_event_loader_args(dates)
|
|
return swap_resources_into_scope(bound_expr, {})
|