Skip to content

Commit 8c7f74e

Browse files
committed
Merge common, func, abstract, stream as pxi to _ta_lib.pyx
1 parent caf314f commit 8c7f74e

11 files changed

+229
-219
lines changed

setup.py

+8-9
Original file line numberDiff line numberDiff line change
@@ -80,16 +80,15 @@
8080
if has_cython:
8181
cmdclass['build_ext'] = build_ext
8282

83-
ext_modules = []
84-
for name in ['common', 'func', 'abstract', 'stream']:
85-
ext = Extension(
86-
'talib.%s' % name,
87-
[('talib/%s.pyx' if has_cython else 'talib/%s.c') % name],
88-
include_dirs = include_dirs,
89-
library_dirs = lib_talib_dirs,
90-
libraries = [lib_talib_name]
83+
ext_modules = [
84+
Extension(
85+
'talib._ta_lib',
86+
['talib/_ta_lib.pyx' if has_cython else 'talib/_ta_lib.c'],
87+
include_dirs=include_dirs,
88+
library_dirs=lib_talib_dirs,
89+
libraries=[lib_talib_name]
9190
)
92-
ext_modules.append(ext)
91+
]
9392

9493
setup(
9594
name = 'TA-Lib',

talib/__init__.py

+12-9
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11

22
import atexit
33

4-
from . import common
5-
from . import abstract
6-
from . import stream
7-
from .common import MA_Type, __ta_version__
8-
from .common import _ta_set_unstable_period as set_unstable_period
9-
from .common import _ta_get_unstable_period as get_unstable_period
10-
from .func import *
4+
from ._ta_lib import (
5+
_ta_initialize, _ta_shutdown, MA_Type, __ta_version__,
6+
_ta_set_unstable_period as set_unstable_period,
7+
_ta_get_unstable_period as get_unstable_period,
8+
__TA_FUNCTION_NAMES__
9+
)
10+
11+
func = __import__("_ta_lib", globals(), locals(), __TA_FUNCTION_NAMES__, level=1)
12+
for func_name in __TA_FUNCTION_NAMES__:
13+
globals()[func_name] = getattr(func, func_name)
1114

1215
__version__ = '0.4.10'
1316

@@ -18,8 +21,8 @@
1821
# functions are called. Finally, when the python process exits, we shutdown
1922
# the underlying TA-Lib.
2023

21-
common._ta_initialize()
22-
atexit.register(common._ta_shutdown)
24+
_ta_initialize()
25+
atexit.register(_ta_shutdown)
2326

2427
__function_groups__ = {
2528
'Cycle Indicators': [

talib/abstract.pyx renamed to talib/_abstract.pxi

+5-16
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,6 @@
22
This file Copyright (c) 2013 Brian A Cappello <briancappello at gmail>
33
'''
44
import math
5-
6-
from . import func as func_c
7-
from .common import _ta_check_success, MA_Type
85
try:
96
from collections import OrderedDict
107
except ImportError: # handle python 2.6 and earlier
@@ -14,11 +11,11 @@ import numpy
1411
import sys
1512

1613
cimport numpy as np
17-
cimport libta_lib as lib
14+
cimport _ta_lib as lib
15+
# NOTE: _ta_check_success, MA_Type is defined in _common.pxi
1816

1917
lib.TA_Initialize()
2018

21-
__FUNCTION_NAMES = set(func_c.__all__)
2219

2320
__INPUT_ARRAYS_DEFAULTS = {'open': None,
2421
'high': None,
@@ -90,11 +87,9 @@ class Function(object):
9087
- FunctionInstance([input_arrays,] [param_args_andor_kwargs]) # calls set_function_args and returns self.outputs
9188
"""
9289

93-
def __init__(self, function_name, *args, **kwargs):
90+
def __init__(self, function_name, func_object, *args, **kwargs):
9491
# make sure the function_name is valid and define all of our variables
9592
self.__name = function_name.upper()
96-
if self.__name not in __FUNCTION_NAMES:
97-
raise Exception('%s not supported by TA-LIB.' % self.__name)
9893
self.__namestr = self.__name
9994
self.__name = str2bytes(self.__name)
10095
self.__info = None
@@ -109,6 +104,7 @@ class Function(object):
109104
# finish initializing: query the TALIB abstract interface and set arguments
110105
self.__initialize_function_info()
111106
self.set_function_args(*args, **kwargs)
107+
self.func_object = func_object
112108

113109
def __initialize_function_info(self):
114110
# function info
@@ -386,7 +382,7 @@ class Function(object):
386382
args.append(value)
387383

388384
# Use the func module to actually call the function.
389-
results = func_c.__getattribute__(self.__namestr)(*args)
385+
results = self.func_object(*args)
390386
if isinstance(results, np.ndarray):
391387
keys = self.__outputs.keys()
392388
if not isinstance(keys, list):
@@ -682,10 +678,3 @@ cdef int __ta_getLookback(lib.TA_ParamHolder *holder):
682678
retCode = lib.TA_GetLookback(holder, &lookback)
683679
_ta_check_success('TA_GetLookback', retCode)
684680
return lookback
685-
686-
# Configure all the available TA-Lib functions to be exported as
687-
# an abstract function wrapper for convenient import.
688-
for name in __FUNCTION_NAMES:
689-
exec "%s = Function('%s')" % (name, name)
690-
691-
__all__ = ['Function'] + list(__FUNCTION_NAMES)

talib/common.pyx renamed to talib/_common.pxi

+2-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
2-
cimport libta_lib as lib
3-
from libta_lib cimport TA_RetCode, TA_FuncUnstId
1+
cimport _ta_lib as lib
2+
from _ta_lib cimport TA_RetCode, TA_FuncUnstId
43

54
__ta_version__ = lib.TA_GetVersionString()
65

talib/func.pyx renamed to talib/_func.pxi

+4-5
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ cimport numpy as np
22
from numpy import nan
33
from cython import boundscheck, wraparound
44

5-
from .common cimport _ta_check_success
5+
# _ta_check_success: defined in _common.pxi
66

77
cdef double NaN = nan
88

@@ -14,10 +14,9 @@ cdef extern from "numpy/arrayobject.h":
1414

1515
np.import_array() # Initialize the NumPy C API
1616

17-
cimport libta_lib as lib
18-
from libta_lib cimport TA_RetCode
17+
cimport _ta_lib as lib
18+
from _ta_lib cimport TA_RetCode
1919

20-
lib.TA_Initialize()
2120

2221
@wraparound(False) # turn off relative indexing from end of lists
2322
@boundscheck(False) # turn off bounds-checking for entire function
@@ -11243,4 +11242,4 @@ def WMA( np.ndarray real not None , int timeperiod=-2**31 ):
1124311242
_ta_check_success("TA_WMA", retCode)
1124411243
return outreal
1124511244

11246-
__all__ = ["ACOS","AD","ADD","ADOSC","ADX","ADXR","APO","AROON","AROONOSC","ASIN","ATAN","ATR","AVGPRICE","BBANDS","BETA","BOP","CCI","CDL2CROWS","CDL3BLACKCROWS","CDL3INSIDE","CDL3LINESTRIKE","CDL3OUTSIDE","CDL3STARSINSOUTH","CDL3WHITESOLDIERS","CDLABANDONEDBABY","CDLADVANCEBLOCK","CDLBELTHOLD","CDLBREAKAWAY","CDLCLOSINGMARUBOZU","CDLCONCEALBABYSWALL","CDLCOUNTERATTACK","CDLDARKCLOUDCOVER","CDLDOJI","CDLDOJISTAR","CDLDRAGONFLYDOJI","CDLENGULFING","CDLEVENINGDOJISTAR","CDLEVENINGSTAR","CDLGAPSIDESIDEWHITE","CDLGRAVESTONEDOJI","CDLHAMMER","CDLHANGINGMAN","CDLHARAMI","CDLHARAMICROSS","CDLHIGHWAVE","CDLHIKKAKE","CDLHIKKAKEMOD","CDLHOMINGPIGEON","CDLIDENTICAL3CROWS","CDLINNECK","CDLINVERTEDHAMMER","CDLKICKING","CDLKICKINGBYLENGTH","CDLLADDERBOTTOM","CDLLONGLEGGEDDOJI","CDLLONGLINE","CDLMARUBOZU","CDLMATCHINGLOW","CDLMATHOLD","CDLMORNINGDOJISTAR","CDLMORNINGSTAR","CDLONNECK","CDLPIERCING","CDLRICKSHAWMAN","CDLRISEFALL3METHODS","CDLSEPARATINGLINES","CDLSHOOTINGSTAR","CDLSHORTLINE","CDLSPINNINGTOP","CDLSTALLEDPATTERN","CDLSTICKSANDWICH","CDLTAKURI","CDLTASUKIGAP","CDLTHRUSTING","CDLTRISTAR","CDLUNIQUE3RIVER","CDLUPSIDEGAP2CROWS","CDLXSIDEGAP3METHODS","CEIL","CMO","CORREL","COS","COSH","DEMA","DIV","DX","EMA","EXP","FLOOR","HT_DCPERIOD","HT_DCPHASE","HT_PHASOR","HT_SINE","HT_TRENDLINE","HT_TRENDMODE","KAMA","LINEARREG","LINEARREG_ANGLE","LINEARREG_INTERCEPT","LINEARREG_SLOPE","LN","LOG10","MA","MACD","MACDEXT","MACDFIX","MAMA","MAVP","MAX","MAXINDEX","MEDPRICE","MFI","MIDPOINT","MIDPRICE","MIN","MININDEX","MINMAX","MINMAXINDEX","MINUS_DI","MINUS_DM","MOM","MULT","NATR","OBV","PLUS_DI","PLUS_DM","PPO","ROC","ROCP","ROCR","ROCR100","RSI","SAR","SAREXT","SIN","SINH","SMA","SQRT","STDDEV","STOCH","STOCHF","STOCHRSI","SUB","SUM","T3","TAN","TANH","TEMA","TRANGE","TRIMA","TRIX","TSF","TYPPRICE","ULTOSC","VAR","WCLPRICE","WILLR","WMA"]
11245+
__TA_FUNCTION_NAMES__ = ["ACOS","AD","ADD","ADOSC","ADX","ADXR","APO","AROON","AROONOSC","ASIN","ATAN","ATR","AVGPRICE","BBANDS","BETA","BOP","CCI","CDL2CROWS","CDL3BLACKCROWS","CDL3INSIDE","CDL3LINESTRIKE","CDL3OUTSIDE","CDL3STARSINSOUTH","CDL3WHITESOLDIERS","CDLABANDONEDBABY","CDLADVANCEBLOCK","CDLBELTHOLD","CDLBREAKAWAY","CDLCLOSINGMARUBOZU","CDLCONCEALBABYSWALL","CDLCOUNTERATTACK","CDLDARKCLOUDCOVER","CDLDOJI","CDLDOJISTAR","CDLDRAGONFLYDOJI","CDLENGULFING","CDLEVENINGDOJISTAR","CDLEVENINGSTAR","CDLGAPSIDESIDEWHITE","CDLGRAVESTONEDOJI","CDLHAMMER","CDLHANGINGMAN","CDLHARAMI","CDLHARAMICROSS","CDLHIGHWAVE","CDLHIKKAKE","CDLHIKKAKEMOD","CDLHOMINGPIGEON","CDLIDENTICAL3CROWS","CDLINNECK","CDLINVERTEDHAMMER","CDLKICKING","CDLKICKINGBYLENGTH","CDLLADDERBOTTOM","CDLLONGLEGGEDDOJI","CDLLONGLINE","CDLMARUBOZU","CDLMATCHINGLOW","CDLMATHOLD","CDLMORNINGDOJISTAR","CDLMORNINGSTAR","CDLONNECK","CDLPIERCING","CDLRICKSHAWMAN","CDLRISEFALL3METHODS","CDLSEPARATINGLINES","CDLSHOOTINGSTAR","CDLSHORTLINE","CDLSPINNINGTOP","CDLSTALLEDPATTERN","CDLSTICKSANDWICH","CDLTAKURI","CDLTASUKIGAP","CDLTHRUSTING","CDLTRISTAR","CDLUNIQUE3RIVER","CDLUPSIDEGAP2CROWS","CDLXSIDEGAP3METHODS","CEIL","CMO","CORREL","COS","COSH","DEMA","DIV","DX","EMA","EXP","FLOOR","HT_DCPERIOD","HT_DCPHASE","HT_PHASOR","HT_SINE","HT_TRENDLINE","HT_TRENDMODE","KAMA","LINEARREG","LINEARREG_ANGLE","LINEARREG_INTERCEPT","LINEARREG_SLOPE","LN","LOG10","MA","MACD","MACDEXT","MACDFIX","MAMA","MAVP","MAX","MAXINDEX","MEDPRICE","MFI","MIDPOINT","MIDPRICE","MIN","MININDEX","MINMAX","MINMAXINDEX","MINUS_DI","MINUS_DM","MOM","MULT","NATR","OBV","PLUS_DI","PLUS_DM","PPO","ROC","ROCP","ROCR","ROCR100","RSI","SAR","SAREXT","SIN","SINH","SMA","SQRT","STDDEV","STOCH","STOCHF","STOCHRSI","SUB","SUM","T3","TAN","TANH","TEMA","TRANGE","TRIMA","TRIX","TSF","TYPPRICE","ULTOSC","VAR","WCLPRICE","WILLR","WMA"]

0 commit comments

Comments
 (0)