MAINT: Rename ALL the things.

zipline.modelling.* -> zipline.pipeline.*
zipline.data.ffc.loaders -> zipline.pipeline.loaders
tests/modelling -> tests/pipeline
This commit is contained in:
Scott Sanderson
2015-09-30 20:15:41 -04:00
parent 1d1092152c
commit f82a01841b
46 changed files with 130 additions and 422 deletions
+3 -3
View File
@@ -34,13 +34,13 @@ bottleneck==1.0.0
contextlib2==0.4.0
# Graph algorithms used by zipline.modelling
# Graph algorithms used by zipline.pipeline
networkx==1.9.1
# NumericalExpression modelling terms.
# NumericalExpression pipeline terms.
numexpr==2.4.3
# On disk storage format for modelling data.
# On disk storage format for pipeline data.
bcolz==0.10.0
# Command line interface helper
+4 -4
View File
@@ -64,12 +64,12 @@ ext_modules = LazyCythonizingList([
('zipline.lib.adjustment', ['zipline/lib/adjustment.pyx']),
('zipline.lib.rank', ['zipline/lib/rank.pyx']),
(
'zipline.data.ffc.loaders._equities',
['zipline/data/ffc/loaders/_equities.pyx'],
'zipline.pipeline.loaders._equities',
['zipline/pipeline/loaders/_equities.pyx'],
),
(
'zipline.data.ffc.loaders._adjustments',
['zipline/data/ffc/loaders/_adjustments.pyx'],
'zipline.pipeline.loaders._adjustments',
['zipline/pipeline/loaders/_adjustments.pyx'],
),
])
@@ -9,8 +9,8 @@ from pandas import date_range, Int64Index, DataFrame
from six import iteritems
from zipline.finance.trading import TradingEnvironment
from zipline.modelling.engine import SimpleFFCEngine
from zipline.modelling.term import AssetExists
from zipline.pipeline.engine import SimpleFFCEngine
from zipline.pipeline.term import AssetExists
from zipline.utils.pandas_utils import explode
from zipline.utils.test_utils import make_simple_asset_info, ExplodingObject
from zipline.utils.tradingcalendar import trading_day
@@ -24,29 +24,26 @@ from pandas import (
from pandas.util.testing import assert_frame_equal
from testfixtures import TempDirectory
from zipline.data.equities import USEquityPricing
from zipline.data.ffc.synthetic import (
from zipline.pipeline.loaders.synthetic import (
ConstantLoader,
MultiColumnLoader,
NullAdjustmentReader,
SyntheticDailyBarWriter,
)
from zipline.data.ffc.frame import (
DataFrameFFCLoader,
MULTIPLY,
)
from zipline.data.ffc.loaders.us_equity_pricing import (
from zipline.finance.trading import TradingEnvironment
from zipline.pipeline import Pipeline
from zipline.pipeline.data import USEquityPricing
from zipline.pipeline.loaders.frame import DataFrameFFCLoader, MULTIPLY
from zipline.pipeline.loaders.equity_pricing_loader import (
BcolzDailyBarReader,
USEquityPricingLoader,
)
from zipline.finance.trading import TradingEnvironment
from zipline.modelling.engine import SimpleFFCEngine
from zipline.modelling.factor import CustomFactor
from zipline.modelling.factor.technical import (
from zipline.pipeline.engine import SimpleFFCEngine
from zipline.pipeline.factor import CustomFactor
from zipline.pipeline.factor.technical import (
MaxDrawdown,
SimpleMovingAverage,
)
from zipline.modelling.pipeline import Pipeline
from zipline.utils.memoize import lazyval
from zipline.utils.test_utils import (
make_rotating_asset_info,
@@ -3,9 +3,7 @@ Tests for Factor terms.
"""
from numpy import array, eye, nan, ones
from zipline.errors import UnknownRankMethod
from zipline.modelling.factor import Factor
from zipline.modelling.filter import Filter
from zipline.modelling.graph import TermGraph
from zipline.pipeline import Factor, Filter, TermGraph
from zipline.utils.test_utils import check_arrays
from .base import BaseFFCTestCase
@@ -20,9 +20,7 @@ from numpy import (
from numpy.random import randn, seed as random_seed
from zipline.errors import BadPercentileBounds
from zipline.modelling.filter import Filter
from zipline.modelling.factor import Factor
from zipline.modelling.graph import TermGraph
from zipline.pipeline import Filter, Factor, TermGraph
from zipline.utils.test_utils import check_arrays
from .base import BaseFFCTestCase, with_default_shape
@@ -1,5 +1,5 @@
"""
Tests for zipline.data.ffc.frame.DataFrameFFCLoader
Tests for zipline.pipeline.loaders.frame.DataFrameFFCLoader.
"""
from unittest import TestCase
@@ -17,8 +17,8 @@ from zipline.lib.adjustment import (
Float64Multiply,
Float64Overwrite,
)
from zipline.data.equities import USEquityPricing
from zipline.data.ffc.frame import (
from zipline.pipeline.data import USEquityPricing
from zipline.pipeline.loaders.frame import (
ADD,
DataFrameFFCLoader,
MULTIPLY,
@@ -205,7 +205,7 @@ class DataFrameFFCLoaderTestCase(TestCase):
self.assertEqual(formatted_adjustments, expected_formatted_adjustments)
mask = self.mask[dates_slice, sids_slice]
with patch('zipline.data.ffc.frame.adjusted_array') as m:
with patch('zipline.pipeline.loaders.frame.adjusted_array') as m:
loader.load_adjusted_array(
columns=[USEquityPricing.close],
dates=self.dates[dates_slice],
@@ -24,11 +24,12 @@ from pandas import (
Int64Index,
)
from zipline.modelling.expression import (
from zipline.pipeline import Factor
from zipline.pipeline.expression import (
NumericalExpression,
NUMEXPR_MATH_FUNCS,
)
from zipline.modelling.factor import Factor
from zipline.utils.test_utils import check_arrays
@@ -1,12 +1,10 @@
"""
Tests for zipline.modelling.pipeline.Pipeline
Tests for zipline.pipeline.Pipeline
"""
from unittest import TestCase
from zipline.data.equities import USEquityPricing
from zipline.modelling.pipeline import Pipeline
from zipline.modelling.factor import Factor
from zipline.modelling.filter import Filter
from zipline.pipeline import Factor, Filter, Pipeline
from zipline.pipeline.data import USEquityPricing
class SomeFactor(Factor):
@@ -35,24 +35,23 @@ from zipline.api import (
drain_pipeline,
get_datetime,
)
from zipline.data.equities import USEquityPricing
from zipline.data.ffc.frame import DataFrameFFCLoader, MULTIPLY
from zipline.data.ffc.loaders.us_equity_pricing import (
BcolzDailyBarReader,
DailyBarWriterFromCSVs,
SQLiteAdjustmentReader,
SQLiteAdjustmentWriter,
USEquityPricingLoader,
)
from zipline.errors import (
AttachPipelineAfterInitialize,
DrainPipelineDuringInitialize,
NoSuchPipeline,
)
from zipline.finance import trading
from zipline.modelling.factor.technical import VWAP
from zipline.modelling.pipeline import Pipeline
from zipline.pipeline import Pipeline
from zipline.pipeline.factor.technical import VWAP
from zipline.pipeline.data import USEquityPricing
from zipline.pipeline.loaders.frame import DataFrameFFCLoader, MULTIPLY
from zipline.pipeline.loaders.equity_pricing_loader import (
BcolzDailyBarReader,
DailyBarWriterFromCSVs,
SQLiteAdjustmentReader,
SQLiteAdjustmentWriter,
USEquityPricingLoader,
)
from zipline.utils.test_utils import (
make_simple_asset_info,
str_to_seconds,
@@ -66,7 +65,7 @@ from zipline.utils.tradingcalendar import (
TEST_RESOURCE_PATH = join(
dirname(dirname(realpath(__file__))), # zipline_repo/tests
'resources',
'modelling_inputs',
'pipeline_inputs',
)
@@ -10,19 +10,15 @@ from numpy import (
uint8,
)
from zipline.data.dataset import (
Column,
DataSet,
)
from zipline.errors import (
InputTermNotAtomic,
TermInputsNotSpecified,
WindowLengthNotSpecified,
)
from zipline.modelling.expression import NUMEXPR_MATH_FUNCS
from zipline.modelling.factor import Factor
from zipline.modelling.graph import TermGraph
from zipline.modelling.term import AssetExists, NotSpecified
from zipline.pipeline import Factor, TermGraph
from zipline.pipeline.data import Column, DataSet
from zipline.pipeline.term import AssetExists, NotSpecified
from zipline.pipeline.expression import NUMEXPR_MATH_FUNCS
class SomeDataSet(DataSet):
@@ -13,7 +13,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
"""
Tests for zipline.data.ffc.loaders.us_equity_pricing
Tests for USEquityPricingLoader and related classes.
"""
from unittest import TestCase
@@ -40,12 +40,11 @@ from pandas.util.testing import assert_index_equal
from testfixtures import TempDirectory
from zipline.lib.adjustment import Float64Multiply
from zipline.data.equities import USEquityPricing
from zipline.data.ffc.synthetic import (
from zipline.pipeline.loaders.synthetic import (
NullAdjustmentReader,
SyntheticDailyBarWriter,
)
from zipline.data.ffc.loaders.us_equity_pricing import (
from zipline.pipeline.loaders.equity_pricing_loader import (
BcolzDailyBarReader,
SQLiteAdjustmentReader,
SQLiteAdjustmentWriter,
@@ -53,6 +52,7 @@ from zipline.data.ffc.loaders.us_equity_pricing import (
)
from zipline.errors import WindowLengthTooLong
from zipline.finance.trading import TradingEnvironment
from zipline.pipeline.data import USEquityPricing
from zipline.utils.test_utils import (
seconds_to_timestamp,
str_to_seconds,
+1 -1
View File
@@ -4,7 +4,7 @@ import doctest
from unittest import TestCase
from zipline.lib import adjustment
from zipline.modelling import (
from zipline.pipeline import (
engine,
expression,
)
+5 -5
View File
@@ -74,7 +74,7 @@ from zipline.assets import Asset, Future
from zipline.assets.futures import FutureChain
from zipline.gens.composites import date_sorted_sources
from zipline.gens.tradesimulation import AlgorithmSimulator
from zipline.modelling.engine import (
from zipline.pipeline.engine import (
NoOpFFCEngine,
SimpleFFCEngine,
)
@@ -229,7 +229,7 @@ class TradingAlgorithm(object):
# Pull in the environment's new AssetFinder for quick reference
self.asset_finder = self.trading_environment.asset_finder
# Initialize Modeling API data.
# Initialize Pipeline API data.
self.init_engine(kwargs.pop('ffc_loader', None))
self._pipelines = []
# Create an always-expired cache so that we compute the first time data
@@ -1333,7 +1333,7 @@ class TradingAlgorithm(object):
self.register_trading_control(LongOnly())
##############
# Modeling API
# Pipeline API
##############
@api_method
@require_not_initialized(AttachPipelineAfterInitialize())
@@ -1369,7 +1369,7 @@ class TradingAlgorithm(object):
See Also
--------
:meth:`zipline.modelling.FFCEngine.run_pipeline`
:meth:`zipline.pipeline.engine.FFCEngine.run_pipeline`
"""
# NOTE: We don't currently support multiple pipelines, but we plan to
# in the future.
@@ -1441,7 +1441,7 @@ class TradingAlgorithm(object):
self.engine.run_pipeline(pipeline, start_date, end_date), end_date
##################
# End Modeling API
# End Pipeline API
##################
def current_universe(self):
+1 -1
View File
@@ -627,7 +627,7 @@ class AssetFinder(object):
See Also
--------
numpy.putmask
zipline.modelling.engine.SimpleFFCEngine._compute_root_mask
zipline.pipeline.engine.SimpleFFCEngine._compute_root_mask
"""
# This is a less than ideal place to do this, because if someone adds
# assets to the finder after we've touched lifetimes we won't have
@@ -1,276 +0,0 @@
#
# Copyright 2015 Quantopian, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from cpython cimport (
PyDict_Contains,
PySet_Add,
)
from numpy import (
uint32,
zeros,
)
from pandas import Timestamp
ctypedef object Timestamp_t
ctypedef object DatetimeIndex_t
ctypedef object Int64Index_t
from zipline.lib.adjustment import Float64Multiply
_SID_QUERY_TEMPLATE = """
SELECT DISTINCT sid FROM {0}
WHERE effective_date >= ? AND effective_date <= ?
"""
cdef dict SID_QUERIES = {
tablename: _SID_QUERY_TEMPLATE.format(tablename)
for tablename in ('splits', 'dividends', 'mergers')
}
ADJ_QUERY_TEMPLATE = """
SELECT sid, ratio, effective_date
FROM {0}
WHERE sid IN ({1}) AND effective_date >= {2} AND effective_date <= {3}
"""
cdef int SQLITE_MAX_IN_STATEMENT = 999
EPOCH = Timestamp(0, tz='UTC')
cdef set _get_sids_from_table(object db,
str tablename,
int start_date,
int end_date):
"""
Get the unique sids for all adjustments between start_date and end_date
from table `tablename`.
Parameters
----------
db : sqlite3.connection
tablename : str
start_date : int (seconds since epoch)
end_date : int (seconds since epoch)
Returns
-------
sids : set
Set of sets
"""
cdef object cursor = db.execute(
SID_QUERIES[tablename],
(start_date, end_date),
)
cdef set out = set()
cdef tuple result
for result in cursor.fetchall():
PySet_Add(out, result[0])
return out
cdef set _get_split_sids(object db, int start_date, int end_date):
return _get_sids_from_table(db, 'splits', start_date, end_date)
cdef set _get_merger_sids(object db, int start_date, int end_date):
return _get_sids_from_table(db, 'mergers', start_date, end_date)
cdef set _get_dividend_sids(object db, int start_date, int end_date):
return _get_sids_from_table(db, 'dividends', start_date, end_date)
cdef _adjustments(object adjustments_db,
set split_sids,
set merger_sids,
set dividends_sids,
int start_date,
int end_date,
Int64Index_t assets):
c = adjustments_db.cursor()
splits_to_query = [str(a) for a in assets if a in split_sids]
splits_results = []
while splits_to_query:
query_len = min(len(splits_to_query), SQLITE_MAX_IN_STATEMENT)
query_assets = splits_to_query[:query_len]
t= [str(a) for a in query_assets]
statement = ADJ_QUERY_TEMPLATE.format('splits',
",".join(['?' for _ in query_assets]), start_date, end_date)
c.execute(statement, t)
splits_to_query = splits_to_query[query_len:]
splits_results.extend(c.fetchall())
mergers_to_query = [str(a) for a in assets if a in merger_sids]
mergers_results = []
while mergers_to_query:
query_len = min(len(mergers_to_query), SQLITE_MAX_IN_STATEMENT)
query_assets = mergers_to_query[:query_len]
t= [str(a) for a in query_assets]
statement = ADJ_QUERY_TEMPLATE.format('mergers',
",".join(['?' for _ in query_assets]), start_date, end_date)
c.execute(statement, t)
mergers_to_query = mergers_to_query[query_len:]
mergers_results.extend(c.fetchall())
dividends_to_query = [str(a) for a in assets if a in dividends_sids]
dividends_results = []
while dividends_to_query:
query_len = min(len(dividends_to_query), SQLITE_MAX_IN_STATEMENT)
query_assets = dividends_to_query[:query_len]
t= [str(a) for a in query_assets]
statement = ADJ_QUERY_TEMPLATE.format('dividends',
",".join(['?' for _ in query_assets]), start_date, end_date)
c.execute(statement, t)
dividends_to_query = dividends_to_query[query_len:]
dividends_results.extend(c.fetchall())
return splits_results, mergers_results, dividends_results
cpdef load_adjustments_from_sqlite(object adjustments_db, # sqlite3.Connection
list columns,
DatetimeIndex_t dates,
Int64Index_t assets):
"""
Load a dictionary of Adjustment objects from adjustments_db
Parameters
----------
adjustments_db : sqlite3.Connection
Connection to a sqlite3 table in the format written by
SQLiteAdjustmentWriter.
columns : list[str]
List of column names for which adjustments are needed.
dates : pd.DatetimeIndex
Dates for which adjustments are needed
assets : pd.Int64Index
Assets for which adjustments are needed.
"""
cdef int start_date = int((dates[0] - EPOCH).total_seconds())
cdef int end_date = int((dates[-1] - EPOCH).total_seconds())
cdef set split_sids = _get_split_sids(
adjustments_db,
start_date,
end_date,
)
cdef set merger_sids = _get_merger_sids(
adjustments_db,
start_date,
end_date,
)
cdef set dividend_sids = _get_dividend_sids(
adjustments_db,
start_date,
end_date,
)
cdef:
list splits, mergers, dividends
splits, mergers, dividends = _adjustments(
adjustments_db,
split_sids,
merger_sids,
dividend_sids,
start_date,
end_date,
assets,
)
cdef list results = [{} for column in columns]
cdef dict asset_ixs = {} # Cache sid lookups here.
cdef:
int sid
double ratio
int eff_date
int date_loc
Py_ssize_t asset_ix
int i
dict col_adjustments
# splits affect prices and volumes, volumes is the inverse
for sid, ratio, eff_date in splits:
date_loc = dates.get_loc(
Timestamp(eff_date, unit='s', tz='UTC'),
# Get the first date **on or after** the effective date.
method='bfill',
)
if not PyDict_Contains(asset_ixs, sid):
asset_ixs[sid] = assets.get_loc(sid)
asset_ix = asset_ixs[sid]
price_adj = Float64Multiply(0, date_loc, asset_ix, ratio)
for i, column in enumerate(columns):
col_adjustments = results[i]
if column != 'volume':
try:
col_adjustments[date_loc].append(price_adj)
except KeyError:
col_adjustments[date_loc] = [price_adj]
else:
volume_adj = Float64Multiply(
0, date_loc, asset_ix, 1.0 / ratio
)
try:
col_adjustments[date_loc].append(volume_adj)
except KeyError:
col_adjustments[date_loc] = [volume_adj]
# mergers affect prices only
for sid, ratio, eff_date in mergers:
date_loc = dates.get_loc(
Timestamp(eff_date, unit='s', tz='UTC'),
# Get the first date **on or after** the effective date.
method='bfill',
)
if not PyDict_Contains(asset_ixs, sid):
asset_ixs[sid] = assets.get_loc(sid)
asset_ix = asset_ixs[sid]
adj = Float64Multiply(0, date_loc, asset_ix, ratio)
for i, column in enumerate(columns):
col_adjustments = results[i]
if column != 'volume':
try:
col_adjustments[date_loc].append(adj)
except KeyError:
col_adjustments[date_loc] = [adj]
# dividends affect prices only
for sid, ratio, eff_date in dividends:
date_loc = dates.get_loc(
Timestamp(eff_date, unit='s', tz='UTC'),
# Get the first date **on or after** the effective date.
method='bfill',
)
if not PyDict_Contains(asset_ixs, sid):
asset_ixs[sid] = assets.get_loc(sid)
asset_ix = asset_ixs[sid]
adj = Float64Multiply(0, last_row, asset_ix, ratio)
for i, column in enumerate(columns):
col_adjustments = results[i]
if column != 'volume':
try:
col_adjustments[date_loc].append(adj)
except KeyError:
col_adjustments[date_loc] = [adj]
return results
@@ -2,7 +2,7 @@
classifier.py
"""
from zipline.modelling.term import Term
from zipline.pipeline.term import Term
class Classifier(Term):
+9
View File
@@ -0,0 +1,9 @@
from .equity_pricing import USEquityPricing
from .dataset import DataSet, Column, BoundColumn
__all__ = [
'BoundColumn',
'Column',
'DataSet',
'USEquityPricing',
]
@@ -6,8 +6,8 @@ from six import (
with_metaclass,
)
from zipline.modelling.term import Term
from zipline.modelling.factor import Latest
from zipline.pipeline.term import Term
from zipline.pipeline.factor import Latest
class Column(object):
@@ -1,12 +1,6 @@
from numpy import (
float64,
uint32,
)
from numpy import float64, uint32
from zipline.data.dataset import (
Column,
DataSet,
)
from .dataset import Column, DataSet
class USEquityPricing(DataSet):
@@ -39,7 +39,7 @@ class FFCEngine(with_metaclass(ABCMeta)):
Parameters
----------
pipeline : zipline.modelling.pipeline.Pipeline
pipeline : zipline.pipeline.Pipeline
The pipeline to run.
start_date : pd.Timestamp
Start date of the computed matrix.
@@ -53,7 +53,7 @@ class FFCEngine(with_metaclass(ABCMeta)):
The columns `result` correspond wil be the computed results of
`pipeline.columns`, which should be a dictionary mapping strings to
instances of `zipline.modelling.term.Term`.
instances of `zipline.pipeline.term.Term`.
For each date between `start_date` and `end_date`, `result` will
contain a row for each asset that passed `pipeline.screen`. A
@@ -111,7 +111,7 @@ class SimpleFFCEngine(object):
Parameters
----------
pipeline : zipline.modelling.pipeline.Pipeline
pipeline : zipline.pipeline.Pipeline
The pipeline to run.
start_date : pd.Timestamp
Start date of the computed matrix.
@@ -142,7 +142,7 @@ class SimpleFFCEngine(object):
5. Stick the values computed in (4) into a DataFrame and return it.
Step 0 is performed by `zipline.modelling.graph.TermGraph`.
Step 0 is performed by `zipline.pipeline.graph.TermGraph`.
Step 1 is performed in `self._compute_root_mask`.
Step 2 is performed in `self.compute_chunk`.
Steps 3, 4, and 5 are performed in self._format_factor_matrix.
@@ -280,7 +280,7 @@ class SimpleFFCEngine(object):
Parameters
----------
graph : zipline.modelling.graph.TermGraph
graph : zipline.pipeline.graph.TermGraph
dates : pd.DatetimeIndex
Row labels for our root mask.
assets : pd.Int64Index
@@ -12,7 +12,7 @@ from numpy import (
find_common_type,
)
from zipline.modelling.term import Term, NotSpecified
from zipline.pipeline.term import Term, NotSpecified
_VARIABLE_NAME_RE = re.compile("^(x_)([0-9]+)$")
@@ -16,14 +16,14 @@ from zipline.errors import (
UnsupportedDataType,
)
from zipline.lib.rank import rankdata_2d_ordinal
from zipline.modelling.term import (
from zipline.pipeline.term import (
CustomTermMixin,
NotSpecified,
RequiredWindowLengthMixin,
SingleInputMixin,
Term,
)
from zipline.modelling.expression import (
from zipline.pipeline.expression import (
BadBinaryOperator,
COMPARISONS,
is_comparison,
@@ -33,7 +33,7 @@ from zipline.modelling.expression import (
NUMEXPR_MATH_FUNCS,
UNARY_OPS,
)
from zipline.modelling.filter import (
from zipline.pipeline.filter import (
NumExprFilter,
PercentileFilter,
)
@@ -230,7 +230,7 @@ class Factor(Term):
Parameters
----------
ranks : zipline.modelling.factor.Rank
ranks : zipline.pipeline.factor.Rank
A new factor that will compute the sorted indices of the data
produced by `self`.
method : str, {'ordinal', 'min', 'max', 'dense', 'average'}
@@ -243,7 +243,7 @@ class Factor(Term):
Returns
-------
ranks : zipline.modelling.factor.Rank
ranks : zipline.pipeline.factor.Rank
Notes
-----
@@ -258,7 +258,7 @@ class Factor(Term):
--------
scipy.stats.rankdata
zipline.lib.rank
zipline.modelling.factor.Rank
zipline.pipeline.factor.Rank
"""
return Rank(self if ascending else -self, method=method, mask=mask)
@@ -273,7 +273,7 @@ class Factor(Term):
Returns
-------
filter : zipline.modelling.filter.Filter
filter : zipline.pipeline.filter.Filter
"""
return self.rank(ascending=False, mask=mask) <= N
@@ -288,7 +288,7 @@ class Factor(Term):
Returns
-------
filter : zipline.modelling.filter.Filter
filter : zipline.pipeline.filter.Filter
"""
return self.rank(ascending=True, mask=mask) <= N
@@ -308,12 +308,12 @@ class Factor(Term):
Returns
-------
out : zipline.modelling.filter.PercentileFilter
out : zipline.pipeline.filter.PercentileFilter
A new filter that will compute the specified percentile-range mask.
See Also
--------
zipline.modelling.filter.PercentileFilter
zipline.pipeline.filter.PercentileFilter
"""
return PercentileFilter(
self,
@@ -350,7 +350,7 @@ class Rank(SingleInputMixin, Factor):
Parameters
----------
factor : zipline.modelling.factor.Factor
factor : zipline.pipeline.factor.Factor
The factor on which to compute ranks.
method : str, {'average', 'min', 'max', 'dense', 'ordinal'}
The method used to assign ranks to tied elements. See
@@ -18,8 +18,8 @@ from numpy import (
)
from numexpr import evaluate
from zipline.data.equities import USEquityPricing
from zipline.modelling.term import SingleInputMixin
from zipline.pipeline.data import USEquityPricing
from zipline.pipeline.term import SingleInputMixin
from zipline.utils.control_flow import ignore_nanwarnings
from .factor import CustomFactor
@@ -13,11 +13,11 @@ from operator import attrgetter
from zipline.errors import (
BadPercentileBounds,
)
from zipline.modelling.term import (
from zipline.pipeline.term import (
SingleInputMixin,
Term,
)
from zipline.modelling.expression import (
from zipline.pipeline.expression import (
BadBinaryOperator,
FILTER_BINOPS,
method_name_for_op,
@@ -119,7 +119,7 @@ class PercentileFilter(SingleInputMixin, Filter):
Parameters
----------
factor : zipline.modelling.factor.Factor
factor : zipline.pipeline.factor.Factor
The factor over which to compute percentile bounds.
min_percentile : float [0.0, 1.0]
The minimum percentile rank of an asset that will pass the filter.
@@ -7,7 +7,7 @@ from networkx import (
)
from six import itervalues, iteritems
from zipline.utils.memoize import lazyval
from zipline.modelling.visualize import display_graph
from zipline.pipeline.visualize import display_graph
class CyclicDependency(Exception):
@@ -98,9 +98,9 @@ class TermGraph(DiGraph):
See Also
--------
zipline.modelling.graph.TermGraph.offset
zipline.modelling.engine.SimpleFFCEngine._inputs_for_term
zipline.modelling.engine.SimpleFFCEngine._mask_for_term
zipline.pipeline.graph.TermGraph.offset
zipline.pipeline.engine.SimpleFFCEngine._inputs_for_term
zipline.pipeline.engine.SimpleFFCEngine._mask_for_term
"""
out = {}
for term in self:
@@ -147,8 +147,8 @@ class TermGraph(DiGraph):
See Also
--------
zipline.modelling.graph.TermGraph.offset
zipline.modelling.term.Term.extra_input_rows
zipline.pipeline.graph.TermGraph.offset
zipline.pipeline.term.Term.extra_input_rows
"""
return {
term: attrs['extra_rows']
@@ -12,7 +12,7 @@ from six import with_metaclass
class FFCLoader(with_metaclass(ABCMeta)):
"""
ABC for classes that can load data for use with zipline.modelling pipeline.
ABC for classes that can load data for use with zipline.pipeline APIs.
TODO: DOCUMENT THIS MORE!
"""
@@ -19,6 +19,7 @@ from contextlib import contextmanager
from errno import ENOENT
from os import remove
from os.path import exists
import sqlite3
from bcolz import (
carray,
@@ -45,20 +46,16 @@ from six import (
string_types,
with_metaclass,
)
import sqlite3
from zipline.data.ffc.base import FFCLoader
from zipline.data.ffc.loaders._equities import (
_compute_row_slices,
_read_bcolz_data,
)
from zipline.data.ffc.loaders._adjustments import load_adjustments_from_sqlite
from zipline.lib.adjusted_array import (
adjusted_array,
)
from zipline.errors import NoFurtherDataError
from .base import FFCLoader
from ._equities import _compute_row_slices, _read_bcolz_data
from ._adjustments import load_adjustments_from_sqlite
OHLC = frozenset(['open', 'high', 'low', 'close'])
US_EQUITY_PRICING_BCOLZ_COLUMNS = [
'open', 'high', 'low', 'close', 'volume', 'day', 'id'
@@ -624,7 +621,7 @@ def _shift_dates(dates, start_date, end_date, shift):
if start_date < dates[0]:
raise NoFurtherDataError(
msg=(
"Modeling Query requested data starting on {query_start}, "
"Pipeline Query requested data starting on {query_start}, "
"but first known date is {calendar_start}"
).format(
query_start=str(start_date),
@@ -638,7 +635,7 @@ def _shift_dates(dates, start_date, end_date, shift):
if start < shift:
raise NoFurtherDataError(
msg=(
"Modeling Query requested data from {shift}"
"Pipeline Query requested data from {shift}"
" days before {query_start}, but first known date is only "
"{start} days earlier."
).format(shift=shift, query_start=start_date, start=start),
@@ -650,7 +647,7 @@ def _shift_dates(dates, start_date, end_date, shift):
if end_date > dates[-1]:
raise NoFurtherDataError(
msg=(
"Modeling Query requesting data up to {query_end}, "
"Pipeline Query requesting data up to {query_end}, "
"but last known date is {calendar_end}"
).format(
query_end=end_date,
@@ -17,7 +17,8 @@ from zipline.lib.adjustment import (
Float64Multiply,
Float64Overwrite,
)
from zipline.data.ffc.base import FFCLoader
from .base import FFCLoader
ADD, MULTIPLY, OVERWRITE = range(3)
@@ -45,7 +46,7 @@ class DataFrameFFCLoader(FFCLoader):
Parameters
----------
column : zipline.data.dataset.BoundColumn
column : zipline.pipeline.data.BoundColumn
The column whose data is loadable by this loader.
baseline : pandas.DataFrame
A DataFrame with index of type DatetimeIndex and columns of type
@@ -58,7 +59,7 @@ class DataFrameFFCLoader(FFCLoader):
A DataFrame with the following columns:
sid : int
value : any
kind : int (zipline.data.ffc.frame.ADJUSTMENT_TYPES)
kind : int (zipline.pipeline.loaders.frame.ADJUSTMENT_TYPES)
start_date : datetime64 (can be NaT)
end_date : datetime64 (must be set)
apply_date : datetime64 (must be set)
@@ -11,17 +11,13 @@ from numpy import (
iinfo,
uint32,
)
from pandas import (
DataFrame,
Timestamp,
)
from pandas import DataFrame, Timestamp
from six import iteritems
from sqlite3 import connect as sqlite3_connect
from six import iteritems
from zipline.data.ffc.base import FFCLoader
from zipline.data.ffc.frame import DataFrameFFCLoader
from zipline.data.ffc.loaders.us_equity_pricing import (
from .base import FFCLoader
from .frame import DataFrameFFCLoader
from .equity_pricing_loader import (
BcolzDailyBarWriter,
SQLiteAdjustmentReader,
SQLiteAdjustmentWriter,
@@ -1,7 +1,8 @@
from zipline.utils.preprocess import expect_types, optional
from zipline.modelling.term import Term
from zipline.modelling.filter import Filter
from zipline.modelling.graph import TermGraph
from .term import Term
from .filter import Filter
from .graph import TermGraph
class Pipeline(object):
@@ -12,7 +13,7 @@ class Pipeline(object):
Name for this pipeline.
columns : dict, optional
Initial columns.
screen : zipline.modelling.term.Filter, optional
screen : zipline.pipeline.term.Filter, optional
Initial screen.
Methods
@@ -71,7 +72,7 @@ class Pipeline(object):
Parameters
----------
column : zipline.modelling.Term
column : zipline.pipeline.Term
A Filter, Factor, or Classifier to add to the pipeline.
name : str
Name of the column to add.
@@ -105,7 +106,7 @@ class Pipeline(object):
Returns
-------
removed : zipline.modelling.term.Term
removed : zipline.pipeline.term.Term
The removed term.
"""
return self.columns.pop(name)
@@ -120,7 +121,7 @@ class Pipeline(object):
Parameter
---------
filter : zipline.modelling.filter.Filter
filter : zipline.pipeline.filter.Filter
The screen to apply.
overwrite : bool
Whether to overwrite any existing screen. If overwrite is False
@@ -145,7 +146,7 @@ class Pipeline(object):
----------
screen_name : str
Name to supply for self.screen.
default_screen : zipline.modelling.term.Term
default_screen : zipline.pipeline.term.Term
Term to use as a screen if self.screen is None.
"""
columns = self.columns.copy()
@@ -12,10 +12,9 @@ from subprocess import Popen, PIPE
from networkx import topological_sort
from six import iteritems
from zipline.data.dataset import BoundColumn
from zipline.modelling import Filter, Factor, Classifier, Term
from zipline.modelling.term import AssetExists
from zipline.pipeline.data import BoundColumn
from zipline.pipeline import Filter, Factor, Classifier, Term
from zipline.pipeline.term import AssetExists
class NoIPython(Exception):
@@ -82,7 +81,7 @@ def _render(g, out, format_, include_asset_exists=False):
Parameters
----------
g : zipline.modelling.graph.TermGraph
g : zipline.pipeline.graph.TermGraph
Graph to render.
out : file-like object
format_ : str {'png', 'svg'}