Где код Python для методов, используемых для zipline?

Я новичок в Python, но в java у вас обычно есть этот импорт, показывающий, откуда именно берутся объекты. Например, приведенный ниже оператор импорта сообщает мне, что объект SpringBootApplication поступает непосредственно из класса Spring Boot, и я могу погрузиться в класс, чтобы прочитать весь код его метода:

import org.springframework.boot.autoconfigure.SpringBootApplication;

Теперь я смотрю на библиотеку zipline в python:

https://github.com/quantopian/zipline

Это из их примера кода на главной странице их репозитория github:

from zipline.api import (
    history,
    order_target,
    record,
    symbol,
)

Итак, я просматриваю папку zipline, чтобы увидеть, есть ли файл API, из которого импортируются методы history, order_target, record, symbol, поскольку я хочу прочитать базовый код, который управляет этими методами.

Код мало что мне говорит (https://github.com/quantopian/zipline/blob/master/zipline/api.py):

from .finance.asset_restrictions import (
    Restriction,
    StaticRestrictions,
    HistoricalRestrictions,
    RESTRICTION_STATES,
)
from .finance import commission, execution, slippage, cancel_policy
from .finance.cancel_policy import (
    NeverCancel,
    EODCancel
)
from .finance.slippage import (
    FixedSlippage,
    VolumeShareSlippage,
)
from .utils import math_utils, events
from .utils.events import (
    date_rules,
    time_rules
)

__all__ = [
    'EODCancel',
    'FixedSlippage',
    'NeverCancel',
    'VolumeShareSlippage',
    'Restriction',
    'StaticRestrictions',
    'HistoricalRestrictions',
    'RESTRICTION_STATES',
    'cancel_policy',
    'commission',
    'date_rules',
    'events',
    'execution',
    'math_utils',
    'slippage',
    'time_rules'
]

Однако есть файл с именем api.pyi, который, кажется, содержит некоторый текст о том, что делают интересующие меня методы (https://github.com/quantopian/zipline/blob/master/zipline/api.pyi). Например, с методом record он говорит:

def record(*args, **kwargs):
    """Track and record values each day.

    Parameters
    ----------
    **kwargs
        The names and values to record.

    Notes
    -----
    These values will appear in the performance packets and the performance
    dataframe passed to ``analyze`` and returned from
    :func:`~zipline.run_algorithm`.
    """

Я подумал, что, возможно, код находится в zipline.run_algorithm, а также искал файл zipline/run_algorithm, но не смог найти его в репозитории.

Где хранится код этих методов в python? Я просто хочу прочитать код, чтобы лучше понять, как он работает.


person Simon    schedule 16.04.2017    source источник
comment
У меня есть небольшой опыт работы с Java. В Python вы можете проверять объекты и определять их расположение, например, если вы импортируете модуль: import test, то test.__file__ даст вам каталог, в котором существует модуль test. То же самое для пакетов и всех других объектов, все они имеют соответствующие встроенные атрибуты, которые предоставляют некоторую информацию об этом объекте, dir(object) возвращает много деталей.   -  person direprobs    schedule 16.04.2017


Ответы (1)


zipline использует несколько сложную и необычную структуру импорта. Подсказка находится в этом комментарии в api.py:

# Note that part of the API is implemented in TradingAlgorithm as
# methods (e.g. order). These are added to this namespace via the
# decorator ``api_method`` inside of algorithm.py.

Если вы посмотрите на algorithm.py, вы увидите эти record и остальные методы, определенные с помощью декоратора @api_method. (И если вы посмотрите в zipline/utils/api_support.py, вы увидите код самого декоратора, который добавляет эти методы в zipline.api с помощью setattr.)

person BrenBarn    schedule 16.04.2017